背景:这篇文章发在ICML2018上,是图像领域的重要的论文。训练图像去噪不需要无噪的原图像,非常具有参考意义。
目的:读懂并解析论文。
论文地址:https://arxiv.org/abs/1803.04189
源码地址:https://github.com/NVlabs/noise2noise
目录
一、摘要与背景
1.1 贡献点
1.2 问题描述
二、理论背景
2.1 问题描述
2.2 神经网络下的问题描述
2.3 数据间的相关性
2.4 一对一问题与一对多
2.5 noise2noise
2.6 图像重建问题
三、实验
3.1 加性高斯噪声
模型架构
训练集
测试集
实验结果
收敛速率
有限数据与capture budget
总结
3.2 其他合成噪声
泊松噪声
乘性伯努利噪声
Text Removal
随机值的脉冲噪声
3.3 蒙特卡洛噪声
3.4 MRI成像
四、讨论与个人总结
图像去噪通常被当作一个回归模型,运用CNN:
其中,fθ即为CNN模型,x为有噪样本,y为无噪样本。L为loss function。
这部分理论推导较为抽象,需要反复理解。
最好的方法是获得一个z来最小化均值的deviation,所以loss函数为:
例如:
(对于一维的数据,最小化L2 loss居然是获得算术平均数;最小化L1值得到的是中位数。这个很基础的具体推导我还不会,但是可以记下这个结论)
对于神经网络而言,就是通过训练样本对 (xi,yi), 则fθ(x)需要学出参数θ:
这个公式的数学意义就是,为了最小化误差L,可以通过E(x,y)来达到。
特别的,移除了输入数据之间的相关性之后,只用神经网络得到一个标量输出,问题就退化为之前的公式:
相反地,数据之间是有相关性的,x,y 不独立,这个问题就是对每个样本进行最小化的问题,变成了下面这样:
理论上神经网络可以通过分开的point问题(一个样本被看作一个点)
若是输入与输出之间问题是一对一的问题,则运用这个公式是没有问题的:
但是去噪的问题是一个一对多的问题。例如一个低分辨率图像因为丢失了相应的边缘以及纹理等等信息,它可以表示为很多个高分辨率图像。换句话说,p(y|x)因为x过于简单,具有高度的分布复杂性。
若是通过L2 loss来获取网络,则神经网络就希望学到相应的均值(上面问题描述中探讨过,L2学到的是均值),这就导致了相应的模糊。大量的工作围绕这个问题展开,例如通过学习一个对于loss值的descriminator函数。
作者发现对于特定的问题,这种趋势具有意想不到的好处。 A trivial, and, at first sight, use-less, property of L 2 minimization is that on expectation, the estimate remains unchanged if we replace the targets with random numbers whose expectations match the targets.例如用最小化L2的方法,只要输入的均值是不变的,输出的估值也是不变的,无论y是怎么样的分布。这点作者可以从上面的公式中看出:
且分布p(y|x)被替换为任意的具有相同条件期望值的分布,则输出也是不变的。
通过上面这两点,明确的说明了,通过训练网络学到一个零均值的噪声,则网络输出不变。所以还是一个emperical risk minimization task:
这两个公式之中,注意其推导过程由与无噪样本之间的Loss变为了与有噪样本之间的loss。
公式中输入和输出都是从一个corrupted distribution(未必相同)之中得到。未观测的干净的样本yi例如
对于无限的数据,其结果就是上面无噪时的预测公式相同,对于有限数据,其variance就是目标的corruption之中的平均的variance。
作者不需要一个确切的P(noisy|clean),或者P(clean),而是可以通过数据的分布来获得。
对于很多图像重建的问题,输入有噪数据的期望是无噪的。
例如对于低照度图像举例:
长时间的、无噪声的曝光 相当于 一系列短的,相互独立的、有噪声的曝光。所以想要去除phonton noise的方法就是给一对有噪声的图像,而不需要得到一个可能expensive和difficulty的长时间曝光。
相同的观测可以从loss function之中得到,例如L1 loss可以恢复出目标的中位数,神经网络可以通过一对图像训练,就可以得到非常有意义的(up top 50%)outlier content。
下面一节之中,作者会展示非常有效的方法。
刚开始的加噪图像运用的是加性的高斯噪声,噪声具有零均值,所以运用L2 loss可以恢复。
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。可以看出,像素间关联的像素越多,则抗噪声性能越差。
假定ImageNet的加入高斯噪声σ=25作为一个CU(Capture unit), 假定19个CU可以看作一个无噪声的样本。所以每个一noisy realization加上一个干净的样本需要消耗20CU。
近似理解为:有噪声样本需要恢复出来无噪图像,需要许多个叠加一起除去噪声,对于方差25的需要20个CU。相应的实验与结果如下:
这节里面作者实验了其他合成噪声对结果的影响。
泊松噪声是图像中的最主要的噪声。尽管其有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的过程之中,L2 loss并未被采用,因为L2得出的是均值,但是大量的覆盖的text,所以采用的是L1 loss,即中位数作为loss:
随机值的脉冲噪声比椒盐噪声更具有挑战性。噪声的RGB都是从[0,1]的均匀分布之中产生,p是该像素点噪声出现的概率,1-p是该像素点不出现噪声的概率。
网络的Loss采用了近似于L0 loss的值(具体为什么这样实现值得仔细研究与思考。作者针对每种不同的噪声运用了不同的Loss函数,针对噪声的统计学特性设计Loss函数,非常具有参考意义)。Loss:
这里对蒙特卡洛噪声不太熟悉,参见原文。
MRI成像是通过傅里叶变换(k 空间)实现。根据香农奈奎斯特采样定理,MRI图像多依赖于压缩感知来实现。
如果在k空间上采样相当于采样一个可能的密度图p(k),我们将此过程近似为一个伯努利过程,每一个频率上的概率为: