【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing
tips:本文为个人阅读论文的笔记,仅作为学习记录所用。
Title:Self-supervised Scalable Deep Compressed Sensing
Journal:IJCV 2024
代码链接:GitHub - Guaishou74851/SCNet: Self-Supervised Scalable Deep Compressed Sensing (IJCV 2024) [PyTorch]Self-Supervised Scalable Deep Compressed Sensing (IJCV 2024) [PyTorch] - Guaishou74851/SCNethttps://github.com/Guaishou74851/SCNet
论文地址: Self-supervised Scalable Deep Compressed Sensing | International Journal of Computer VisionCompressed sensing (CS) is a promising tool for reducing sampling costs. Current deep neural network (NN)-based CS approaches face the challenges of collechttps://link.springer.com/article/10.1007/s11263-024-02209-1
问题动机:
压缩感知(CS)是一种很有前途的降低采样成本的工具。当前基于深度神经网络(NN)的CS方法面临着收集标记测量 Ground Truth 数据并将其推广到实际应用中的挑战,特别是CS在医学成像领域的应用,如MRI成像等,这些领域的 Ground Truth 数据的获取更为困难。
解决方法:
提出了一种新的自监督可扩展深度CS方法,该方法包括一个名为SCL的深度学习方案和一个名为SCNet的网络家族,该方法不需要 Ground Truth 数据,并且一旦在部分测量集上训练就可以处理任意采样比率和矩阵。SCL包含双域损失和四阶段恢复策略。前者鼓励两个测量部分的交叉一致性和对任意比率和矩阵的采样-重构周期一致性,以最大限度地利用数据。后者可以逐步利用外部测量中的公共信号和测试样本的内部特性以及学习的神经网络来提高精度。SCNet结合了优化算法的显式指导和高级神经网络块的隐式正则化来学习协作信号表示。
相关工作:
现有的自监督学习压缩感知存在的不足,
1、表现不佳
现有的自监督CS对不同CS任务之间的数据和共享知识的利用不足,导致正则化弱,并且对不完整的测量结果进行过拟合的风险很高。其次,大多数方法只关注神经网络架构和学习方案设计的一部分(例如损失函数),由于其过时的组件和训练技术,导致不平衡的发展和欠拟合。
2、缺乏灵活性和可扩展性
现有的自监督CS将替换不同采样矩阵或采样率等视为独立问题,虽可以进行更换,但往往需要进行重新训练模型,费时费力,导致灵活性、可扩展性较差。
主要贡献:
1、基于双域损失函数和四阶段深度递进重建策略,提出了一种新的自监督可扩展CS学习方案SCL
2、一种被称为 SCNet 的新 NN 家族,它结合了传统近端梯度下降 (PGD) 算法 的显式指导和来自高级 NN 组件的隐式正则化。
3、在一维、二维和三维信号的模拟和真实数据上进行的大量实验表明,我们的方法在提高恢复质量和泛化能力方面具有显著的优势和有效性
整体架构:
自监督可扩展重构学习(SCL)
双域损失函数(Dual-Domain Loss Function)
DMC(Division-based Measurement-domain Consistency loss)
面对传统CS方法的损失函数存在的问题:(1)噪声的存在;(2)解决方法模糊,输出不稳定
为了缓解这些问题,并使NN适应采样矩阵和采样率的变化,设计了DMC loss,其使用y中的测量元素的组合来构建数千个互补的矩阵和比例对的新任务,以增强数据多样性。其中隐含的假设是训练集是足够大的,可以划分出足够的任务组合。
其中存在两个约束:
如此设计的神经网络损失函数是免于噪声影响的,这是在N2N和S2S(2020,CVPR)的先验基础上的发展。
DMC的定义如下,本文的p范数设置为1范数:
DOC(matrixnetwork Disentanglement-based Original-domain Consistency loss)
为了让训练后的NN可以突破内部数据的限制,达到真正的泛化,如采样率(0 - 1),推广到整个矩阵空间。对原始图像进行几何变换,并添加随机生成的噪声、矩阵、采样率。
DOC约束:
DOC定义:
四阶段渐进恢复策略(Four-Stage Progressive Reconstruction Strategy)
核心:从粗到细(coarse-to-fine)
stage-1 —— 使用外部数据集离线学习,获得一个通用的模型。
stage-2 —— 使用测试数据集学习,获得一个使用于当前数据集的模型。
stage-3 —— 使用单个图片进行学习,模型精确到单张图片。
stage-4 —— 对单张图片进行self-ensemble,使用蒙特卡洛来近似估计。
在实践中,可以根据具体需求灵活地实现对策略的几种定制,例如对于最佳恢复质量,表示为(1→2→3→4)的完全激活策略,对于训练资源受限的设备,表示为(1→4),对于无数据集的部署,表示为(3→4)。在每个配置的第一阶段随机初始化NN参数,并在逐步学习完成后保存到下一阶段。
SCNet(基于协同表示的图像重建网络,Collaborative Representation-Based Reconstruction Network)
基于协同表示的图像重建网络——SCNet,结合了迭代优化算法(PGD)的显式结构设计启发与神经网络模块的隐式正则化约束
PGD展开 --> 提高可解释性
隐式正则化 --> 防止模型过拟合
浅层特征初始化(Shallow Feature Initialization)
使用A的伪逆将测量值y变换到图像域,并域采样率比例图R连接,然后使用卷积层提取浅层特征。
图像嵌入和位置嵌入(IE & PE)
图像嵌入将图像转成向量,方便后续处理,并将每个特定的测量 y 与整个测试集区分开来;
位置嵌入为数据提供位置编码,使其能够感知位置和空间变化。
可学习的嵌入操作,增加优化自由度,防止欠拟合。
IE 和 PE 操作都只在 stage 2-4 中进行,在数据量较少时加入,防止欠拟合。
深度特征细化(Deep Feature Refinement)
将PGD算法展开,从传统的图像级优化扩展到特征级优化,
PGD模块后,使用RB/SCB模块,隐式正则化,防止过拟合。
在转化过程中,PGD算法中的Proximal Mapping部分可以用RB/SCB进行替换,是因为PM和RB/SCB存在一定的数学等价性。
在某些情况下,Proximal Mapping的求解可以转化为一个优化问题,该问题具有与残差块相似的结构。具体来说,Proximal Mapping的目标是找到一个点,使得该点既满足凸函数的约束,又与给定点距离最小。这可以看作是一个最小化问题,其中包含了原始输入和一个与凸函数相关的项。而残差块在某种程度上也执行了一个类似的最小化任务,它试图保持输入信息的同时,最小化网络输出的误差。因此,在某些数学形式上,这两者可能具有等价性。
Proximal Mapping和残差块在功能上都具有“保持输入信息并尝试最小化误差”的特点。Proximal Mapping通过找到与给定点距离最小的凸函数定义域内的点来实现这一点,而残差块则通过跳跃连接来保持输入信息,并通过卷积层来最小化输出误差。这种功能上的相似性使得残差块有可能成为Proximal Mapping的一个有效替代。
最终图像重建(Final Image Reconstruction)
将深化后的特征层通过卷积生成精化图像,最后通过额外的GD(梯度下降)操作获得最终恢复结果,最后一个GD操作目的是去除噪声(2017,TIP)
本文的NN family
实验部分
一维合成稀疏信号和二维MNIST数字图像的CS重构
二维自然图像上的CS重构——PSNR对比
二维自然图像上的CS重构——PSNR和参数数对比、从DIV2K重建效果对比
二维自然图像上的CS重构——可扩展性实验
本文小结
本文提出了一种新的自监督可扩展的神经网络方法,由一个名为SCL的学习方案和一个名为SCNet的深度神经网络家族组成。
SCL通过增强和鼓励随机交叉一致性和任意采样重建周期一致性,采用双域损失来学习可推广的图像、比率和矩阵自适应映射,而不是来自固定部分测量的特定映射。四阶段策略进一步提高了准确性。
SCNet是基于PGD灵感设计的,并通过神经网络机制进行了良好的正则化。SCL和SCNet的结合和相互促进有效地利用了可用的数据和信息,推动深度重建朝着有效的方向发展,甚至可以超越监督神经网络的预测结果。实验证明了该方法在成像质量、灵活性、可扩展性、复杂性和可解释性之间取得了更好的平衡。
读者小结
这篇文章是北大VILLA实验室联合清华团队、哈工大团队最新提出的基于深度网络的CS方法。这篇文章的工作非常饱满,篇幅有30多页,其中实验部分做的扎实,我在上面放的实验部分只是作者在正文部分的内容,在附录中还有很多的实验细节内容,比如具体的消融实验、更多尺度的对比实验等。
这篇文章阅读后给我的启发最大的还是SCL学习策略部分,使用的双域函数以及四阶段渐进重建策略可以将CS扩展到整个矩阵空间,以及从粗到细的重建策略。这样的策略无疑是能达到更好的效果,但问题也是很明显的,就是时间、能耗问题,这方面作者在最后的讨论部分也提出了。对于这个问题,作者提供了神经网络家族(NN family)的方法,可以让用户来根据现实情况来自行选择。
相关文章:

