论文笔记:Noise2Noise: Learning Image Restoration without Clean Data

标题

Introduction

这是ICML2018的一篇论文,其由来自英伟达、阿尔托大学和 MIT 的研究者联合发表。该文章提出了一个颇有意思的观点:在某些常见状况下,网络能够学习恢复信号而不用“看”到“干净”的信号,且获得的结果接近或至关于使用“干净”样本进行训练。而这项结论来自于一个简单的统计学上的观察:咱们在网络训练中使用的损失函数,其仅仅要求目标信号(ground truth)在某些统计值上是“干净”的,而不须要每一个目标信号都是“干净”的。html

Theoretical background

先看一种简单的状况,假设咱们对某个物理量(如房间的温度)屡次测量,获得一系列不可靠的测量值( y 1 , y 2 , . . . y_1,y_2,... )。一种估计真实值的通用方法是找到一个数 z z ,使其与这些测量值有最小的平均误差,即优化下面损失函数:
arg min z E y { L ( z , y ) } \arg\min_z \mathbb{E}_y\{L(z,y)\} git

对于 L 2 L_2 损失 L ( z , y ) = ( z y ) 2 L(z,y)=(z-y)^2 ,该损失函数的最优解在测量值的算数平均值(指望)处取到:
z = E y { y } z=\mathbb{E}_y\{y\} github

对于 L 1 L_1 损失 L ( z , y ) = z y L(z,y)=|z-y| ,该损失函数的最优解在测量值的中值处取到:
z = m e d i a n { y } z=median\{y\} web

对于 L 0 L_0 损失 L ( z , y ) = z y 0 L(z,y)=|z-y|_0 ,该损失函数的最优解近似在测量值的众数处取到:
z = m o d e { y } z=mode\{y\} 网络

从统计学角度,这些通用的损失函数均可以解释为似然函数的负对数,而对这些损失函数的优化过程能够看作为最大似然估计。
训练神经网络回归器是这种点估计过程的推广。已知一系列输入-目标对 ( x i , y i ) (x_i,y_i) ,典型的网络训练形式是优化下列目标函数:
arg min θ E ( x , y ) { L ( f θ ( x ) , y ) } \arg\min_\theta\mathbb{E}_{(x,y)}\{L(f_\theta(x),y)\} app

其中,网络函数为 f θ ( x ) f_\theta(x) θ \theta 为网络参数。
若是将整个训练任务分解为几个训练步骤,根据贝叶斯定理可将上述目标函数变为:
arg min θ E x { E y x { L ( f θ ( x ) , y ) } } \arg\min_\theta\mathbb{E}_x\{\mathbb{E}_{y|x}\{L(f_\theta(x),y)\}\} svg

则网络训练的目标函数与前面所说的标量损失函数有相同的形式,也具备相同的特性。函数

实际上,经过上述目标函数,在有限数量的输入-目标对上训练回归器的过程隐含了一点:输入与目标的关系并非一一对应的,而是一个多值映射问题。好比对于一个超分辨问题来讲,对于每个输入的低分辨图像,其可能对应于多张高分辨图像,或者说多张高分辨图像的下采样可能对应同一张图像。而在高低分辨率的图像对上,使用 L 2 L_2 损失函数训练网络,网络会学习到输出全部可能结果的平均值。学习

综上所述, L 2 L_2 最小化的一个看起来彷佛微不足道的属性是,若是咱们用一个指望与目标相匹配的随机数替换目标,那么估计值将保持不变。所以,若是输入条件目标分布 p ( y x ) p(y|x) 被具备相同条件指望值的任意分布替换,则最佳网络参数 θ \theta 也保持不变。这意味着,能够在不改变网络训练结果的状况下,将神经网络的训练目标添加上均值为0的噪声。则网络目标函数能够变为
arg min θ i L ( f θ ( x ^ i ) , y ^ i ) \arg\min_\theta\sum_i{L(f_\theta(\hat{x}_i),\hat{y}_i)} 测试

其中,输出和目标都是来自于有噪声的分布,且知足 E { y ^ i x ^ i } = y i \mathbb{E}\{\hat{y}_i|\hat{x}_i\}=y_i

