论文笔记:《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》
论文来源:arXiv2017
论文作者:Orest Kupyn,Volodymyr Budzan等
论文主要贡献:
- 提出使用DeblurGAN对模糊图像去模糊,网络结构基于cGAN和“content loss”。获得了目前最佳的去模糊效果
- 将去模糊算法运用到了目标检测上,当待检测图像是模糊的的时候,先对图像去模糊能提高目标检测的准确率
- 提出了一个新的合成模糊图像的方法
Introduction
最近,生成式对抗网络(GAN)在图像超分辨率重建、in-painting等问题上取得了很好的效果。GAN能够保留图像中丰富的细节、创造出和真实图像十分相近的图像。而在CVPR2017上,一篇由Isola等人提出的《Image-to-Image Translation with Conditional Adversarial Networks》的论文更是使用条件生成式对抗网络(cGAN)开启了“image-to-image translation”任务的大门。


本文的思想主要受近期图像超分辨率重建和“image-to-image translation”的启发,把去模糊问题当做“image-to-image translation”的一个特例。使用的网络是 image-to-image translation 论文中使用的cGAN(pix2pix)。
Proposed method:DeblurGAN的实现
给出一张模糊的图像 ,我们希望重建出清晰的图像
。为此,作者构建了一个生成式对抗网络,训练了一个CNN作为生成器
和一个判别网络
。
网络结构
整体结构如下图:


生成器CNN的结构如下图:


网络结构类似Johnson在风格迁移任务中提出的网络。作者添加了“ResOut”,即“global skip connection”。CNN学习的是残差,即 ,这种方式使得训练更快、模型泛化能力更强。
判别器的网络结构与PatchGAN相同(即 image-to-image translation 论文中采用的判别网络)。
损失函数
损失函数使用的是“content loss”和“adversarial loss”之和:


在文章实验中, 。
Adversarial loss
训练原始的GAN(vanilla GAN)很容易遇到梯度消失、mode collapse等问题,训练起来十分棘手。后来提出的“Wassertein GAN”(WGAN)使用“Wassertein-1”距离,使训练不那么困难。之后Gulrajani等提出的添加“gradient penalty”项,又进一步提高了训练的稳定性。WGAN-GP实现了在多种GAN结构上稳定训练,且几乎不需要调整超参数。本文使用的就是WGAN-GP,adversarial loss的计算式为:


Content loss
内容损失,也就是评估生成的清晰图像和ground truth之间的差距。两个常用的选择是L1(也称为MAE,mean absolute error)损失,和L2(也称为MSE)损失。最近提出了“perceptual loss”,它本质上就是一个L2 loss,但它计算的是CNN生成的feature map和ground truth的feature map之间的距离。定义如下:


其中, 表示将图像输入VGG19(在ImageNet上预训练的)后在第i个max pooling层前,第j个卷积层(after activation)输出的feature map。
表示feature map的维度。
Motion blur generation
相比其他的image-to-image translation任务,例如超分辨率和风格化,去模糊问题很难获得清晰-模糊的图像对用于训练。一种常见的办法是使用高速摄像头拍摄视频,从视频帧中获得清晰图像、合成模糊图像(详见我的另一篇文章:论文笔记:《Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring》)。另一种方法就是用清晰图像卷积上各式各样的“blur kernel”,获得合成的模糊图像。作者在现有第二种方法的基础上进一步拓展,提出的方法能够模拟更复杂的“blur kernel”。
首先,作者采用了Boracchi和Foi[1]提出的运动轨迹随机生成方法(用马尔科夫随机过程生成);然后对轨迹进行“sub-pixel interpolation”生成blur kernel。当然,这种方法也只能在二维平面空间中生成轨迹,并不能模拟真实空间中6D相机的运动。(具体细节arXiv上ver.2还没有提及,有待作者的更新)
Training Details
DeblurGAN的代码在很大程度上借鉴了pix2pix的代码,使用的框架是pyTorch。作者一共在不同数据集上训练了三个model,分别是:
:训练数据是GOPRO数据集,将其中的图像随机裁剪成256×256的patches输入网络训练
:训练数据集是MS COCO生成的模糊图像(根据上面提到的方法),同样随机裁剪成256×256的patches
:在以上两个数据集的混合数据集上训练,合成图像:GOPRO=2:1
所有模型训练时的batch size都为1。作者在单张Titan-X GPU上训练,每个模型需要6天的训练时间。
实验结果对比
GoPro数据集


上图是DeblurGAN和Nah等人提出的 Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 方法的结果对比。左侧一列是输入的模糊图像,中间是Nah等人的结果,右侧是DeblurGAN的结果。PSNR、SSIM两项指标的评估结果可以参见下表。


Kohler标准数据集


参考文献
[1]G. Boracchi and A. Foi. Modeling the performance of image restoration from motion blur. Image Processing, IEEE Transactions on, 21(8):3502 –3517, aug. 2012.