Paper | Noise2Noise: Learning Image Restoration without Clean Data
发表在2018 ICML。
摘要
We apply basic statistical reasoning to signal reconstruction by machine learning – learning to map corrupted observations to clean signals – with a simple and powerful conclusion: it is possible to learn to restore images by only looking at corrupted examples, at performance at and sometimes exceeding training using clean data, without explicit image priors or likelihood models of the corruption. In practice, we show that a single model learns photographic noise removal, denoising synthetic Monte Carlo images, and reconstruction of undersampled MRI scans – all corrupted by different processes – based on noisy data only.
结论
We have shown that simple statistical arguments lead to new capabilities in learned signal recovery using deep neural networks; it is possible to recover signals under complex corruptions without observing clean signals, without an explicit statistical characterization of the noise or other corruption, at performance levels equal or close to using clean target data. That clean data is not necessary for denoising is not a new observation: indeed, consider, for instance, the classic BM3D algorithm (Dabov et al., 2007) that draws on self-similar patches within a single noisy image. We show that the previously-demonstrated high restoration performance of deep neural networks can likewise be achieved entirely without clean data, all based on the same general-purpose deep convolutional model. This points the way to significant benefits in many applications by removing the need for potentially strenuous collection of clean data.
AmbientGAN (Ashish Bora, 2018) trains generative adversarial networks (Goodfellow et al., 2014) using corrupted observations. In contrast to our approach, AmbientGAN needs an explicit forward model of the corruption. We find combining ideas along both paths intriguing.
要点
- 以往我们都是学习受损图像到干净图像的映射;由于往往是病态问题,因此需要图像先验或似然模型。本文向我们展示:我们可以只通过观察受损样本,达到相似甚至更好的效果。本文以去噪为例。
- 实际上,这种思想在历史工作中已经有所体现。例如BM3D算法,通过搜索和处理同一张有噪图像内的相似块(没借助干净块),完成去噪的目的。但本文是第一个论证:这种思想也可以在DNN中实现。
优点
- 这是一篇非常具有insight的文章,指出了理解神经网络学习与点估计的相似性。
- 这种insight可以指导我们直接通过有噪数据训练神经网络,解决了无损图像获取困难的问题。
局限
- 论证很模糊,并且是在噪声零均值的假设下论述的。
故事背景
如果我们接触过图像(信号)恢复中基于模型(重建)的算法,我们就知道:其难点和麻烦的地方,在于对似然函数(降质模型)和图像先验(稀疏、平滑等)的建模。
而CNN很好地解决了这一问题,但需要大量的训练数据,通常是受损输入\(\hat{x}_i\)和干净目标\(y_i\),并且训练目标是最小化经验损失:
\[
\begin{gather}
\arg\min_{\theta} \sum_i L(f_{\theta}(\hat{x}_i), y_i)
\end{gather}
\]
其中,\(f_{\theta}\)是参数化的映射(a parametric family of mappings),例如CNN。
获取大量干净数据是很困难的。例如,为了获得无噪图像,我们需要长曝光;为了获得MRI图像的完整采样,图像中不能有动态目标等。
这篇文章就告诉我们:其实我们只需要观察受损图像,就能学习该映射,有时甚至能学得更好。同其他基于CNN的学习方法一样,我们不需要对似然和先验作过多假设。
算法原理
点估计
假设我们有一组温度采样数据\((y_1, y_2, \dots)\)。我们希望在某种损失度量\(L\)下,得到温度估计值\(z\)(希望该损失最小):
\[
\begin{gather}
\arg\min_z \mathbb{E}_y \{L(z,y)\}
\end{gather}
\]
如果采用\(L_2\)损失,那么估计值就是观测值的算术平均(批注:假设样本分布i.i.d.):
\[
\begin{gather}
z = \mathbb{E}_y \{ y \}
\end{gather}
\]
总结一下,点估计带有一些统计平均的性质。比如,我们可以简单地对多点采样的温度取平均,得到最终的估计温度。
神经网络算法与点估计的关系
回过头来,我们观察式1。乍一眼看,式1表达的是参数预测问题(不是简单地估计值,而是学习一个预测模型,服务千千万万的输入),式2是点估计问题,二者不是一个东西。
理想状况下,网络的优化方式如下(提供准确的先验和似然):
\[
\begin{gather}
\arg\min_{\theta} \mathbb{E}_{(x,y)} \{ L(f_{\theta}(x), y) \} = \arg\min_{\theta} \mathbb{E}_x \{ \mathbb{E}_{(y | x)} \{ L(f_{\theta}(x), y) \} \}
\end{gather}
\]
上式可以理解为:对于每一个样本\(x_i\),都在执行一次点估计。可以理解为:根据观测点\(y\),估计点\(z = f_{\theta}(x)\),而估计完成时,参数\(\theta\)就可以根据\(z\)推出(或者说二者本质是一样的)。
当然,这种论证是很粗糙的,但提供给我们一个非常有用的见解。我们考虑超分辨问题:这是一个典型的病态问题,因为高频信息在采样过程中丢掉了,而同一张LR图像可以对应大量的HR图像。
借助上述点估计思想,我们不难理解:神经网络实际上是将这些大量的、可能的HR图像做了一个统计平均(点估计的特性),因此\(L_2\)范数下超分辨图像常常被过度平滑。
这也能解释BM3D的成功本质!
核心思想
基于上述思考,我们可以很自然地思考:既然是统计平均,那么我们可以将干净图像\(y\)随意换成其他图像(信号),只要保证期望不变,那么也能得到我们想要的估计值\(z = f_{\theta}(x)\)(式3),进而得到不变的参数\(\theta\)(式4)!
换句话说,如果假设噪声零均值(或保证期望仍然是无噪图像的期望),那么我们就可以让神经网络的输入和监督都是有噪图像,学习的参数是一样的!
即:
\[
\begin{gather}
\mathbb{E} \{ \hat{y}_i | \hat{x}_i \} = y = \mathbb{E} \{ y_i | \hat{x}_i \}
\end{gather}
\]
其中,\(\hat{x}_i\)是有噪图像,\(\hat{y}_i\)也是有噪图像(\(y_i\)不一定要和\(x_i\)相同),\(y\)就是目标干净图像。
附录A.3.给出了一个证明,证明\(y_i\)和\(\hat{y}_i\)均值之间的误差与样本数量\(N\)有关;当\(N\)足够大时,该误差趋于0。
在一篇引用该文的论文中,\(\hat{x}_i\)和\(\hat{y}_i\)用的是同一幅干净图像、在同一噪声分布下分别独立产生的两幅图像。
回头品味
再回头品味一下。实际上,BM3D算法属于基于模型(重建)的算法,英文叫a model-based or reconstruction-based approach。BM3D通过块匹配和协同滤波的方式去噪,可以简单理解为统计平均取均值,从而消除噪声。
但是,这篇文章提出,神经网络算法也可以理解为统计平均。这种思想很前卫,也很不好理解,论证也很模糊。
我们原来对神经网络工作模式的理解大致如下:大量有噪图像 -> 表征图像本质的高维特征 -> 重建图像 <- 对应干净图像监督。
现在我们换个角度理解:大量有噪图像 -> 表征图像本质的高维特征 -> 大量重建图像 <- 另一组有噪图像监督(要求或假设总期望相同)
再理解:如果我们能将 神经网络的工作模式 理解为点估计,那么无论是估计干净图像,还是估计另一组有噪图像(期望仍是干净的),学习得到的模型仍然是一样的,估计得到的参数也是一致的。
怎么理解,见仁见智,欢迎评论区各路大神启发我~~
实验
实验尝试了高斯噪声、泊松噪声、伯努利噪声、蒙特卡罗图像噪声,以及欠采样的MRI图像噪声。
高斯
网络采用RED30,是一个30层的残差网络。其余测试采用了更窄的U-Net,训练速度更快,效果相似。
高斯噪声标准差从0到50不等,混合在一个训练集中,因此让网络具有盲去噪的功能。
训练集采用ImageNet,测试集采用BSD300、SET14和KODAK。
如上表,该方法的效果超过了BM3D。
由于网络无法真正实现从一副有噪图像映射至另一幅有噪图像,因此损失一直都很大。
但是梯度不大,原因没看懂:
While the activation gradients are indeed noisy, the weight gradients are in fact relatively clean because Gaussian noise is independent and identically distributed (i.i.d.) in all pixels, and the weight gradients get averaged over \(2^16\) pixels in our fully convolutional network.
可能的意思是:平均多了,由于每个像素点上的噪声是iid的,因此会有一些抵消,故梯度比较干净。
但如果每个像素点之间的噪声存在关联,那么这种抑制效果就会减弱,梯度就会很大,训练会比较振荡。如下图(b):
这种噪声是在高斯噪声图像的基础上,做了一个高斯滤波。带宽越大,关联越强,训练曲线越振荡。
现在,我们讨论算法对数据量的需求。假设使用一张ImageNet图像加噪,计算量是1CU。
(1)第一种情况,我们使用100张图像,每张图像生成20副噪声图像。这样就有\(100*20*19 = 38000\)对训练样本。(噪声图像两两作为输入)
(2)第二种情况,我们按照传统做法,100副图像,每幅图像生成1副对应的噪声图像,但训练时一一对应。
(3)第三种情况,我们使用1000张图像,每张图像生成2副噪声图像。这样就有\(1000*2*1 = 2000\)对训练样本。
如上图(c),效果都比传统做法更好。
其他生成噪声
泊松噪声是摄像中的主要噪声,尽管是零均值的,但与信号有关,很难消除。略。
Paper | Noise2Noise: Learning Image Restoration without Clean Data的更多相关文章
- 读paper笔记[Learning to rank]
读paper笔记[Learning to rank] by Jiawang 选读paper: [1] Ranking by calibrated AdaBoost, R. Busa-Fekete, B ...
- Journal of Proteome Research | Clinically Applicable Deep Learning Algorithm Using Quantitative Proteomic Data (分享人:翁海玉)
题目:Clinically Applicable Deep Learning Algorithm Using Quantitative Proteomic Data 期刊:Journal of Pro ...
- Paper Reading - Learning to Evaluate Image Captioning ( CVPR 2018 ) ★
Link of the Paper: https://arxiv.org/abs/1806.06422 Innovations: The authors propose a novel learnin ...
- Neural Networks and Deep Learning(week3)Planar data classification with one hidden layer(基于单隐藏层神经网络的平面数据分类)
Planar data classification with one hidden layer 你会学习到如何: 用单隐层实现一个二分类神经网络 使用一个非线性激励函数,如 tanh 计算交叉熵的损 ...
- Paper Reading - Learning like a Child: Fast Novel Visual Concept Learning from Sentence Descriptions of Images ( ICCV 2015 )
Link of the Paper: https://arxiv.org/pdf/1504.06692.pdf Innovations: The authors propose the Novel V ...
- Paper | Residual learning
目录 1. OVERVIEW 2. DEGRADATION 3. SOLUTION(DEEP RESIDUAL LEARNING) 4. IMPLEMENTATION(SHORTCUT CONNECT ...
- [Machine Learning with Python] My First Data Preprocessing Pipeline with Titanic Dataset
The Dataset was acquired from https://www.kaggle.com/c/titanic For data preprocessing, I firstly def ...
- Paper | SkipNet: Learning Dynamic Routing in Convolutional Networks
目录 1. 概括 2. 相关工作 3. 方法细节 门限模块的结构 训练方法 4. 总结 作者对residual network进行了改进:加入了gating network,基于上一层的激活值,得到一 ...
- How to use data analysis for machine learning (example, part 1)
In my last article, I stated that for practitioners (as opposed to theorists), the real prerequisite ...
随机推荐
- networkx生成网络的子网计算
当我们用networkx生成网络时,节点之间的关系是随机的,很多时候我们生成的一个网络,存在不止一个子网,也就是说任意两个节点之间不一定连通 当我们想生成一个任意两点都能连通的网络时,就需要去判断生成 ...
- golang数据结构之利用栈求计算表达式(加减乘除)
例如:3+2*6-2 先定义两个栈,一个为数值栈,一个为运算符栈: stack.go package stack import ( "errors" "fmt" ...
- Centos7 下cobbler安装及配置
1.背景介绍 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1小时也完成了,但是如果有成百台的服务器还要用光盘.U盘去安装,就显 ...
- 拎壶学python3-----(3)python之while循环用法
一.下边我们看一个简单的while循环 那怎么计数呢就让输入三次三次后退出: 二. 关于计数这个问题我们一起看一下 (1)关于计数如下: 我们发现这个计数根本停不下来,怎么才能搞成我们想要的计数次数呢 ...
- oracle 中 to_date 函数的用法
常犯错的使用方法. to_date('2019-08-12 22:05:','yyyy-MM-dd HH24:mm:ss') Oracle中会引起错误:"ORA 01810 格式代码出现两次 ...
- DedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221)
dedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221) 一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2 ...
- Web前端基础(7):JavaScript(一)
1. JavaScript概述 1.1 JavaScript历史背景介绍 布兰登 • 艾奇(Brendan Eich,1961年-),1995年在网景公司,发明的JavaScript. 一开始Java ...
- Python中全局变量的引用与修改之格式影响
先来看下面的代码及执行结果: a = 1 b = [2,3] def nums(): a = 2 b[0] = 0 print(a) print(b) print(a) print(b) nums() ...
- 常用RGB颜色表 色值
转自:http://blog.sina.com.cn/s/blog_7f422a8901019d8j.html R G B 值 R G B 值 R G B 值 黑色 0 0 0 #0000 ...
- Meterpreter初探
Meterpreter Meterpreter号称"黑客瑞士军刀",Meterpreter是Metasploit框架中的一个杀手锏,通常作为漏洞溢出后的攻击载荷使用,攻击载荷在触发 ...