Noise2Noise的一些学习总结

本篇很大一部分内容借鉴了篇末所引用的优质博客~~

1. 概括

卷积神经网络 (CNN),需要具有大量损坏的输入\hat{x}_{i}和干净的目标 y_{i}的图像对 (\hat{x}_{i}y_{i}) ,从而最小化经验风险。

 f_\theta是损失函数L下的参数映射族;\hat{x}是损坏输入,\hat{x}\sim p(\hat{x}|y_{i})是根据干净目标分布的随机变量。

本文运用机器学习与最基础的信号重建的算法,实现了通过噪声信号到干净信号的重建。得出一个结论:可以通过仅查看损坏的示例来学习恢复图像,既不需要损坏图像的显式统计似然模型,也不需要图像先验,而是从训练数据中间接学习这些。我们的观察结果还直接适用于逆问题,例如从欠采样数据中重建MRI。其性能达到甚至有时超过训练使用干净的数据。

2. 理论背景

2.1 举个例子:

假设有一组不可靠的室温测量值(y1,y2,…)。估计真实未知温度的常用策略是根据一些损失函数L找到与测量值的平均偏差最小的数值z:

对于L_2损耗L(z,y)=(z-y)^2,该最小值就是观测值的算术平均值: 

L_1损失,即偏差的绝对值之和 L(z, y) = |z − y|,该最优值就是观测值的中位数。

2.2 神经网络下的问题描述

然而上面提到的是一种点估计的方法,而我们训练一个网络则是这种点估计的推广,即我们需要训练一个网络,给定x_i它经过网络后对应的期望值应该为y_i,就是通过训练样本对 (xi,yi), 则fθ(x)需要学出参数θ,我们网络的目标是:

这个公式的数学意义就是,为了最小化误差L,可以通过E(x,y)来达到。 

2.3 数据间的相关性

特别的,移除了输入数据之间的相关性之后,只用神经网络得到一个标量输出,问题就退化为之前的公式:

相反地,数据之间是有相关性的,x,y 不独立,这个问题就是对每个样本进行最小化的问题,于是我们通过贝叶斯变换,将(4)式转换为:

理论上我们就可以通过优化每个噪声图像对x_i,y_i来得到最优的f_\Theta网络。也就是通过为每个输入样本分别解决点估计问题来最小化这种损失

2.4 一对一问题与一对多

等式 1 在有限数量的输入-目标对 (xi, yi) 上训练回归器的通常过程(错误地)暗示的输入和目标之间的 1:1 映射,实际上映射是多值的。例如,在所有自然图像的超分辨率任务中,低分辨率图像 x 可以通过许多不同的高分辨率图像 y 来解释,因为低分辨率图像因为丢失了相应的边缘以及纹理等等信息。换句话说,p(y|x)因为x过于简单,具有高度的分布复杂性。

使用 L2 损失训练低分辨率和高分辨率图像对训练神经网络回归器,网络学习输出所有合理解释的平均值(例如,边缘偏移不同的量),这导致网络预测的空间模糊。

如果用期望值与目标值匹配的随机数替换目标值,则估计值保持不变。这很容易看出:无论 ys 来自哪个特定分布,等式 (3) 成立。因此,如果输入条件目标分布 p(y|x) 被替换为具有相同条件期望值的任意分布,则等式 (5) 的最优网络参数 θ 也保持不变。这意味着原则上可以用零均值噪声破坏神经网络的训练目标,而不会改变网络的学习内容。

2.5  noise2noise

通过上面这两点,明确的说明了,通过训练网络学到一个零均值的噪声,则网络输出不变。所以还是一个emperical risk minimization task:

 

这两个公式之中,注意其推导过程由与无噪样本之间的Loss变为了与有噪样本之间的loss。

公式中输入和输出都是从一个corrupted distribution(未必相同)之中得到。未观测的干净的样本yi例如

其中输入和目标现在都来自一个损坏的分布(不一定相同),以潜在的、未观察到的干净目标y_i 为条件,使得 E{ \hat{y_i}|\hat{x_i}}=y_i。给定无限数据,解与(1)相同。对于有限数据,方差是目标中损坏的平均方差除以训练样本的数量。以上都不依赖于损坏的似然模型,也不依赖于底层干净图像流形的密度模型(先验)。也就是说,我们不需要显式的 p(noisy|clean) 或 p(clean),而是可以通过数据的分布来获得。

Noise2Noise的一些学习总结_第1张图片

2.6 图像重建问题


对于很多图像重建的问题,输入有噪数据的期望是无噪的。

