【method】ADMM-CSNet | 一种图像压缩感知重建的深度学习方法(1)- 方法解析

news2025/2/22 18:23:21

#! https://zhuanlan.zhihu.com/p/644157062

【method】ADMM-CSNet | 一种图像压缩感知重建的深度学习方法(1)- 方法解析

文章目录

  • 【method】ADMM-CSNet | 一种图像压缩感知重建的深度学习方法(1)- 方法解析
    • 摘要
    • 广义压缩感知模型
      • 1.Model
      • 2. ADMM Solver
      • 3.重建的高效计算
    • 用于CS成像的ADMM-CSNET
      • 1.Basic-ADMM-CSNet
      • 2. Generic-ADMM-CSNet
      • 3. Network Structure Analysis
    • 网络训练
    • 参考资料

🎯 Paper: https://ieeexplore.ieee.org/document/8550778

🚀 matlab: https://github.com/yangyan92/Deep-ADMM-Net

🚀pytorch: https://github1s.com/lixing0810/Pytorch_ADMM-CSNet/blob/HEAD/network/CSNet_Layers.py

摘要

本文将传统的基于模型的CS方法和数据驱动的深度学习方法相结合,地考虑了一个图像重建的广义CS模型,使用ADMM算法求解该模型,并进一步将ADMM算法扩展为unrolling深度网络,使得ADMM的所有参数通过端到端判别学习实现。

该方法在复数MR成像和实自然图像上实现了较好的重建精度。

广义压缩感知模型

本节展示了generalized CS model并提出了两种ADMM迭代求解方法。

1.Model

约束的标准CS模型定义为:

  • 稀疏系数 s s s目标使用正交稀疏基 Ψ \Psi Ψ重构原始信号 x x x,即 x = Ψ s x = \Psi s x=Ψs
  • y y y x x x的观测, Φ \Phi Φ为随机欠采样矩阵;

Ψ l + \Psi_l^+ Ψl+ Ψ + 的第 \Psi^+的第 Ψ+的第 l l l行。

由于 x x x任意分辨率,进一步将图像表示 Ψ + x \Psi^+ x Ψ+x推广到使用固定局部滤波器的图像卷积,并将 l 1 l_1 l1正则推广到更通用的正则化 g ( ⋅ ) g(\cdot) g()。这便可以放松对 Ψ \Psi Ψ正交性和可逆性的要求,定义广义CS模型

D l D_l Dl为第 l l l个卷积运算的变换矩阵, l l l为滤波器的数量。

说明:特殊情况下,举个例子 D l D_l Dl可以是离散余弦变换, g ( ⋅ ) g(\cdot) g()可以为 l q , q ∈ [ 0 , 1 ] l_q,q\in[0,1] lq,q[0,1]稀疏正则。在本文中把他们设置为可学习的。

2. ADMM Solver

下面根据引入辅助变量方式的不同,提出了两种ADMM求解器:

a. Solver 1:引入变换域独立辅助变量 z = z 1 , . . . , z L z = {z_1,...,z_L} z=z1,...,zL,则公示(8)等价于

其增广拉格朗日函数形式为

image-20230716020743876

< α l , D l x − z l > = α l ( D l x − z l ) <\alpha_l,D_lx-z_l> = \alpha_l(D_lx-z_l) <αl,Dlxzl>=αl(Dlxzl) λ , ρ \lambda,\rho λ,ρ为人为设定的惩罚因子。

接着令 β l = α l ρ l \beta_l = \frac{\alpha_l}{\rho_l} βl=ρlαl,则ADMM可以用简化版缩放形式替代,通过交替优化下面的子问题求解:

η l \eta_l ηl为拉格朗日乘数的更新率

上述ADMM缩放形式推导:(具体推导参考自【1】【凸优化笔记7】-交替方向乘子法(ADMM) - 知乎 (zhihu.com))

ADMM solver[11]可以通过下面的迭代式进行求解:

