无监督去噪的一个变迁(1)——N2N→N2V→HQ-SSL

目录

      • 1. 前沿
      • 2. N2N
      • 3. N2V——盲点网络(BSNs,Blind Spot Networks)开创者
        • 3.1. N2V实际是如何训练的?
      • 4. HQ-SSL——认为N2V效率不够高
        • 4.1. HQ-SSL的理论架构
          • 4.1.1. 对卷积的改进
          • 4.1.2. 对下采样的改进
          • 4.1.3. 比N2V好在哪?
        • 4.2. HQ-SSL的实际实现
        • 补:HQ-SSL的训练和测试须知

知乎同名账号同步发表

1. 前沿

N2N,即Noise2Noise: Learning Image Restoration without Clean Data,2018 ICML的文章。
N2V,即Noise2Void - Learning Denoising from Single Noisy Images,2019 CVPR的文章。

这两个工作都是无监督去噪的重要开山之作,本文先对其进行简单总结,然后引出一个变体:HQ-SSL(2019 NIPS)。

本系列会对近一两年的顶会顶刊无监督图像恢复(主要是去噪)工作、时间有点久远但是非常经典的无监督图像恢复工作进行学习总结。欢迎大家评论交流、关注、批评。

2. N2N

相信大家对这句话不算陌生:同一场景下的两次含噪声的观测(noisy observation)。

在这里插入图片描述
上图就是该方法的训练策略, x i x_i xi y i y_i yi分别表示同一个场景下的两次相互独立的含噪声的观测。 f θ ( ⋅ ) f_\theta(·) fθ()表示网络。

为什么这样训练就能让 f θ ( ⋅ ) f_\theta(·) fθ()学会去噪呢?这是因为有如下假设:

  • 第一,噪声零均值假设;
  • 第二, x i x_i xi y i y_i yi是同一场景下的两次观测;
  • 第三,不同次的含噪声的观测之间,噪声相互独立。

为了简便起见,我们将一张noisy image表示为如下形式:
i m a g e = s i g n a l + n o i s e image=signal+noise image=signal+noise
即含噪声的图片是由信号和噪声想加而成(这样不严谨,因为噪声未必是加性噪声,但是此处为了方便,我们可以这样阐述)。我们可以将 x i x_i xi y i y_i yi分别用上述形式表示如下:
x i = s i + x n i , y i = s i + y n i x_i=s_i+xn_i,y_i=s_i+yn_i xi=si+xni,yi=si+yni
我们将 x i x_i xi y i y_i yi两张图片都表示为信号+噪声的形式,再用前文的损失函数,即网络尝试学会将 x i x_i xi映射为 y i y_i yi。由于噪声相互独立这一假设, x n i xn_i xni y n i yn_i yni毫无关联,但由于这是同一场景下的两次观测,所以两者中信号的部分都用 s i s_i si表示。

网络尝试学会将 x i x_i xi映射为 y i y_i yi,就是将 s i + x n i s_i+xn_i si+xni映射为 s i + y n i s_i+yn_i si+yni
f θ ( x i ) = f θ ( s i + x n i ) → s i + y n i f_\theta(x_i)=f_\theta(s_i+xn_i)→s_i+yn_i fθ(xi)=fθ(si+xni)si+yni
由于 x n i xn_i xni y n i yn_i yni毫无关联,将 x n i xn_i xni映射为 y n i yn_i yni是不可能的。此时用数学语言表述,网络的输出可以表示为如下形式:
f θ ( x i ) = f θ ( s i + x n i ) → s i + 随机噪声 f_\theta(x_i)=f_\theta(s_i+xn_i)→s_i+随机噪声 fθ(xi)=fθ(si+xni)si+随机噪声
网络并没有办法建立xn_i和yn_i的联系,这种 随机 → 随机 随机→随机 随机随机的映射,最终会演变为 随机 → E ( 随机 ) 随机→E(随机) 随机E(随机)的映射。由于噪声零均值这一假设,上式可以进一步写为:
f θ ( x i ) = f θ ( s i + x n i ) → E ( s i + 随机噪声 ) = s i + E ( 随机噪声 ) = s i f_\theta(x_i)=f_\theta(s_i+xn_i)→E(s_i+随机噪声)=s_i+E(随机噪声)=s_i fθ(xi)=fθ(si+xni)E(si+随机噪声)=si+E(随机噪声)=si

