论文笔记:《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》

论文笔记:《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》

27 人 赞同了该文章

论文来源:arXiv2017

论文作者:Orest Kupyn,Volodymyr Budzan等

下载链接:PDF | github

论文主要贡献:

  • 提出使用DeblurGAN对模糊图像去模糊,网络结构基于cGAN和“content loss”。获得了目前最佳的去模糊效果
  • 将去模糊算法运用到了目标检测上,当待检测图像是模糊的的时候,先对图像去模糊能提高目标检测的准确率
  • 提出了一个新的合成模糊图像的方法

Introduction

最近,生成式对抗网络(GAN)在图像超分辨率重建、in-painting等问题上取得了很好的效果。GAN能够保留图像中丰富的细节、创造出和真实图像十分相近的图像。而在CVPR2017上,一篇由Isola等人提出的《Image-to-Image Translation with Conditional Adversarial Networks》的论文更是使用条件生成式对抗网络(cGAN)开启了“image-to-image translation”任务的大门。

Example results on several image-to-image translation problems.

本文的思想主要受近期图像超分辨率重建和“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,分别是:

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

编辑于 2018-01-15
生成对抗网络(GAN)
计算机视觉
深度学习(Deep Learning)
赞同 27​ 22 条评论
分享
收藏
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值