n n n代表有多少次迭代, H H H为共轭转置, S ( ⋅ ) S(\cdot) S()表示具有参数 λ l / ρ l \lambda_l/\rho_l λl/ρl的关于 g ( ⋅ ) g(\cdot) g()的非线性近端映射(参考【2】近端映射与软阈值)算子,通常是软阈值或者硬阈值函数,分别对应 l 1 l_1 l1或者 l 0 l_0 l0稀疏正则化,具体可以看参考【2】。

上述求解式的推导如下:(参考【1】)

b. Solver 2:在图像域中引入辅助变量 z z z,则公示(8)等价于:

增广拉格朗日函数为:

β l = α l ρ l \beta_l = \frac{\alpha_l}{\rho_l} βl=ρlαl,则ADMM缩放形式为:

[15] 可以通过下面的迭代式进行求解:

一种求解[15]中第二项的方法是直接进行梯度下降,如[17],其中 H ( ⋅ ) H(\cdot) H()表示正则项 g ( ⋅ ) g(\cdot) g()的导数。

3.重建的高效计算

用于CS成像的ADMM-CSNET

1.Basic-ADMM-CSNet

基于ADMM solver I (公式[12]),如图[1]:

2. Generic-ADMM-CSNet

对solver2使用神经网络进行拓展,提出Generic-ADMM-CSNet。

下图为提出的网络结构:

图1 网络结构

图二 data flow:实心箭头表示正向过程中的数据流,虚线箭头表示反向传播中的反向流。

图二 data flow:实心箭头表示正向过程中的数据流,虚线箭头表示反向传播中的反向流。

整个迭代流程为: (除了整个结构的迭代循环,z zz 的内部(红色框部分)又有多次的迭代循环)

**a. Reconstruction Layer X ( n ) X^{(n)} X(n):**并没有约束不同阶段的网络结构要相同;每个阶段的输出为

在第一阶段,定义

**b.Multiplier Update Layer M ( n ) M^{(n)} M(n):**模块的输出为

c.Auxiliary Variable Update Block

auxiliary variable update block to implement Z ( n ) \mathbf{Z}^{(n)} Z(n) in eqn. [16],参考公式[17]对 Z ( n ) \mathbf{Z}^{(n)} Z(n)进行求解。

每个auxiliary variable update block包括:两个卷积层 ( C 1 ( n , k ) , C 2 ( n , k ) ) (\mathbf{C}_1^{(n,k)},\mathbf{C}_2^{(n,k)}) (C1(n,k),C2(n,k)),一个非线性激活层 H \mathbf{H} H,和一个addition layer A \mathbf A A。其中n表示第n和block,k表示迭代次数

  • 卷积层 ( C 1 ( n , k ) , C 2 ( n , k ) ) (\mathbf{C}_1^{(n,k)},\mathbf{C}_2^{(n,k)}) (C1(n,k),C2(n,k)),分别代表 D l , D l T D_l,D_l^T Dl,DlT

  • 非线性激活层 H ( n , k ) \mathbf{H}^{(n,k)} H(n,k):我们不将其定义为公式8中的正则 g ( ) g() g()的导数,而是使用分段线性函数去学习一个广义的函数,如下,公式3举了例子:

    注意:当 c 1 ( n , k ) c_1^{(n,k)} c1(n,k)为复数,我们需要对实部和虚部分开求解,并且实部和虚部共享分段线性函数,如下:

  • Addition Layer A ( n , k ) \mathbf A^{(n,k)} A(n,k):简单的加权算子,定义初始化为 A ( n , 0 ) : z ( n , 0 ) = x ( n ) + β ( n − 1 ) \mathbf A^{(n,0)}: z^{(n,0)} = x^{(n)}+\beta^{(n-1)} A(n,0):z(n,0)=x(n)+β(n1)。该模块的输出为:

因此,the output of the auxiliary variable update block in n n n-th stage is z ( n ) = z ( n , N − t ) z^{(n)} = z^{(n,N-t)} z(n)=z(n,Nt)

模型的可学习参数分析:

3. Network Structure Analysis

两种ADMM-CSNet的主要不同之处在于reconstruction layer和network layers Z ( n ) \mathbf Z^{(n)} Z(n)的实现。