【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing
tips:本文为个人阅读论文的笔记,仅作为学习记录所用。 Title:Self-supervised Scalable Deep Compressed Sensing Journal:IJCV 2024 代码链接:GitHub - Guaishou74851/SCNet: Self-Supervised Scalable Deep Comp…...

Swift 宏(Macro)入门趣谈(一)
概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏(Swift Macro)。为此,苹果特地用 2 段视频(入门和进阶)颇为隆重的介绍了它。 那么到底 Swift 宏是什么?有什么用&…...
linux常见资源查询命令(持续更新)
年纪大了,很多命令记不住了,但偶尔也需要用到,通过搜索也需要点时间,特此记录。 不同操作系统命令会有所区别,下面是大部分时候工作的机器系统: CentOS release 7.5 (Final)Kernel \r on an \m 1、实时查…...

JavaWeb:文件上传1
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
C++ 中的异常处理机制是怎样的?
异常处理的基本概念: 异常: 程序在运行时发生的错误或意外情况。 抛出异常: 使用 throw 关键字将异常传递给调用堆栈。 捕获异常: 使用 try-catch 块捕获和处理异常。 异常类型: 表示异常类别的标识符。 异常处理流程: 抛出异常: 当检测到错误或意…...

SwiftUI-基础入门
开发OS X 图形应用界面时有三种实现方式:XIB、Storyboard、SwiftUI。Storyboard基于XIB做了优化,但XIB基本被放弃了,而SwiftUI是苹果公司后来开发的一套编程语言,用来平替Objective-C。虽然现在Swift 6 还是有些不完善的地方&…...