例如对于低照度图像举例:

长时间的、无噪声的曝光 相当于 一系列短的,相互独立的、有噪声的曝光。所以想要去除phonton noise的方法就是给一对有噪声的图像,而不需要得到一个可能expensive和difficulty的长时间曝光。

相同的观测可以从loss function之中得到,例如L1 loss可以恢复出目标的中位数,神经网络可以通过一对图像训练,就可以得到非常有意义的(up top 50%)outlier content。

我们只要有两张带噪声但内容一样的图片作为训练样本,就能实现和原来一样的去噪功能,这样比原来获取清晰图片所需的成本小多了。

三、实验


3.1,3.2 之中实验了不同分布的噪声对于结果的影响(高斯噪声,泊松噪声,伯努力噪声),
3.3 之中实验了难以对付的Monte Carlo图像噪声。
3.4 之中实验了难以得到无噪声图像的MRI图像。


3.1 加性高斯噪声


刚开始的加噪图像运用的是加性的高斯噪声,噪声具有零均值,所以运用L2 loss可以恢复。

这节里面,作者先验证了有噪样本与无噪样本的训练会取得同样的结果。
然后作者验证了根据高斯噪声的独立同分布的特性,像素间的高斯噪声会对训练实验结果造成影响。
通过对比其他产生有噪图片的方法,验证了N2N的方法的有效性


模型架构
Baseline可以用目前最好的RED30,一个30层的,128 feature map的ResNet,这个方法在一系列图像重建的任务之中非常具有实用价值。

训练集
作者从50k的IMAGENET的validation数据集图像之中截取出256x256像素的图像。噪声运用方差为σ∈[0, 50] 。

这里训练集是无噪样本,对应于理论中的公式:

测试集
运用了三个知名的数据集,BSD300, SET14,KODAK。数据集描述如下:

 即使作者运用有噪样本训练相应的模型,训练收敛也是很快的(just as quickly)。其公式如下:

注意与上面公式的不同,一个y上面有hat,一个y上面没有hat,分别表示无噪与有噪声。

实验结果


 说明运用无噪样本与有噪样本训练时的去噪分贝数,表明无噪样本与有噪样本可以取得近乎相同的结果,也说明无噪声的训练未必是必要的。

 

这张图展现了一个例子中的去噪性能。

更进一步,作者在RED30运用一个较窄的U-Net来进行训练,比其他的训练快10x,并且给出了相近的性能。(具体的网络结构见论文附录)

收敛速率
训练是在实现一个不可能完成的任务:将一种实例化的噪声转变为另一种噪声。结果就是training loss在训练的过程中无法降下来,loss的gradient会一直很大。

但是这会产生一个问题,为什么大的gradinet不对收敛速率产生影响?

因为acitivation gradients相对的noisy,但是weight的gradients相对的clean,因为高斯噪声在所有像素点上是独立同分布的(independent and identically distributed i.i.d)并且weight的gradient在神经网络之中经过了2^16像素的平均。

总结:因为训练样本是有噪声,所以loss会很大,这会导致梯度回传时会很大。但是因为高斯噪声在每一像素点都是独立同分布,所以weight与很多像素点关联,所以影响并不大,但是activation的梯度关联的像素点不那么多,所以影响较大。

为了验证上面的观点,作者引入了像素间关联的噪声。Brown aditive noise。可以看出,像素间关联的像素越多,则抗噪声性能越差。

有限数据与capture budget
假定ImageNet的加入高斯噪声σ=25作为一个CU(Capture unit), 假定19个CU可以看作一个无噪声的样本。所以每个一noisy realization加上一个干净的样本需要消耗20CU。

近似理解为:有噪声样本需要恢复出来无噪图像,需要许多个叠加一起除去噪声,对于方差25的需要20个CU。相应的实验与结果如下:

  • 作者将capture budget定为2000个CU,所以N个无噪样本与M个由其产生的有噪样本需要N*M=2000 .传统的情境之中,作者需要100个训练对(N=100干净样本,M=20每个产生的有噪样本)即开始所说的1个无噪样本配上19个有噪样本。下图中case 1蓝线。
  • 然后运用相同的capture data作为100*20*19个有噪样本对——对于每一个latent,构建19*20个可能的noisy/clean 的pair,下图中case 2红线
  • 然后设置N=1000(干净样本),M=2(每个干净样本对应的样本),只生成两个噪声的图像,这样反而会获得更好的效果。下图中case 3 (N2N)


 总结
