DeblurGAN 进行去运动模糊

DeblurGAN 进行去运动模糊

原论文:《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》
论文作者:Orest Kupyn,Volodymyr Budzan等
链接:link
原作者的github:link

DeblurGAN的创新

它是端到端的去模糊方法,基于的是conditional GAN和内容损失。
四点创新:
一是利用目标检测来评估去模糊质量。
二是提出一种随机轨迹生成的方法将一张图像变模糊,从而取得清 晰模糊的图像对用于训练。
三就是所提出的deblurGAN架构。
四是提出一种感知损失,和对抗损失共同组合成损失函数。

简介

它是基于单个图像进行盲去模糊,GAN(generative adversarial network)生成的图像具有的很高的纹理细节特征。
图像的模糊可以看成是图像和卷积核的卷积再加上加性噪声。
DeblurGAN 进行去运动模糊
以前传统的方法是估计卷积核,然后采用反卷积操作来恢复图像,而深度学习给去模糊开辟了一条直接去模糊的道路。
GAN的相关知识点,读者如不懂可自行查阅资料。其目标是生成器G和鉴别器 D 之间的游戏最小极大目标
DeblurGAN 进行去运动模糊

算法介绍

DeblurGAN 进行去运动模糊

损失函数

损失函数表示为内容损失和对抗损失之和
DeblurGAN 进行去运动模糊
λ在所有实验中等于 100。 与 Isola 等人不同,不对鉴别器进行条件限制,因为我们不需要惩罚输入和输出之间的不匹配。 对抗性损失大多数与条件性 GAN 相关的 论文使用 VanillaGAN 目标作为损失 [25]函数。 最近提供了一种使用最小方形 GAN [23]的替代方法,它更 稳定并产生更高质量的结果。 我们使用 WGAN-GP [11]作 为判别函数,它被证明对生成器架构的选择是稳健的。 我们使用不同架构的预先实验证实了这些结果,我们能够使 用比 ResNet152 轻得多的架构,请参阅下一小节。 损 失计算如下:
DeblurGAN 进行去运动模糊
内容损失,内容损失函数的两个经典选择是 L1 或 MAE 丢失,原始像素上的 L2 或 MSE 损失。 由于像素空间中可 能的解决方案的像素平均值,使用这些函数作为唯一的优化 目标导致生成的图像上的模糊伪像。 相反,我们采用了 最近提出的感知损失。 感知损失是一种简单的 L2 丢 失,但是基于生成的和目标图像 CNN 特征图的差异。 它定 义如下:
DeblurGAN 进行去运动模糊
深层的网络信息代表更高层次的抽象,而我们侧重于恢复一般性的内容,所以采用conv3,3的特征图。对抗性损失则侧重于恢复纹理细节。(我们仍增加额外的正则化)

网络架构

DeblurGAN 进行去运动模糊
它包含两个带有步幅 1/2 的跨步卷积块,九个残余块(ResBlocks)和两个转置卷积块。每个 ResBlock 由卷积层,实例标准化层和 ReLU**层组成。在每个 ResBlock 中的第一个卷积层之后添加概率为 0.5 的丢失正则化。另外,附含有被称为 ResOut 的全局跳过连接。 CNN 学习模糊图像 IB 的残差 校正 IR,因此 IS = IB + IR。我们发现这样的公式使得训练 更快,并且使得模型更好地收敛。在训练阶段,我们定义了 一个判别器网络 D,它是 Wasserstein GAN ,带有梯度惩罚,我们称之为 WGAN-GP。判别网络的架构与 PatchGAN 相同。除了最后一层之外的所有卷积层后 面都是 InstanceNorm 层,LeakyReLU的参数α=0.2。

随机轨迹生成数据集

存在多种方法来生成清晰模糊的图像对,一种是通过多帧视频来提取模糊的图像,但是提取的图像局限于视频中的图像,一种是通过视频中的清晰图像与周围的图像取平均值来获取模糊图像。还有一种就是通过模糊核来与清晰图像进行卷积从而达到模糊的目的。文中提出一种生成模糊核的方法,它遵循 Borac-chi 和 Foi 描述的随机轨迹生成的想法。 然后通过将子像素 插值应用于轨迹矢量来生成核。 每个轨迹矢量是复值矢量,其对应于在连续域中的 2D 随机运动之后的对象的离散 位置。 轨迹生成是通过马尔可夫过程完成的,总结在算法 1 中。轨迹的下一个点的位置是基于先前的点速度和位置,高斯扰动,脉冲扰动和确定性惯性分量随机生成的。
算法如下:
DeblurGAN 进行去运动模糊

训练过程

数据集

[1] :训练数据是GOPRO数据集,将其中的图像随机裁剪成256×256的patches输入网络训练
[2] :训练数据集是MS COCO生成的模糊图像(根据上面提到的方法),同样随机裁剪成256×256的patches
[3] :在以上两个数据集的混合数据集上训练,合成图像:GOPRO=2:1

具体的训练过程以及细节参考原文