reconstruction layer:

  • Basic-ADMM-CSNet 使用CS MRI,如命题1、2讨论
  • Generic-ADMM-CSNet 使用CS观测矩阵进行快速矩阵求逆

network layers implementing Z ( n ) \mathbf Z^{(n)} Z(n)

  • Basic-ADMM-CSNet 使用公式12的 Z ( n ) \mathbf Z^{(n)} Z(n)闭式解
  • Generic-ADMM-CSNet 使用unfolded梯度下降迭代 Z ( n ) \mathbf Z^{(n)} Z(n),这进一步引入了用于增强网络容量的可学习参数。实现非闭式解。第6.1节所示,通用ADMMCSNet显著改善了CS-MRI的结果。

网络训练

  • paired数据:全采样x和欠采样观测y

  • 损失函数:averaged normalized root mean square error (NRMSE)

  • 可学习参数:

  • 初始化:by model-based initialization method or random initialization method

    • Model-Based Initialization:use a specific model to initialize
    • random initialization such as Gaussian distribution initialization

参考资料

【1】【凸优化笔记7】-交替方向乘子法(ADMM) - 知乎 (zhihu.com)

【2】【凸优化笔记4】-4.3 软阈值算子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用宏定义完成整数的二进制位的奇偶位互换

代码如下&#xff1a; #include <stdio.h> #define SWAP(num) (((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << 1))int main() {int num 1010;printf("%d\n", num);printf("%d\n", SWAP(num));return 0; }思路如下&…

麒麟v10部署Nginx

1.解压&#xff1a;tar -xvf nginx-1.18.0.tar.gz 2.进入目录&#xff1a;cd nginx并执行脚本./configure 3.执行make 4.执行make install 5.安装目录在&#xff1a;/usr/local/nginx&#xff0c;然后再进入/usr/local/nginx/sbin启动nginx服务&#xff0c;执行./nginx&a…

3Ds max材质制作教程:创建金、银、铜金属材质

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 如果您不想完成本教程中的所有步骤&#xff0c;可以通过本教程底部的链接下载 3D Studio Max 的 matlib &#xff08;.mat&#xff09; 文件。 注意&#xff1a;单击每个步骤中的缩略图可查看更大的屏幕截…

Traefik v3.0 Docker 全面使用指南:基础篇

本篇文章聊聊如何通过 Docker 容器使用 Traefik&#xff0c;进行稳定的 Traefik 服务的部署。 写在前面 距离 Traefik v2.0.0 的发布&#xff0c;不知不觉快四年了&#xff0c;在过去的四年里&#xff0c;我写过非常多和 Traefik 相关的实践内容&#xff0c;感兴趣的同学可以…

udx大带宽大延迟网络与xquic bbr, tcp bbr实测比较

quic在其白皮书中声称可以在大延迟大带宽网络中表现良好&#xff0c;为此我对比过目前xq,lsq,pq几种实现&#xff0c;因为这些都是开源项目通过不断的折腾&#xff0c;向这方面研究的同学索取不同版本的实现进行实际测试。 经过&#xff0c;对不同国家的主机&#xff0c;到国内…

问题解决:启动Gazebo出现Error in REST request报错的问题

环境&#xff1a; Ubuntu18.04 ROS melodic Anaconda3 在安装完ROS之后&#xff0c;第一次打开gazebo&#xff0c;就遇到了这一红色的报错&#xff1a; 在网上找到了解决方法&#xff1a;修改.ignition/fuel/config.yaml 文件 首先&#xff0c;新建终端&#xff0c;打开上…

功能丰富的 Markdown 笔记工具:FSNotes Mac中文版图文安装教程

FSNotes Mac版是Mac平台上一款纯文本笔记本管理器&#xff0c;FSNotes for mac中文版支持Markdown、RTF等格式&#xff0c;轻松查看和编辑数据&#xff0c;还可以将数据存储在文件系统中&#xff0c;同时具备iCloud同步功能&#xff0c;使用非常便捷。 FSNotes for mac官方介绍…

使用semanage管理SELinux安全策略