当给定的训练数据无限多时,该目标函数的解与原目标函数的相同。当训练数据有限多时,估计的均方偏差等于目标中的噪声的平均方差除以训练样例的数目,即:
E y ^ [ 1 N i y i 1 N i y ^ i ] 2 = 1 N [ 1 N i V a r ( y i ) ] \mathbb{E}_{\hat{y}} \left[\frac{1}{N}\sum_i{y_i}-\frac{1}{N}\sum_i{\hat{y}_i}\right]^2=\frac{1}{N}\left[\frac{1}{N}\sum_i{Var(y_i)}\right]

所以,随着样本数量的增长,偏差接近于零。即便数据量有限,估计也是无偏的,由于它在指望上是正确的。

在许多图像复原任务中,输入的被污染数据的指望就是咱们要恢复的“干净”的目标,所以只要对每张被污染的图像观察两次,即输入数据集也是目标数据集,就能够实现对网络的训练,而不须要得到“干净”的目标。
L 1 L_1 损失能够获得目标的中值,这意味着网络能够被训练用来修复有显著异常内容的图像(最高可达50%),并且也仅仅须要成对的被污染图像。

Practical experiments

加性高斯白噪声

通常加性高斯白噪声是零均值的,因此文章采用 L 2 L_2 损失训练网络。
文章使用开源图像库的图像,对每张图像随机添加方差为 σ [ 0 , 50 ] \sigma\in[0,50] 的噪声,网络在去噪过程当中须要估计噪声幅度,整个过程是盲去噪过程。
高斯噪声
从去噪结果能够看出,使用“干净”的目标和使用有噪声的目标有类似的收敛速度和去噪质量。若是进一步使用不一样大小的高斯滤波器模糊有噪声的目标图像,能够观察到低频噪声会更顽固,须要更多的迭代次数,可是对于全部状况来讲,网络都收敛于类似的去噪质量。

其余合成噪声

泊松噪声

泊松噪声和高斯噪声同样是零均值的,可是更难去除,由于其是信号相关的。文章使用 L 2 L_2 损失,且在训练过程当中变化噪声幅度 λ [ 0 , 50 ] \lambda\in[0,50]
须要说明的是,图像饱和截止区域是不知足零均值假设,由于在这些区域部分噪声分布被丢掉了,而剩余部分的指望再也不是零了,因此在这些区域不能获得好的效果。

乘性伯努利噪声

即至关于对图像进行随机采样,未采样到的点像素值为0。被污染像素的可能性记为 p p ,在文章训练过程当中,变化 p [ 0.0 , 0.95 ] p\in[0.0,0.95] ,而在测试中 p = 0.5 p=0.5 。而获得的结果是使用被污染的目标比“干净”目标获得PSNR值还要高一点,这多是因为被污染的目标在网络输出中有效地应用了dropout技术的结果。
结果比较

文字去除

网络使用独立的被污染输入和目标对进行训练,被污染像素的可能性 p p 在训练过程当中为 [ 0.0 , 0.5 ] [0.0,0.5] ,而在测试中 p = 0.25 p=0.25 。且在训练中使用 L 1 L_1 损失做为损失函数,从而去除异常值。
文字去除

随机值脉冲噪声

即对于每个位置的像素都有可能性 p p [ 0 , 1 ] [0,1] 的值随机替代。在这种状况下,平均值和中值都能产生好的结果,其理想的输出应该是像素值分布的众数。为了近似寻找众数,文章使用退火版本的“ L 0 L_0 损失”函数,其定义为 ( f θ ( x ^ ) y ^ + ϵ ) γ (|f_\theta(\hat{x})-\hat{y}|+\epsilon)^\gamma ,其中 ϵ = 1 0 8 \epsilon=10^{-8} ,在训练时 γ \gamma 从2到0线性降低。训练时输入和目标图像被污染像素的可能性为 [ 0 , 0.95 ] [0,0.95]
脉冲噪声

除此以外,文章还在Monte Carlo渲染和MRI方面作了测试,均获得了不错的效果。
该文章的意义在于,在现实世界中想要得到清晰的训练数据每每是很困难的,而这篇文章提供了一种新的思路解决这个问题。文章也提到了,天下没有免费的午饭,该方法也没法学习获取输入数据中不存在的特性,但这一样适用于清晰目标的训练。

英伟达新闻地址:新闻地址
An unofficial and partial Keras implementation:github
更新:
英伟达官方tensorflow实现:github