所以,只要满足噪声零均值假设、两次观测x和y在同一场景下、两次观测的噪声相互独立,那么就可以通过让网络学习从x映射到y的方式学会去噪。作者亦通过实验证明了有效性。

3. N2V——盲点网络(BSNs,Blind Spot Networks)开创者

N2V可以视为对N2N的批判,理由如下:

N2N的训练数据是相同场景的两次不同noisy observation组成的pair,实际使用的时候,两次不同的观测很难是相同场景的。比如医学图像,两次拍摄的时间不一样,也许器官在位置上发生了细微的变化,这就不能叫做严格的相同场景。

以上的问题,核心在于训练需要两张noisy image。那么能否只用一张noisy image就完成训练呢?当然可以,其实N2N之后涌现了Neighbor2Neighbor、N2V这样优秀的工作,这些都可以不必依赖于noisy image pair,而是依赖于single noisy image就能够完成训练。Neighbor2Neighbor是对一张noisy image进行采样得到pair,然后采用N2N的方式进行训练,并通过loss消除location gap;N2V则完全采用了和N2N不一样的思路,接下来我们主要介绍一下N2V,因为它是BSNs的开创者(to my best knowledge,所以此说法如有不对请评论区指出)。

在这里插入图片描述
这是N2V论文中的图,在有监督学习中,给网络输入Input,获得Prediction,通过让Prediction接近GT,就能够让网络学会去噪。如果是无监督,那么这个Label是不存在的。如上图左侧(a),由于Prediction最终要接近Input,所以网络会学习恒等映射。但是我们的目标就是中single noisy image完成训练,既没有GT,也没有相同场景下的另一个噪声观测,实验要怎么做呢?

我们可以选择如上图(b)的做法,对比图(a)的感受野,我们将(b)中的感受野的中心部分挖掉一个像素,然后将剩余的部分作为Input,我们记为 I n p u t b l i n d Input_{blind} Inputblind。由于网络看不到Input的中心像素点,我们称这个像素点为Blind Spot,也就是盲点。所有存在盲点的方法,我们都可以归类为Blind Spot Networks,也就是BSNs。我们将没有挖掉中心像素的Input记为 I n p u t t o t a l Input_{total} Inputtotal,网络的输出Prediction和 I n p u t t o t a l Input_{total} Inputtotal做loss,就可以促进网络学会去噪。