semanage命令用于管理SELinux的策略&#xff0c;格式为“semanage [选项] [文件]”。 SELinux服务极大地提升了Linux系统的安全性&#xff0c;将用户权限牢牢地锁在笼子里。semanage命令可以设置文件、目录的策略&#xff0c;还可以管理网络端口、消息接口。 常用参数&#xf…

IDEA导入项目后文件出现红色小时钟的标志解决办法

报错问题&#xff1a;IDEA导入项目后文件出现时钟的标志 如下图所示&#xff1a; 问题原因&#xff1a;没有将项目添加为Maven项目 解决办法&#xff1a;找到项目的xml文件&#xff0c;鼠标右键 Add as Maven project 即可&#xff0c;将文件添加到Maven项目

通过 MasterGo 权限设置实现精细化管理,让你的工作更清晰

在日常办公中&#xff0c;当设计资产汇总到一个平台时&#xff0c;由于项目复杂、协作人员众多&#xff0c;会衍生出多种权限设置需求。比如说&#xff1a;谁可以编辑哪些文件&#xff1f;谁只能查看哪些文件&#xff1f;同团队不同成员的权限有哪些&#xff1f;而MasterGo作为…

PHP 判断数组是否是多维

文章目录 什么是数组&#xff1f;使用array()函数使用方括号[] 什么是多维数组&#xff1f;如何判断数组是不是多维数组&#xff1f;使用递归方式判断使用PHP内置函数count()函数判断 总结 在PHP中&#xff0c;我们经常需要对数组进行操作&#xff0c;包括判断数组是不是多维数…

辅助驾驶功能开发-功能规范篇(22)-7-L2级辅助驾驶方案功能规范

1.3.7 AEB 系统功能定义 1.3.7.1 车辆&#xff08;纵向&#xff09;AEB 系统 1.3.7.1.1 状态机 1&#xff09;前碰撞预警系统状态机 2&#xff09;AEB 功能状态机&#xff08;Prefill、ABA、制动辅助为并行关系&#xff09; 1.3.7.1.2 信号需求列表 1.3.7.1.3 系统开启关闭…

ceph集群的维护

ceph集群的维护 1、ceph集群常用命令 1.1查看集群的状态 rootceph-mon1:~#ceph -s#或者 rootceph-mon1:~#ceph health detail #显示集群状态的详细信息1.2查看所有存储池的列表 rootceph-mon1:~# ceph osd pool ls1.3查看所有存储池的编号 rootceph-mon1:~# ceph osd ls…

Echart社区

https://www.makeapie.cn/echartsmakeapie echarts图表可视化案例, 分享你的可视化作品https://www.makeapie.cn/echarts

【go】xorm分类统计及多表联查

文章目录 1 分类统计2 多表联查 1 分类统计 1 sql SELECT grade_protection_level AS type, count(grade_protection_level) AS count FROM vital_7jvebmrryff3_asset WHERE (field_group 应用信息)AND (asset_life_cycle 正式)AND (status 1) GROUP BY grade_protection…

棕榈酰三肽-1-------有效逆转衰老,减少面部皱纹

简介 皮肤真皮中胶原蛋白减少被认为是人体衰老形成皱纹的主要原因&#xff0c;因此&#xff0c;如果能够促进皮肤合成更多的胶原蛋白&#xff0c;那么将会有效逆转衰老从而减少皱纹。 The reduction of collagen in the dermis of the skin is believed to be the main cause…

【C++】-list的模拟实现

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

linux文件锁(保证只能同时启动一个实例,不同时启动多个实例)

文章目录 C如果程序异常退出&#xff0c;会自动释放锁码&#xff1f; shell脚本python脚本 C 可以使用Linux中的进程锁来实现只能启动一个实例的功能。一种常见的方法是使用文件锁&#xff08;File Locking&#xff09;。 可以在程序启动时创建一个特定的文件&#xff0c;并尝…

Unknown column ‘str_time‘ in ‘field list‘

报这个错说明这个strTime在对象里有&#xff0c;在数据表里没有&#xff0c;数据库表里加上这个属性字段就行了。 或者可以加个注解忽略此映射字段&#xff1a; TableField(existfalse) 问题解决&#xff01;&#xff01;&#xff01;