简介
本文来自ICCV2017,首先说一下直观感受,论文提出了基于深度学习的模糊不变量(blur-invariant)的提取,并实现了一个端到端的去模糊网络,网络比较轻量、快速,但是从结果来看,复原效果并不能称得上非常好,效果甚至比不过《Blind Image Deblurring Using Dark Channel Prior》一文中的暗通道先验传统方法。但是文章的亮点在于:利用autoencoder学习数据先验,提取清晰图像的特征,并且用一个生成网络来生成模糊图像的特征,让判别网络来区分两个特征。当训练完毕后,生成网络学习到了模糊不变量的能力,该模糊不变量经过decoder的重建过程,可直接生成清晰图像。
网络结构
Autoencoder
autoencoder结构resblock结构不用多说了,被多次验证在图像复原里能起到非常关键的作用。如起到更快的收敛速度,更富有高频细节的复原效果,可以有更深的网络深度,但防止梯度弥散的优点。
resnet对本文网络结构的作用
看一下encoder-decoder的具体结构:
encoder-decoder具体结构
作者用到了3、4、5大小的卷积核,步长也都是2,和很多的resblock,这在2019的节点来看的话,这样的结构其实并不是最优的,目前一些基于注意力机制、小卷积核、密集残差块等的结构可能能够起到更好的作用。
GAN
比较巧妙的是,作者在提取模糊图像的特征时并未使用autoencoder,而是用了GAN,作者特意提高本文使用的时conditional-gan,这里简要阐述一下两者的区别:
传统GAN
模型G和D同时训练:固定判别模型D,调整G的参数使得log(1-D(G(z)))的期望最小化;固定生成模型G,调整D的参数使得log(D(x))+log(1-D(G(z)))的期望最大化。这个优化过程可以归结为一个“二元极小极大博弈(minimax two-player game)”问题。
条件GAN
条件生成式对抗网络(CGAN)是对原始GAN的一个扩展,生成器和判别器都增加额外信息为条件,例如类别信息,或者其他模态的数据。本文中,y是清晰图像的特征。x是条件图像(模糊图像),z是输入的随机向量。
为什么不直接用GAN做端到端的图像复原
端到端的图像复原作者尝试用现成的gan网络直接将模糊图像回归到清晰图像,结果并不好。原因如下,所以作者使用autoencoder的先验学习特性来训练gan:
- 当在更高维的数据上训练时,gan网络变得不稳定
- 当将大量不同的数据用于gan的训练时,训练会不收敛。
GAN的结构
GAN的结构判别网络中,每一个卷积层后跟着一个Leaky ReLU和BN,生成网络中,每一个卷积层后跟着一个ReLU和BN。
文中提到训练一个完美的鉴别器需要它的权值与生成器同步更新,以便它能够区分生成的样本和数据样本。对于特征空间中的鉴别器来说,这一任务变得简单可行,原因如下:
- 在特征空间中,与图像空间相比,模糊特征与干净特征之间的距离要大一些。�这有助于在初始阶段进行更快的训练。
- 特征空间的维数比图像空间的维数低得多。GANs被认为是相当有效的。
故本文中的判别器用于判别生成图像和清晰图像对应的特征。
损失函数
Autoencoder的损失函数梯度损失能够保存更多的边缘信息,恢复出更锐利的图像。
GAN的损失函数
损失的反向传播
其他
- Autoencoder的训练:
128 × 128 from the Pascal VOC 2012 dataset. The inputs were randomly corrupted with Gaussian noise (standard deviation = 0.2) 30% of the time to ensure learning of useful data representation. - 模糊图像的生成:
For creating the blurred data, we used around 10^5 kernels generated using the code provided by A. Chakrabarti. A neural approach to blind motion deblurring.
In ECCV, pages 221–235. Springer, 2016
网友评论