这节里面,作者先验证了有噪样本与无噪样本的训练会取得同样的结果。
然后作者验证了根据高斯噪声的独立同分布的特性,像素间的高斯噪声会对训练实验结果造成影响。
通过对比其他产生有噪图片的方法,验证了N2N的方法的有效性


3.2 其他合成噪声


这节里面作者实验了其他合成噪声对结果的影响。

  • 泊松噪声
  • 乘性的伯努利噪声
  • Text removal
  • 随机值的脉冲噪声


泊松噪声
泊松噪声是图像中的最主要的噪声。尽管其有0均值,但是泊松噪声独立于信号之外,因此很难除掉。

作者运用L2 loss去除泊松噪声,具体实验参数见原论文,这里作者通过泊松噪声进一步得出结论:无噪的训练数据并非必须。

That said, saturation (gamut clipping) renders the expectation incorrect due to removing part of the distribution. As saturation is unwanted for other reasons too, this is not a significant limitation.

乘性伯努利噪声
具体内容参见论文,乘性的伯努利噪声相当于给图像加了一个随机的值为1或者0的mask:m。(伯努利噪声是随机的0或者1)。 Loss设置为:

 

Text Removal
在Text Removal的过程之中,L2 loss并未被采用,因为L2得出的是均值,但是大量的覆盖的text,所以采用的是L1 loss,即中位数作为loss:

 

 

随机值的脉冲噪声
随机值的脉冲噪声比椒盐噪声更具有挑战性。噪声的RGB都是从[0,1]的均匀分布之中产生,p是该像素点噪声出现的概率,1-p是该像素点不出现噪声的概率。

网络的Loss采用了近似于L0 loss的值(具体为什么这样实现值得仔细研究与思考。作者针对每种不同的噪声运用了不同的Loss函数,针对噪声的统计学特性设计Loss函数,非常具有参考意义)。Loss:

 

 

 

3.3 蒙特卡洛噪声
这里对蒙特卡洛噪声不太熟悉,参见原文。

3.4 MRI成像
MRI成像是通过傅里叶变换(k 空间)实现。根据香农奈奎斯特采样定理,MRI图像多依赖于压缩感知来实现。

如果在k空间上采样相当于采样一个可能的密度图p(k),我们将此过程近似为一个伯努利过程,每一个频率上的概率为:

 

 四、讨论与个人总结


即使复杂的噪声污染,神经网络依然可以通过有噪样本来训练去噪,并且取得与无噪样本训练近乎一样的效果。
很多实验围绕这一点展开。不同数据集,不同的噪声类型都被进行了实验,其中值得我们参考和注意一点是:针对不同噪声的统计特性,Loss函数的选择是不一样的。
作者最后提到AmbientGAN可以与去噪的idea结合。
 

上文我们介绍了N2N的图像去噪训练方法,这种方法首次提出可以抛弃干净图像,仅使用噪声图像训练模型,并且给出了严谨的数学证明,图像去噪问题可以公式化为x = s + n ,其中x是噪声图像,s是干净图像,n是噪声。尽管这是一种在理论上与监督方法等价的方法,但是由于实践操作中我们无法达到理论中的无限多的配对噪声图像这一条件,所以这是一种弱于监督,但是却强于自监督的方法,虽然这种方法有着里程碑的意义,然而N2N依然有很多理论上和实践上的问题:
1、首先,N2N虽然不需要配对的噪声/干净图像,但是如果想得到比较准确的结果,却需要大量的噪声图像,并且最重要的是,这些噪声图像x_i应该是同一张干净图像s 添加了随机噪声后获得的。然而这些噪声图像依然不容易获得,甚至是无法获得。
2、我们可以看到对于噪声分布比较规则的图像,我们可以通过使用与之相匹配的损失函数进行模型训练,然而现实中很多噪声时无法预测其分布的,当噪声分布于损失函数不匹配时,模型的性能会大幅下降。
 

五. 一些其他理解思路

Noise2Noise的一些学习总结_第2张图片

本篇所引用的优质的博客:

图像去噪论文Noise2Noise-Learning Image Restoration without Clean Data论文详解_祥瑞Coding的博客-CSDN博客_图像去噪研究意义

图像去噪之 Noise2Noise 和 Noise2Void_涑月听枫的博客-CSDN博客_noise2noise

noise2noise学习与修改_一只各种都搞一下的攻城狮的博客-CSDN博客_noise2noise

noise2noise整理_撒哈拉的小屋的博客-CSDN博客_noise2noise

Noise2Noise文章的复现code实现_蒙奇·D·路飞001的博客-CSDN博客_noise2noise

你可能感兴趣的:(论文笔记,图像处理)