不需要干净样本的去噪方法:Noise2Noise
论文:Noise2Noise
Github:第三方复现Noise2Noise
引言
用深度学习方法进行图像去噪的时候,通常需要大量的训练图像样本对,即带有噪声的图片和去噪后的图片,可是去噪后的图片往往很难获得,比如在摄影中,需要长曝光才能获得无噪声图片。在MRI图像中,获取无噪声图片则更加难。
这篇论文的作者就提出了一种不需要无噪声图片作为标签的去噪方法。方法非常有意思,实现起来也很简单。那就是:输入输出都是带有噪声的图片(噪声是人工加入的,0均值,高斯噪声),进行训练。
初次看的时候,直接看的源代码,感觉有点难以置信,这也行?有一点,突破认知极限了。咋一看,以有噪声的图像作为CNN的标签,怎么可能会有效呢?
核心思路
我们先思考一个问题,使用:噪声图像-噪声图像样本对训练一个CNN会怎么样?
输入噪声图像
输出噪声图像
由于输入,输出的噪声噪声都是随机的,那么如果让CNN强行去学习二者之间的映射关系,CNN能学到什么呢?
- 当训练样本很少时,CNN会学习到两种噪声模式的转换关系
- 当样本数量足够多的时候,由于噪声是随机的,不可预测的。站在最小化Loss的角度,CNN就可以学习到清晰的图像本身了。CNN是不可能学习到某种噪声转换规律从而使得Loss最小化的,因为噪声始终是随机的。这种角度是个人理解,可能不太直观,下面从作者论文里给的公式推导来理解。
理论推导
先看一个小问题,对于室内温度估计问题:如果,我有一系列观测温度(y1, y2, y3, y4.....),那么真实的温度z,就可以建模为下列优化问题:
真实温度z求取方法
这个公式很直观,就是最小化损失函数(距离函数)L的期望,这个损失函数是关于z的一个函数。对于所有观测y,都要最小化损失。所以可以把L看成一个以y为变量的概率分布,最小化所有样本的损失,其实就是最小化期望(即损失的均值)。如果距离度量方式是2范数,那么真实温度z就是y的均值。所以,真实温度,其实是y的均值,至于每一次观测y(i)是什么,根本不重要,优化的目标是考虑所有观测的均值。
那么,对于图像去噪问题,输入噪声图像设为x(i),输出的清晰图像设为y(i)。那么,我们可以将问题建模为如下优化问题:
上述公式的\theta是CNN的权重参数,x, y不是相互独立的,所以化为:
去噪问题建模公式2
同样的,如果改变p(y/x)的分布,只要条件期望不变,最终求得的\theta
也不会变。所以,如果我们对标签y添加一个0均值的高斯噪声作为扰动得到y'。那么,上述建模公式就转化为如下一个优化问题了:
用噪声图像训练模型优化公式
如上,模型训练就简单了。
结果
作者尝试了脉冲噪声,高斯噪声,伯努利噪声,蒙特卡洛噪声,效果都是接近state of art。整个论文思路蛮简单的,就是一开始不太能理解,用噪声图片训练模型的思路