所以,N2V就讲完了(bushi…

简单说一下,我们只需要对Input做一件事——挖掉它的中心像素,然后扔给网络。网络的输出和Input之间的差距作为loss,就能让网络学会去噪。但是,这一切是有前提的,N2V有如下假设

(我们依旧将像素视为信号+噪声)

  • 不同像素位置,信号是相互有关联的;
  • 不同像素位置,噪声是相互没有关联的(在一些文章中称为噪声独立假设);
  • 噪声的均值为0。

网络可以看到除了中心像素以外的全部像素,包括它们的信号和噪声。网络实际学习的事情就是:如何根据周围的像素点,推测出中心像素点。由于不同像素位置的信号互有关联,比如你鼻孔边缘像素的附近可能是鼻屎,鼻子像素的附近可能有黑头,所以通过周围像素的信号,可能可以推测出中心像素的信号;但是依据噪声独立假设,无法通过周围像素的噪声推测出中心像素的噪声。所以将网络输出的中心像素 x p r e x_{pre} xpre和Input中被屏蔽的中心像素 x i n x_{in} xin做loss:
x p r e − x i n = s p r e + n p r e − ( s i n + n i n ) = s p r e − s i n + ( n p r e − n i n ) x_{pre}-x_{in}=s_{pre}+n_{pre}-(s_{in}+n_{in})=s_{pre}-s_{in}+(n_{pre}-n_{in}) xprexin=spre+npre(sin+nin)=spresin+(nprenin)
s和n分别表示信号和噪声。为了表述方便,上式直接用了减法。根据在N2N部分的讲解,相信你已经猜到了网络的输出会是如下形式:
x p r e = s p r e + n p r e → E ( s i n + 随机噪声 ) = s i n + E ( 随机噪声 ) x_{pre}=s_{pre}+n_{pre}→E(s_{in}+随机噪声)=s_{in}+E(随机噪声) xpre=spre+npreE(sin+随机噪声)=sin+E(随机噪声)
根据噪声零均值假设,我们有:
x p r e → s i n + E ( 随机噪声 ) = s i n x_{pre}→s_{in}+E(随机噪声)=s_{in} xpresin+E(随机噪声)=sin

3.1. N2V实际是如何训练的?

上文所述,我们将Input中心像素点挖掉,并让网络的输出和完整的Input做loss。可是这样会导致每次只有一个像素影响训练过程。此部分我们简单讲下N2V原文是如何训练模型的。

在这里插入图片描述

N2V实际的训练方式:随机选取 64 × 64 64 \times 64 64×64大小的patch,记为x。在x中随机选取N个点,对每个点p,都随机用一个点的像素替换它(具体地,在以p为中心、以网络感受野为大小的区域,如上图(b),用该区域内的一个随机像素(蓝色)替换中心像素(红色))。这样,x中就被创造了N个盲点,将这样的x记为 x b l i n d x_{blind} xblind。将 x b l i n d x_{blind} xblind输入到网络,获得输出记为y。我们将x中N个点和y中对应位置的N个点做loss。这样,输入一个 64 × 64 64 \times 64 64×64的patch做训练,一次就能够计算N个点对应的梯度。(注意采样N个点的过程中采用了stratified sampling以避免clustering,这个stratified sampling是分层采样,本文不进行讲解)

4. HQ-SSL——认为N2V效率不够高

本文是2019 NeurIPS的论文:High-Quality Self-Supervised Deep Image Denoising,作者认为N2V存在的问题是:N2V将输入的一部分pixel进行屏蔽,也只有这一部分pixel才能对loss进行贡献,作者认为这样会相对降低训练效率。本文本质上还是盲点网络派系BSNs的思想。

在4.1中,我们先阐述HQ-SSL的架构,以及作者认为他们比N2V更优的原因,并在4.2中阐述此架构的实际实现。在4.3中简单回顾本工作中盲点思想的体现。最后在4.4讲述一些公式,阐明本工作如何利用所设计的架构进行训练和去噪。

4.1. HQ-SSL的理论架构

主要是对卷积和下采样的改进,下面详细阐述。

4.1.1. 对卷积的改进

在这里插入图片描述

传统的卷积如上图所示,这里假设是 3 × 3 3 \times 3 3×3大小的卷积。注意输入和输出的对应关系:输出像素是输入对应感受野的中心位置。这就意味着网络推测一个像素,实际上用的是所有相邻位置+自身位置的像素。在N2V中,我们已经见识了盲点的思想,即像素的推测靠的是所有相邻位置的像素,但不包含自身位置的像素。如果将这种思想转换为卷积操作,姑且可以认为等价于下图的形式:

在这里插入图片描述

我用蓝色表示这个像素点是不可见的,也就是说卷积操作是无法看见中心像素点的。但是要求这样的计算能够推测中心位置的像素。这就是HQ-SSL的中心思想,不过这个工作并没有按照上图那样操作,它将卷积操作改造成了如下的方式:
在这里插入图片描述

HQ-SSL将卷积操作分为了四个方向,上图对应的是其中一种方向——输出像素取决于对应输入像素的上方相邻像素。如果算上所有四个方向,那么输出像素就取决于对应输入像素的上方、左方、下方、右方的若干相邻像素。

⚠️注意作者的思路是:N2V工作中的盲点本质上是让模型根据周围的像素点推测中心像素点,那么我们可以改造卷积操作,让每一次卷积运算都只能看见中心位置像素的若干相邻像素。

⭐️在实现上,作者采用的是 平移 + 补 0 + 裁剪 平移+补0+裁剪 平移+0+裁剪的操作,用下图简单阐述:
在这里插入图片描述
绿色表示补零操作,红色叉叉表示裁剪。可以看到,如上图操作之后,1和7的对应位置关系等价于上文所述HQ-SSL对卷积操作的改进方式:
在这里插入图片描述
注意:上述内容是根据作者提供的源代码获知,如果读者需要使用HQ-SSL,可以直接使用官方提供的代码。2023 CVPR有一篇工作引用了HQ-SSL,其官方代码和HQ-SSL的代码在卷积操作上是一致的。之所以写这段话,是因为HQ-SSL个人认为文章的关键段落较为晦涩,看不懂的读者朋友可以考虑直接看官方的代码,写的还是很易懂的。

⚠️注意:上述内容的补零和裁剪可以视为平移,上图仅平移了1个像素,是因为卷积核大小是 3 × 3 3 \times 3 3×3。如果是更大的卷积核,那么可以考虑不同的平移像素数量。

4.1.2. 对下采样的改进

如果采用传统的 2 × 2 2 \times 2 2×2下采样,那么在上采样后, 2 × 2 2 \times 2 2×2区域内的四个像素,分别将和对应输入的同位置区域的四个像素相关联。作者针对下采样才用了和对卷积一样的改进方案—— 平移 + 裁剪 平移+裁剪 平移+裁剪
在这里插入图片描述
绿色方框表示补0,红色叉叉表示裁剪。我们将1和4放到下图,并用不同的颜色,这样可以直观理解:
在这里插入图片描述
通过上图你可以认为下采样也有一个感受野,每个像素的感受野对应于该像素的位置以及该像素位置的上方位置。

和卷积一样,下采样也会对应四个方向。下采样的方向和卷积的方向是一致的。

注意上采样没有被改造。

4.1.3. 比N2V好在哪?

这里我就直接摘录原文的内容了:

N2V是将输入的一部分pixel进行屏蔽,只有这部分pixel才能对loss做贡献,或者只有这部分pixel才是loss的组成部分。作者认为这样会降低训练效率,所以采用HQ-SSL的设计思想,通过对卷积和下采样进行改造,可以等价出盲点网络BSN的效果。而且,由于仅仅改变了卷积和下采样,所有pixel都是loss的组成部分,或者说所有pixel都能对loss做贡献、对训练做贡献。

4.2. HQ-SSL的实际实现

在这里插入图片描述
先看上图的上半部分,拥有4个branch。C表示4.1中所讲述的改造后的卷积,1表示 1 × 1 1 \times 1 1×1的卷积。绿色的部分表示四个方向的感受野,对应四个方向的卷积和下采样。再看上图的下半部分,表示作者实际的实现方式,虽然只有一个branch,但是通过旋转操作(图中的R)等价出了四个方向的卷积和下采样。由于只有一个branch,显然网络的参数量被大幅减少。

补:HQ-SSL的训练和测试须知

⭐️如果没有此部分内容,我们会根据对N2V的印象认为HQ-SSL的训练方式是:将上图右端的预测结果和左边的输入做loss,并以此训练。在测试阶段则是直接将noisy image输入网络,就能够获得对应的去噪结果。

实际上不是,在论文的第三节(3 Self-supervised Bayesian denoising with blind-spot networks),作者对训练和测试过程进行了阐述。摘录网上博客对此部分的分析(我没有深究这地方):

网络输出噪声的一些分布参数,利用预测的参数可以进行去噪。

具体内容我不太感兴趣,所以不深究了。我阅读这篇论文主要目的是学习它的盲点思想。后续也有2023 CVPR的文章Spatially Adaptive Self-Supervised Learning for Real-World Image Denoising采用了HQ-SSL的盲点网络的设计(下一篇博客我将讲述它,届时我会将链接放在这里)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 基于Java的美食信息推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

ARM day2、day3 汇编

一、汇编学习:可以向上理解软件、向下感知硬件 二、符号(注释) 注释#注释(放在行首表示注释一行)/* */注释#数字立即数:一种标号(比如main: loop:).text .end换行…

spingboot 集成identityserver4身份验证

一、新建项目&#xff1a;com.saas.swaggerdemo 详情见&#xff1a;spring-boot2.7.8添加swagger-CSDN博客 在之前项目基础上添加如下依赖 <dependency><groupId>com.nimbusds</groupId><artifactId>nimbus-jose-jwt</artifactId><version&…

java版微信小程序商城 免 费 搭 建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

7.5 MySQL对数据的基本操作(❤❤❤)

7.5 MySQL对数据的基本操作 1. 提要2. 数据添加2.1 insert语法2.2 insert 子查询2.3 ignore关键字 3. 数据修改3.1 update语句3.2 update表连接 4. 数据删除4.1 delete语句4.2 delete表连接4.3 快速删除数据表全部数据 1. 提要 2. 数据添加 2.1 insert语法 2.2 insert 子查询 …

Java实现在线编辑预览office文档

文章目录 1 在线编辑1.1 PageOffice简介1.2 前端项目1.2.1 配置1.2.2 页面部分 1.3 后端项目1.3.1 pom.xml1.3.2 添加配置1.3.3 controller 2 在线预览2.1 引言2.2 市面上现有的文件预览服务2.2.1 微软2.2.2 Google Drive查看器2.2.3 阿里云 IMM2.2.4 XDOC 文档预览2.2.5 Offic…

8个Python必备的PyCharm插件

大家好&#xff0c;在PyCharm中浏览插件列表并尝试很多人推荐的插件后&#xff0c;总结了几个瑰宝插件&#xff0c;它们各自以独特的方式帮助开发者快速、简便、愉悦地开发&#xff0c;接下来将逐个介绍它们。 1. Key Promoter X 【下载链接】&#xff1a;https://plugins.je…

Enzo Life Sciences--DNA损伤酶联免疫检测试剂盒DNA damage ELISA kit

——用于肿瘤、细胞凋亡和氧化应激研究中DNA损伤的快速检测 细胞暴露于氧化和环境应激经常导致基因组DNA的分解或氧化&#xff0c;评价基因组DNA完整性或评估氧化DNA存在的测定法经常用作验证凋亡或DNA损伤开始的手段。8-羟基-2 -脱氧鸟苷(8-OHdG)是一种修饰的核苷碱基&#xf…

vba设置excel单元格背景色

vba设置excel单元格背景色位蓝色 Sheet1.Cells(hang, 2).Interior.Color RGB(0, 0, 255) 参考链接 【VBA】给单元格设置背景色_vba 将一行底色置绿色-CSDN博客https://blog.csdn.net/s_h_m114_2/article/details/105787093 参考2 知乎 VBA--单元格的背景色设置 特此…

potplayer在投屏中的使用

视频播放完成之后自动停止 配置/语言/其他->收尾处理->播放完当前后停止 任务栏控制播放 快捷键 Enter 屏幕->全屏 CtrlEnter 屏幕->全屏(拉伸) CtrlShiftEnter 屏幕->全屏(其他显示器) AltEnter 屏幕->全屏 CtrlAltEnter 屏幕->全屏(保持比例) Space…

flink1.15 维表join guava cache和mysql方面优化

优化前 mysql响应慢,导致算子中数据输出追不上输入,导致显示cpu busy:100% 优化后效果两个图对应两个时刻: - - -- 优化前 select l.id,JSON_EXTRACT(r.msg,$$.key1) as msgv (select id,uid from tb1 l where id?) join (select uid,msg from tb2) r on l.uidr.uid;-- 优化…

STC51+TLC2543+ADXL335+proteus

51单片机解析adxl335振动检测蜂鸣器报警课设 通过按键调整振动检测阈值 传感器介绍 TLC2543&#xff1a;12 位精密模数转换器&#xff0c;原理图与引脚功能描述如下所示&#xff1a; 引脚功能1~9、11、12模拟量输入通道10GND电源地13REF-为负基准电压端14REF为正基准电压端…

腾讯云服务器入门教程——从0到1新手必看

腾讯云服务器入门教程包括云服务器CPU内存带宽配置选择&#xff0c;选择云服务器CVM或轻量应用服务器&#xff0c;云服务器创建后重置密码、远程连接、搭建程序环境、部署Web网站应用等&#xff0c;腾讯云服务器网txyfwq.com分享从0到1腾讯云服务器入门教程&#xff1a; 腾讯云…

记录在PyCharm中编辑配置自己的项目环境或路径

我们在复现或则跑项目时往往会遇到“设置参数” # 设置参数 ap argparse.ArgumentParser() ap.add_argument("-i", "--image", requiredTrue, help"path to input image") ap.add_argument("-t", "--template", requiredT…

【已解决】c语言const/指针学习笔记

本博文源于笔者正在复习const在左与在右&#xff0c;指针优先级、a,&a,*a的区别。 1、const在左与在右 int const *p const int *p int * const p int const * const p const int * const p* 在const右边&#xff0c;指向的数据不可以改变&#xff0c;可以改变地址 * 在c…

史上最全的数据科学与艺术

1.背景介绍 数据分析是一种将数据转化为价值的艺术和科学。它涉及到大量的数学、统计、编程、数据库、机器学习等多个领域的知识。数据分析的目的是从数据中提取有用的信息&#xff0c;以便做出明智的决策。 数据分析的艺术体现在数据分析师需要具备丰富的经验和洞察力&#…

SAP 客制化增强查找

相信各位在做日常的实施和运维中&#xff0c;经常会遇到这样一种情况&#xff0c;系统出现了非常规问题&#xff0c; 每次哼哧哼哧看半天源码&#xff0c;各种打watch point, 最后发现是以前别人写的增强导致的&#xff0c; 真的非常浪费时间。 那么我就想&#xff0c;有没有…

苹果手机自动重启是什么原因?本文帮你解决问题!

苹果手机是许多用户信赖和喜爱的手机品牌之一&#xff0c;但有时候它可能也会出现一些问题&#xff0c;其中比较常见的就是手机自动重启。那么&#xff0c;苹果手机自动重启是什么原因呢&#xff1f;今天&#xff0c;小编将在本文为您分析可能的原因&#xff0c;并提供相对应的…

什么情况下物理服务器会运行出错?

​  物理服务器&#xff0c;也称为裸机服务器&#xff0c;一般可以提供高性能计算水平和巨大的存储容量。然而&#xff0c;它们也难免会遇到一些问题。运行出错时&#xff0c;可能会导致停机和数据丢失。在这篇文章中&#xff0c;介绍了常见的物理服务器在一些情况下显示出错…

【蓝桥杯日记】第一篇——如何搭建系统环境

目录 前言 环境相关文件 学生机环境-Web应用开发环境&#xff08;第十五届大赛&#xff09; 学生机环境-Java编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-C/C编程环境&#xff08;第十五届大赛&#xff09; 学生机环境-Python编程环境 &#xff08;第十五届…