ADMM算法及其放缩形式,在压缩快照成像重建的图像重建论文中的公式推导

article/2025/9/22 11:11:22

刚接触图像恢复问题,简单记录一下最近看论文刚弄懂的一个小问题

ADMM算法

ADMM(交替方向乘子法)是一种解决变量可分离凸优化问题的简单算法,具有求解速度快,收敛性能好的特点。ADMM可以将原问题转换为几个子问题,分别并行求解,最后协调各个子问题的解,得到原问题最优解。

算法流程

ADMM算法主要用于解决如下凸优化问题:
arg min ⁡ x , y f ( x ) + g ( y ) s . t . A x + B y = c \argmin_{x,y} f(x)+g(y) \\ s.t.\quad Ax+By=c x,yargminf(x)+g(y)s.t.Ax+By=c
其中, x ∈ R n x \in R^n xRn为目标函数 f ( x ) f(x) f(x) 的优化变量, y ∈ R m y \in R^{m} yRm为目标函数 g ( y ) g(y) g(y) 的优化变量, A ∈ R p × n A\in R^{p\times n} ARp×n B ∈ R p × m B\in R^{p\times m} BRp×m c ∈ R p c\in R^p cRp 。 函数 f f f g g g 是凸函数。

  1. 首先写出他的增广拉格朗日函数:
    L ρ ( x , y , λ ) = f ( x ) + g ( y ) + λ T ( A x + B y − c ) + ρ / 2 ∥ A x + B y − c ∥ 2 2 , ρ > 0 L_{\rho}(x,y,\lambda) = f(x)+g(y)+\lambda^T(Ax+By-c)+\rho/2\Vert Ax+By-c\Vert ^2_2, \quad \rho>0 Lρ(x,y,λ)=f(x)+g(y)+λT(Ax+Byc)+ρ/2∥Ax+Byc22,ρ>0
    λ ∈ R p \lambda \in R^p λRp是拉格朗日乘子, ρ \rho ρ为惩罚参数且 ρ > 0 \rho>0 ρ>0
  2. 利用ADMM算法求解:
    x k + 1 = arg min ⁡ x L ρ ( x , y k , λ k ) y k + 1 = arg min ⁡ y L ρ ( x k + 1 , y , λ k ) λ k + 1 = λ k + ρ ( A x k + 1 + B y k + 1 − c ) x_{k+1} = \argmin_x L_{\rho}(x,y_k,\lambda_k)\\ y_{k+1} = \argmin_y L_{\rho}(x_{k+1},y,\lambda_k)\\ \lambda_{k+1} = \lambda_k+\rho(Ax_{k+1}+By_{k+1}-c) xk+1=xargminLρ(x,yk,λk)yk+1=yargminLρ(xk+1,y,λk)λk+1=λk+ρ(Axk+1+Byk+1c)
    实际上就是将 x x x y y y的联合优化过程分开了。
  3. 利用放缩对偶变量进行化简:
    根据向量乘法公式 ∥ a + b ∥ 2 2 = ∥ a ∥ 2 2 + 2 a T b + ∥ b ∥ 2 2 \Vert a+b\Vert_2^2 = \Vert a \Vert_2^2+2a^Tb+\Vert b \Vert_2^2 a+b22=a22+2aTb+b22 2 a T b + ∥ b ∥ 2 2 = ∥ a + b ∥ 2 2 − ∥ a ∥ 2 2 2a^Tb +\Vert b \Vert_2^2= \Vert a+b\Vert^2_2-\Vert a \Vert_2^2 2aTb+b22=a+b22a22,所以 L ρ ( x , y , λ ) L_{\rho}(x,y,\lambda) Lρ(x,y,λ)中的线性项 λ T ( A x + B y − c ) \lambda^T(Ax+By-c) λT(Ax+Byc)和二次项 ρ / 2 ∥ A x + B y − c ∥ 2 2 \rho/2\Vert Ax+By-c\Vert ^2_2 ρ/2∥Ax+Byc22可以进行合并:
    λ T ( A x + B y − c ) + ρ / 2 ∥ A x + B y − c ∥ 2 2 = ρ 2 ( 2 λ T ρ ( A x + B y − c ) + ∥ A x + B y − c ∥ 2 2 ) = ρ 2 ( ∥ A x + B y − c + λ T / ρ ∥ 2 2 − ∥ λ / ρ ∥ 2 2 \lambda^T(Ax+By-c)+\rho/2\Vert Ax+By-c\Vert ^2_2 \\ \begin{array}{l} =\frac{\rho}2\left ( 2\frac{\lambda^T}{\rho}(Ax+By-c)+\Vert Ax+By-c\Vert ^2_2\right ) \\ =\frac{\rho}2(\Vert Ax+By-c+\lambda^T/\rho\Vert_2^2 - \Vert \lambda/\rho\Vert_2^2 \end{array} λT(Ax+Byc)+ρ/2∥Ax+Byc22=2ρ(2ρλT(Ax+Byc)+Ax+Byc22)=2ρ(Ax+Byc+λT/ρ22λ/ρ22
    由于最后一项 ∥ λ / ρ ∥ 2 2 \Vert \lambda/\rho\Vert_2^2 λ/ρ22 x x x y y y无关,因此不影响 x x x y y y子问题的求解,可以在求解子问题时省略。
  4. 令放缩对偶变量为 u = λ / ρ u=\lambda/\rho u=λ/ρ,则ADMM算法可以改写为以下形式:
    x k + 1 = arg min ⁡ x f ( x ) + ρ / 2 ∥ A x + B y k − c + u k ∥ 2 2 y k + 1 = arg min ⁡ x g ( y ) + ρ / 2 ∥ A x k + 1 + B y − c + u k ∥ 2 2 u k + 1 = u k + A x k + 1 + B y k + 1 − c x_{k+1} = \argmin_x f(x)+\rho/2\Vert Ax+By_k-c+u_k\Vert_2^2\\ y_{k+1} = \argmin_x g(y)+\rho/2\Vert Ax_{k+1}+By-c+u_k\Vert_2^2\\ u_{k+1} = u_k+Ax_{k+1}+By_{k+1}-c xk+1=xargminf(x)+ρ/2∥Ax+Bykc+uk22yk+1=xargming(y)+ρ/2∥Axk+1+Byc+uk22uk+1=uk+Axk+1+Byk+1c
    论文中经常利用放缩形式的ADMM算法,而刚开始接触ADMM时并不知道这种形式,所以导致很长一段时间我没看懂论文里公式是怎么推导的,这里对他的推导进行了一个总结。

在压缩图像重建中的应用

压缩快照成像过程
以上是压缩快照图像的成像过程,可以用以下公式来表示:
y = H x + z \pmb{y}= \pmb{H}\pmb{x}+\pmb{z} y=Hx+z
y \pmb{y} y代表观测图像, x \pmb{x} x代表理想的干净图像, H H H代表退化矩阵,是已知的, z \pmb z z代表观测噪声。
作者结合了深度图像先验以及去噪先验提出了以下重建模型:
重建模型
其中 T Θ ( e ) \pmb{T_\Theta(e)} TΘ(e)是一个未训练的神经网络(参考论文Deep Image Prior),用于提取图像先验, R ( x ) \pmb{R(x)} R(x)是去噪先验。以上优化模型可以利用ADMM算法进行求解,这里的第一项是保真项,后两项是先验项。然后引入放缩对偶变量 b \pmb{b} b,就能得到下面的式子:
增广拉格朗日函数
再利用ADMM算法就可以将上述问题解耦为关于 x , Θ , b \pmb{x,\Theta,b} x,Θ,b的三个子问题:
Θ ^ = arg min ⁡ Θ ρ 2 ∥ y − H T Θ ( e ) ∥ 2 2 + μ 2 ∥ x − T Θ ( e ) − b ∥ 2 2 x ^ = arg min ⁡ x 1 2 ∥ y − H x ∥ 2 2 + λ R ( x ) + μ 2 ∥ x − T Θ ( e ) − b ∥ 2 2 b k + 1 = b k − ( x k − T Θ k ( e ) ) \begin{array}{l} \hat{\boldsymbol{\Theta}}=\argmin\limits_{\Theta} \frac{\rho}{2}\left\|\boldsymbol{y}-\boldsymbol{H} \boldsymbol{T}_{\boldsymbol{\Theta}}(\boldsymbol{e})\right\|_{2}^{2}+\frac{\mu}{2}\left\|\boldsymbol{x}-\boldsymbol{T}_{\boldsymbol{\Theta}}(\boldsymbol{e})-\boldsymbol{b}\right\|_{2}^{2} \end{array}\\ \hat{\boldsymbol{x}}=\argmin_{\boldsymbol{x}} \frac{1}{2}\|\boldsymbol{y}-\boldsymbol{H} \boldsymbol{x}\|_{2}^{2}+\lambda R(\boldsymbol{x})+\frac{\mu}{2}\left\|\boldsymbol{x}-\boldsymbol{T}_{\boldsymbol{\Theta}}(\boldsymbol{e})-\boldsymbol{b}\right\|_{2}^{2} \\ \boldsymbol{b}^{k+1}=\boldsymbol{b}^{k}-\left(\boldsymbol{x}^{k}-\boldsymbol{T}_{\boldsymbol{\Theta}^{k}}(\boldsymbol{e})\right) Θ^=Θargmin2ρyHTΘ(e)22+2μxTΘ(e)b22x^=xargmin21yHx22+λR(x)+2μxTΘ(e)b22bk+1=bk(xkTΘk(e))
关于 Θ \Theta Θ的子问题利用DIP网络求解,这个式子可以直接作为他的loss函数,关于x的子问题含有 R ( x ) R(x) R(x)先验项,不便于直接求解,可以再利用ADMM算法进行分解,相当于ADMM里嵌套了一个ADMM,具体可以参考原论文。
论文链接: Self-supervised Neural Networks for Spectral Snapshot Compressive Imaging
参考网址:Anna的知乎回答:ADMM算法的详细推导过程是什么


http://chatgpt.dhexx.cn/article/nxkoxPrv.shtml

相关文章

开漏输出和推挽输出的区别?

《《《《正文》》》》》 《理解三极管的原理》 如下图,以NPN三极管为例: 它是一种电流控制型元器件,即基极B的输出输出电流可以实现对元器件的控制。所以可以进一步理解为基极B为控制端,集电极C为输入端,发射极E为输出…

推挽输出和开漏输出

推挽输出(push-pull): 推挽输出(push-pull): 推挽输出,正如字面上的意思,有“推”,也有“挽”,推挽输出电路运用两个MOS管构成,上面为P-MOS&…

推挽输出和开漏输出详解

序言: 平时,写程序的时候总遇IO口模式的端口配置。但是从来没有仔细研究过具体到底是什么含义。作为一名嵌入式工程师应该是不合格的,现在把端口定义重新梳理一下。 一、NPN和PNP区别 NPN 是用 B→E 的电流(IB&#xff0…

STM32的推挽输出和开漏输出

文章目录 前言一、推挽输出二、开漏输出三、区别和适应场景总结前言 本篇文章将带大家了解STM32的推挽输出和开漏输出,并且学习这两个的区别,学习分别在什么时候使用这两个不同的输出方式。 在 STM32 微控制器中,GPIO(General Purpose Input/Output)模块是一个通用的输入…

什么是GPIO的推挽输出和开漏输出

数字芯片GPIO一般分为推挽输出和开漏输出 数字芯片GPIO一般是推挽输出(PUSH-PULL),其内部结构如下: 当上面的MOS管导通时,GPIO输出高电平1,称为“推” 当下面MOS管导通时,GPIO输出低电平0&…

浅谈开漏输出和推挽输出的理解

理解电路元件特性 在理解这两种输出之前我们需要对三极管这种电路元器件进行理解,三极管都包括三个部分,基极(base)、集电极(Collector)以及发射极(Emitter)。他们负责不同的功能, 1.基极主要负责控制电流导通与否 2.…

开漏输出和推挽输出的差别

GPIO内部仅有以上三种组合形式 而当上面任意两种形式组合时则 一、推挽输出 高低电平两两组合则形成了推挽输出的模式。 优点:能输出高低电平、且高低电平都有驱动能力 缺点:不能实现线与的功能&#xff…

终于搞清楚开漏输出和推挽输出这个鬼东西

先说下推挽输出,简单的说,就是想输出高电平,就输出高电平,想输出低电平就输出低电平。 推挽电路上面是NPN三极管,下面是PNP三极管,请注意输入端和输出端的波形。 下面是输入波形 当输入为正时,上…

推挽输出和开漏输出有什么不同?

推挽输出和开漏输出有什么不同? 推挽输出(Push-Pull Output)开漏输出(Open Drain Output)两者比较 首先介绍一下什么是推挽输出和开漏输出。 推挽输出(Push-Pull Output) 推挽输出结构是由两个…

区分推挽输出和开漏输出

推挽输出:可以输出高,低电平,连接数字器件。 输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。 输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。 开漏输出:输出端相当于三…

GPIO之推挽输出和开漏输出

疑问 GPIO配置为输出时会有两种模式,一种叫推挽输出,一种叫开漏模式。那什么是推挽输出,什么又是开漏输出呢? 三种输出状态 如下图所示为将GPIO配置为输出时的内部示意图: 由上图可以看出,GPIO的输出状…

推挽输出和开漏输出区别

目录 1.推挽输出 2.开漏输出 1.推挽输出 当想输出高电平时,P-MOS导通,N-MOS截止,输出为电源电压VDD 当想输出低电平时,N-MOS导通,P-MOS截止,相当于引脚直接接地,输出低电平 2.开漏输出 开…

从硬件方面理解GPIO的开漏输出和推挽输出

最近在学STM32,看正点原子视频中对开漏输出和推挽输出的讲解视频时,发现原子哥对电路的讲解有一些错误,主要说关于MOS管的开关问题,查了一晚上资料,终于想明白了,特意发个文章分享一下。 这是STM32F4XX中文…

推挽输出与开漏输出

推挽输出 要理解推挽输出,首先要理解好三极管(晶体管)的原理。下面这种三极管有三个端口,分别是基极(Base)、集电极(Collector)和发射极(Emitter)。下图是NP…

开漏输出与推挽输出

一、开漏输出:集电极开路门(OC)与漏极开路门(OD)一般用于线与和电流驱动的场合,为开集(漏)输出结构。 1. 利用外部电路的驱动能力,减少IC内部的驱动。 2. 可以将多个开漏输出引脚连接在一起,通过一个上拉电阻上拉到VCC&#xff…

开漏输出和推挽输出总结(一看就懂)

推挽输出(Push-Pull Output) 推挽输出结构是由两个MOS或者三极管收到互补控制的信号控制,两个管子时钟一个在导通,一个在截止,如图1所示: 推挽输出的最大特点是可以真正能真正的输出高电平和低电平&…

开漏输出、推挽输出的区别

前言 background:测试相关设备引脚输出,使用示波器时发现部分引脚需外接上拉电阻至高电平才能在示波器观察到高阻态,为了深究其中原理,查阅了相关资料,发现知乎中有一篇对这两种输出描述得清晰易懂的文章,此…

开漏输出和推挽输出

开漏输出和推挽输出 概述模拟文件下载推挽输出线与开漏输出输出电压最后 概述 在STM32或者GD32中,普通的输出GPIO输出方式主要是开漏输出和推挽输出,下面我们开始讲解这2种模式的区别。需要样片的可以加群申请:615061293。 下图是GPIO内部的…

如何正确理解开漏输出和推挽输出

作者:知乎用户 链接:https://www.zhihu.com/question/28512432/answer/41217074 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 我觉得下面这个「网上资料」还是很不错的。 单片机I/O口推挽输出…

推挽输出和开漏输出的区别

一、推挽输出 推挽输出结构是由两个MOS或者三极管收到互补控制的信号控制,两个管子时钟一个在导通,一个在截止,如下图所示 当VIN为高电平、上面的MOS导通,下面的MOS截止,Vout被上拉到VDD 当VIN为低电平、上面的MOS截止…