背景:这篇文章发在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成像

 四、讨论与个人总结


一、摘要与背景

1.1 贡献点

  • 运用机器学习与最基础的信号重建的算法,实现了通过噪声信号到干净信号的重建。
  • 得到了一个重要结论:可以仅仅通过无标签的噪声信号重建无噪的信号,而不需要干净的样本,并且性能上超越了运用干净数据进行训练的性能。
  • 特别的,展示了一个单模型可以重建下采样的MRI的扫描图像

1.2 问题描述

图像去噪通常被当作一个回归模型,运用CNN:

其中,fθ即为CNN模型,x为有噪样本,y为无噪样本。L为loss function。

然后通过噪声信号x推断出相应的干净样本:

二、理论背景

这部分理论推导较为抽象,需要反复理解。

2.1 问题描述

假定通过不靠谱的方法获得了一系列屋内温度:

最好的方法是获得一个z来最小化均值的deviation,所以loss函数为:

例如:

  • 选择L2 loss的时候,L(z,y)=(z-y)^2    

所以最小化误差函数的值z就是找到一个所有观测的算术平均数:

  • 若是L1 loss,则 L(z,y)=|z-y| ,所以所得到的最优值就是中位数。

(对于一维的数据,最小化L2 loss居然是获得算术平均数;最小化L1值得到的是中位数。这个很基础的具体推导我还不会,但是可以记下这个结论)

2.2 神经网络下的问题描述

对于神经网络而言,就是通过训练样本对 (xi,yi), 则fθ(x)需要学出参数θ:

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

2.3 数据间的相关性

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

相反地,数据之间是有相关性的,x,y 不独立,这个问题就是对每个样本进行最小化的问题,变成了下面这样:

理论上神经网络可以通过分开的point问题(一个样本被看作一个点)

2.4 一对一问题与一对多

若是输入与输出之间问题是一对一的问题,则运用这个公式是没有问题的:

但是去噪的问题是一个一对多的问题。例如一个低分辨率图像因为丢失了相应的边缘以及纹理等等信息,它可以表示为很多个高分辨率图像。换句话说,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)被替换为任意的具有相同条件期望值的分布,则输出也是不变的。

2.5  noise2noise

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

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

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

对于无限的数据,其结果就是上面无噪时的预测公式相同,对于有限数据,其variance就是目标的corruption之中的平均的variance。

作者不需要一个确切的P(noisy|clean),或者P(clean),而是可以通过数据的分布来获得。

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结合。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