C++builder中的人工智能(20):如何在C++中开发一个简单的Hopfield网络
在AI技术的发展历史中,模式识别模型是最伟大的AI技术之一,尤其是从像素图像中读取文本。其中一个是Hopfield网络(或称为Ising模型的神经网络或Ising–Lenz–Little模型),这是一种递归神经网络形式,由John J…...

video2gif容器构建指南
一、介绍 1.项目概述 Video2Gif 项目旨在提供一种便捷的方式,让用户能够将视频中的精彩片段快速转换为 GIF 动画。GIF 动画因其循环播放、文件体积小等特点,在社交媒体、聊天工具中广泛应用,用于表达情感、分享趣事等。 2.核心功能 视频导…...
探秘Spring Boot中的@Conditional注解
文章目录 1. 什么是Conditional注解?2. 为什么需要Conditional注解?3. 如何使用Conditional注解?4. Conditional注解的高级用法5. 注意事项6. 结语推荐阅读文章 在Spring Boot的世界里,配置的灵活性和多样性是至关重要的。有时候&…...
树形dp总结
这类题型在 dp 中很常见,于是做一个总结吧!!! 最经典的题:没有上司的舞会 传送门:没有上司的舞会 - 洛谷 状态表示: dp[i][0] 为 以 i 为根的子树中,选择 i 节点的最大欢乐值 d…...

【算法一周目】双指针(2)
目录 有效三角形的个数 解题思路 C代码实现 和为s的两个数字 解题思路 C代码实现 三数之和 解题思路 C代码实现 四数之和 解题思路 C代码实现 有效三角形的个数 题目链接:611. 有效三角形的个数题目描述:给定一个包含非负整数的数组nums&…...
vue内置方法总结
目录 1. 生命周期钩子方法 2. 响应式系统方法 3. DOM 更新方法 4. 事件处理方法 5. 访问子组件和 DOM 元素 6. 数据观察方法 7. 其他方法 1. 生命周期钩子方法 这些方法在 Vue 实例的不同生命周期阶段自动调用。 beforeCreate: 在实例初始化之后,…...
面向对象分析与设计
前言: 感觉书本上和线上课程, 讲的太抽象, 不好理解, 但软件开发不就是为了开发应用程序吗?! 干嘛搞这么抽象,对吧, 下面是个人对于软件开发的看法, 结合我的一些看法, 主打简单易懂, 当然,我一IT界小菜鸟, 对软件开发的认识也很浅显, 这个思维导图也仅仅是现阶段我的看…...
lineageos-19 仓库群遍历,打印第一条git log
lineageos-19 仓库群遍历,打印第一条git log RepoLsRootD/app4/lineage19_oneplus6 LogF/app4/wiki/repo_head_log_ls-lineageos19.1.log rm -v $LogF && \ cd $RepoLsRootD && \ find . -type l -path "*/*.git" -not -path "./.repo/*"…...

详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送
在C#中,SendMessage方法是一个强大的工具,它允许我们与Windows API交互,模拟键盘和鼠标事件。本文将详细介绍如何使用SendMessage方法来发送鼠标和键盘消息。 1. SendMessage方法概述 SendMessage是Windows API中的一个函数,它用…...
VMware安装黑苹果后ICLOUD_UNSUPPORTED_DEVICE(不支持的Icloud设备)
修改文件 关闭虚拟机找到虚拟机文件中以.vmx结尾的文件编辑内容(补充缺失) board-id "Mac-551B86E5744E2388" hw.model.reflectHost "FALSE" hw.model "MacBookPro14,3" serialNumber.reflectHost "FALSE"…...

Python | Leetcode Python题解之第542题01矩阵
题目: 题解: class Solution:def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:m, n len(matrix), len(matrix[0])# 初始化动态规划的数组,所有的距离值都设置为一个很大的数dist [[10**9] * n for _ in range(m)]…...

【计算机网络】【传输层】【习题】
计算机网络-传输层-习题 文章目录 10. 图 5-29 给出了 TCP 连接建立的三次握手与连接释放的四次握手过程。根据 TCP 协议的工作原理,请填写图 5-29 中 ①~⑧ 位置的序号值。答案技巧 注:本文基于《计算机网络》(第5版)吴功宜、吴英…...
【LeetCode】【算法】55. 跳跃游戏
LeetCode 99 - 55. 跳跃游戏 题目 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回 …...

华为:hcia综合实验
一、拓扑图 二、实验要求 1. pc地址请自行规划,vlan已给出 2. 服务器地址自行规划,vlan,网段已给出 3. 交换机互联链路捆绑保证冗余性 4. 内网pc网关集中于核心交换机,交换机vlan 40互联路由器 ,地址网段已给出 5.配置静态路由实…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...