Deep Image Prior : 无需训练集实现图像去噪、超分、修复、增强
转自:Deep Image Prior 解读: 无需训练集实现图像去噪、超分、修复、增强 - 知乎 (zhihu.com)
0. Sources
原文: Ulyanov D, Vedaldi A, Lempitsky V. Deep image prior[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 9446-9454.
1. 要点速览
本文使用神经网络来解决图像恢复的逆问题(即给定退化图像,恢复出退化前的图像)。但是和深度学习领域多数提出新模块、新网络的文章不同,本文验证了网络固有的一种先验特性,并基于此对一些常见的逆问题(如去噪,修复和超分辨)提出了新的解决思路。本文思路新就新在,不需要提供训练集,也不需要提供未经破坏的原图作为真值标签,整个过程所需的仅仅单张退化的图像,便可以进行图像恢复,而且在特定情况下还可以得到比较好的恢复效果。
简而言之,本文的创新点在于发现了神经网络本身的结构天生带有的隐式先验信息,并通过多个成功的实验案例验证了这种特性有利于其实现图像复原的任务(下文会解释)。
2 研究背景
图像在形成、传输、接收和处理的过程中,不可避免地存在着外部干扰和内部干扰,这些干扰会给原始图像带来一定程度的噪声。噪声恶化了图像质量,使图像变得模糊,甚至会掩盖图像特征,加大后续图像分析的困难。因此,在图像的预处理阶段去除噪声、恢复原始图像是图像处理中的一个重要的内容。除此之外,将低分辨率图像变成高分辨率,或是对局部信息被破坏的图像进行修复,也同样重要。
本文针对的问题是图像恢复一类的逆问题,即给定退化图像,恢复出退化前的图像。这里的退化可以有多种含义:
- 当图像被噪声污染时,就是去噪问题
- 当图像被涂鸦破坏时,就是修复问题
- 当图像被降低分辨率时,就是超分辨问题
3 模型和方法
3.1 算法概述
一般的图像恢复问题可以总结为如下函数:

其中 x0 是退化的(低分辨率、被遮挡,带噪音)图像,x是算法恢复的图像,因为作者用的是神经网络,因此x就是神经网络的输出。E是数据项,具体形式依赖于具体任务,可以理解为损失函数, x和x0越接近,该项的值越小,比如 E=||x−x0|| 。R是正则化项,用以防止x和x0过于相似(过拟合)。我们的目标就是求上式的最优解x*。(我认为上式的min的作用域应该包含R,外层应该套个大括号)
在本文中,作者用卷积网络实现图像复原任务,作者认为CNN抓取到的隐式先验可以替代R,于是将上式改为了

其中,f就是神经网络, θ 为网络参数(一开始通过随机初始化得到),z是最初输入网络的一个固定的随机的编码(类似原始GAN的输入), θ∗ 是通过训练得来的参数最优解,x*就是网络的最优输出。
原文对z的解释如下: Note that while it is also possible to optimize over the code z, in our experiments we do not do that. Thus, unless noted otherwise, z is a fixed 3D tensor with 32 feature maps and of the same spatial size as x filled with uniform noise
那么,(1)改为(2)后,正则项R哪去了?作者认为,(2)中并不是不存在R,只是以另一种方式隐藏在了神经网络f中,即:
- 对于那些越容易能被网络f(z)生成的图片x,R(x)越趋近于0
- 对于那些无法被网络f(z)生成的图片x,也就是x不在f的值域中,R(x)=+∞。此处可以理解为神经网络无法生成(或则说很费力才能生成)的那些信号,是由于被“暗中的正则项”所惩罚,所约束而导致的。
信号生成之所以难易有别,当然跟网络结构有关。所以说神经网络本身的结构就带有了一定的先验——冥冥之中似乎偏爱一些特定信号而打压另一些信号(施加较大的正则项),下文会详细解释这种先验的具体含义。
再次强调,神经网络的输入z是一个固定的随机张量,网络要做的事情是,通过常规的梯度下降和反向传播来优化网络参数,以最小化损失函数 E(f(z),x0) ,也就是使得网络的输出x=f(z)不断地逼近退化图x0。此时你可能有疑问,正常来讲损失函数不应该定义为输出和真值标签图之间的差异吗,为何要定义为输出和退化图之间的差异,这是因为
- 这篇文章并不像传统的深度学习任务,有大量样本以及对应的真值标签。我们没有真值,只有待恢复的退化图x0
- 一个更重要的原因,本文正是利用这个单个的x0,来完成对其的恢复工作,以揭示下文要提到的神经网络固有的先验特性
3.2 关键发现——神经网络的躁声阻抗性(high noise impedance)
想必大家都听说过,有人证明了神经网络可以拟合任意函数,这意味着理论上网络可以生成任何图片。但是作者要强调的是,生成不同类型的图片的难度不是在一个量级上的,作者通过实验证实,尽管神经网络确实可以拟合几乎所有的图片,但是网络能更容易,或者说更快地学习并拟合出自然的,有规律的图片;相比之下,网络学习那些带有不规则噪声,不自然的图片则会慢很多。
实验过程如下:给定一个固定输入z,以及随机初始化的神经网络f,作者分别让神经网络学习拟合4种不同的目标图:1) 干净的自然图像,2) 带噪声的自然图像,3)自然图像像素被打乱后的图像,和 4) 白噪声图像。优化目标为 min||f(z)−x0||2 。下图显示了这四个任务中(顶部从左到右四个子图分别对应任务1-4),损失函数关于迭代次数的曲线:

从图中可以明显看到,神经网络学(1)最快,(2)次之;然后收敛速度远远大于(3)和(4)。这就说明了以上观点:神经网络天生具有对自然信号的低阻抗性和对噪声的高阻抗性。我们可以充分利用这种差异,通过把握好迭代次数,来把退化图中不自然的分量过滤掉。这就是上文所说的神经网络自身结构带来的先验。
那么,为什么神经网络天生对自然图像那么友好呢?这其实是一个很值得思考的问题。按照我自己的理解,作者的意思是,因为神经网络中卷积核的权值共享机制使其能够在输出上施加一种特定的stationary(平稳性,在此我理解为数据的统计性质关于空间的平移不变性),因此输出会天然地倾向于产生自相似性的规律pattern(此段参考自原文第6节 Discussion部分)。这里的自相似性(self-similarity)是自然图像都具备的一个特点,也就是说自然图像中很多结构和元素是重复的、周期的、冗余的,正是这些自相似性使得人在主观视觉上能感受到一种规律和自然的感觉。接下来用几个具体的应用说明本文算法的机制.
4 具体应用
4.1 图像去噪
开局只有随机初始化的网络f,随机但是固定的输入z以及噪声图像 x0 作为学习的目标。可令数据项为

网络优化的流程如下:
可以看到网络的更新机制都是一样的——每次迭代输入都是固定的随机编码z,用梯度下降法更新网络参数 θ 。随着网络迭代次数的增多,网络的输出会越来越像x0。由于网络学信号学得快,学噪声学得慢,所以要利用这一点控制好迭代次数:不能太少,否则学不到位,输出结果结构模糊;也不能太多,否则学的太好,跟x0过于相似,把噪声也一起学了。看下面这个例子:

最左边是退化图像 x0 ,它经过JPEG有损压缩,有很多瑕疵。网络的目标是学会输出它。在100次迭代后,网络学会了输出很模糊的形体。在2400次迭代后,网络学会了输出一张良好的图片,此时网络学到了有用的信号部分,但是由于噪声阻抗特性,此时噪声部分还没来得及学习(此时的输出结果就是我们需要的,应该在此停止迭代)。然后在50000次迭代后,网络才学会了输出带噪声的原图(此时损失虽然最小,但不是我们想要的)。
到此,应该能体会到本文的方法非常简单却又很微妙,而且本文的去噪效果甚至可以和经典的去噪算法BM3D,Non-local means一比高下(不比他们差)。
4.2 图像修复
对于图像修复问题,退化图x0则是残缺图,是网络学习的目标,m是标记缺失区域的二值掩模(已知区域标记为1,空洞标记为0)。该任务中,数据项则是:

可以看到空洞区域像素值对上式无贡献。由于 x0 中大部分是完好的,根据前面的理论,网络在适当的迭代次数后,生成的图片x在模仿的过程中自然就能把缺失区域恢复出来。本文的修复效果甚至可以比肩一些专门的修复算法,效果如下:

本文方法实现图像修复(右一)
我用作者提供的代码修复过自己的图片,效果确实不错。但必须指出的是,本文的修复算法虽然使用了神经网络,但缺少数据集的训练,没有学习复杂的数据分布特征,所以肯定是无法应对复杂语义场景(如缺失人脸五官)的修复。另外,作者指出,使用层数较深的encoder-decoder架构的网络效果会更好,但是万不可添加resNet或者uNet的skip connection,这些skip connection会严重破坏修复效果,具体请参看原文。
4.3 超分辨
对于超分辨问题,退化图 x0 (H∗W∗3) 则是低分辨率图,是网络学习的目标。上采样率为t,则网络的输出 x 的尺寸为(tH∗tW∗3)。该任务中的数据项是

式中d是t倍下采样操作,注意该操作需要是设计成可微分的,否则损失无法反向传播。本文的超分辨效果也可以媲美一些现有的超分辨方法,如下:

本文方法实现超分辨(左三)
4.4 图像增强
待增强的原图为 x0 ,数据项还是设置成

迭代过程中,网络输出 x 会先捕捉到低频信息,然后逐渐学习到高频信息。我们在训练的某一个中间点停下来,那么网络将得到x0 的一个粗略估计 xc (c代表coarse),高频部分 xf (f代表fine)可以由x0−xc得到,然后再将xf加到原图x0 上便得到增强的图像 xe 。显然,网络停得越晚,xc 越接近原图,增强效果越不明显。如下图所示:

最后提一嘴,这些任务中存在一个问题——迭代次数的选择。因为网络的最终目的是冲着退化图去的,可能需要发掘一个指标来指示一下什么时候该停止迭代才能获得比较好的结果,因此迭代次数的选择是一个待解决的问题。
5 实现技术细节
这篇博客只讲解算法思想,实现细节请参看原文第四节——technical details。
6 结语
个人觉得本文提出的思想还是比较有意思的,不需要训练数据,只需要一张退化图像和一个合适的网络就能完成各种各样的图像恢复任务,第一次看到觉得蛮惊艳的。虽然实用性可能不那么强,因为图像恢复任务里有各种各样的优秀算法,一个比一个强,卷得一批。话说回来,发paper目的不应该仅限于像搞军备竞赛一样刷点、冲SOTA。而像本文一样,去揭露一些比较有意思的现象同样也能成为很好的研究。
浙公网安备 33010602011771号