拍照手抖有救了!DeblurGAN 消除运动模糊效果惊人 | 附论文+代码

摘要

防抖镜头也没这么厉害。

本文转载自量子位(ID:QbitAI),编译:安妮,极客公园已获转载授权,转载请联系出处


十图九糊。

置身异国街道,感受着陌生环境里熙熙攘攘的街道,你掏出手机想留住这一刻。

好嘞,一、二、三,咔嚓。

由于行人和车辆都在运动,再加上你的手稍微抖了一抖,照片中的景象是这样的——


这样的——


和 这样的——


这是什么 AV 画质啊!


拍照时手抖,或者画面中的物体运动都会让画面模糊,女友辛辛苦苦摆好的各种 Pose 也将淹没在各种模糊的线条中,是时候要有一种新的算法解救水深火热中的你了。

近日,乌克兰天主教大学、布拉格捷克理工大学和解决方案提供商 Eleks 联手公布了一篇论文,文章标题为《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》。

这篇文章中,研究人员提出一种基于条件对抗式生成网络和内容损失(content loss)的端对端学习法 DeblurGAN,去除图像上因为物体运动而产生的模糊。

效果嘛,可以说好到让你不太相信自己的眼睛。

比如我们刚刚在异国街头拍糊了的那张,处理后变成了这样——


炉火纯青。

还不来学习一下去糊大法的手艺?


GAN 中得到灵感

回归我们的终极议题:在没有提供任何关于核(kernel)或相机的运动信息的情况下,怎样去除单张照片中的运动模糊 (Motion Blur) 呢?

这不禁让人联想起生成对抗网络(GAN),因为它能够保存高纹理细节,创建的图案又接近真实图像,所以是图像超分辨率和图像修复中的主力军。

能否将这种方法应用到消除运动模糊的工艺中呢?

可以。模糊处理可以看作是图像转化中的一个特例,研究人员提出基于条件生成式对抗网络和多元内容损失的 DeblurGAN 法。

这是种什么方法?我们继续往下看。


基本原理

因为目标是把模糊图像 IB在没有提供模糊核的情况下恢复成清晰图像 IS,因此,我们需要训练一个 CNN GθG作为生成器。每张 IB都对应着一张估计出的清晰图像 IS。此外,在训练阶段,我们将引入 critic 函数 DθD,以对抗的方式训练两个网络。

DeblurGAN 生成网络架构

从上图的架构中可以看出,DeblurGAN 包含两个 1/2 间隔的卷积单元、9 个剩余 residual 单元和两个反卷积单元。每个 ResBlock 由一个卷积层、实例归一化层和 ReLU 激活组成。

去除运动模糊的整个流程,如下图所示:


先生成运动模糊图像

想去糊,先得知道怎样将清晰图像转换成运动模糊图像,这个准备阶段也学问多多。

与超分辨率和黑白照片上色等流行的图像到图像(image-to-image)的转换问题相比,用于训练算法的清晰和模糊的图像对(image pairs)难以获取,一种典型的获取方法是用高帧频相机捕捉视频中清晰的帧模拟模糊图像。

用这种方法创建真实图片的模糊图像,会将图像空间(image space)局限在拍摄的视频中出现的场景,并将数据集变得更复杂。

根据前人的实验,研究人员提出的方法更真实地模拟了复杂的模糊核(blur kernel)。这种方法遵循了 Boracchi 和 Foi 2012 年在论文 Modeling the performance of image restoration from motion blur 中所描述的随机轨迹生成的概念,对轨迹矢量应用亚像素插值法生成核。每个轨迹矢量都是一个复杂矢量,对应着一个连续域中的二维随机运动物体的离散位置。

生成的相机运动轨迹和模糊内核以及相应的模糊图像示例

轨迹生成由马尔可夫过程完成、由算法总结。根据前一个点速度和位置、高斯摄动方程和脉冲摄动,随机生成下一个点的位置。


打造 DeblurGAN

基本思路和运动模糊生成后,可以开始着手训练模型了。

研究人员用 PyTorch 中实现了自己的所有模型,整个训练过程是在一个 Titan-X GPU 上执行三种不同的数据集。

第一个模型 DeblurGANWILD是在随机裁剪的 256x256 像素的 GoPro 数据集上训练的;第二个模型 DeblurGANSynth在用上文所介绍方法模糊过的 MS COCO 数据集上训练;此外,还有一个特殊的模型 DeblurGANComb,所用的训练集中有 2/3 是合成图像,1/3 是高帧率相机拍摄的图像。

由于它们均为全卷积模型,又是在图像 patch 上训练的,因此可以应用在任意大小的图像中。

为了进行优化,研究人员在 DθD上执行了 5 次梯度下降,在 GθG上执行了 1 次。最初生成器和判别器设置的学习速率为 10-4,经过 150 次迭代后,在接下来的有一轮 150 次迭代中将这个比率线性衰减。

6 天后,研究人员训练出一个 DeblurGAN 网络,最激动人心的部分终于来了。


开始测试!

GoPro 数据集

GoPro 数据集包含了 2103 对从不同的场景拍摄的 720p 的模糊-清晰的图像对。研究人员将模型的结果与标准指标的模型状态进行比较,并在单个 GPU 上显示每个算法的运行时间,结果如下:

GoPro 数据集测试图像的平均峰值信噪比和结构相似度

测试结果表明,DeblurGAN 在定性和定量两方面都表现出优异的结果。它可以处理由相机抖动和物体运动引起的模糊,不会受到通常的核评估方法的影响,同时参数仅为 Multi-scale CNN 的六分之一,大大加快了推理速度。

不信?那来看看 GoPro 数据集测试的去模糊图像——

GoPro 测试数据集的评估结果/从左到右:模糊图像、Nah 算法处理结果和我们算法的处理结果


Kohler 数据集

Kohler 数据集由 4 张图像组成,每张用 12 个不同的核模糊图像。这是一个标准的基准数据集,用于评价去模糊算法。数据集通过记录和分析真实的相机运动产生,并在机器人载体上回放,这样在 6D 相机运动轨迹上会留下一系列清晰的图像。

在 Kohler 基准数据集上进行的平均峰值信噪比和结构相似度测度结果


YOLO 上的目标检测基准

这项研究中还有一个小彩蛋。

研究人员探索了动态模糊对目标检测的影响,基于在预训练的 YOLO 网络上目标检测的结果,提出一种评估质量的去模糊算法的新方式。

通过用高帧率摄像机模拟相机抖动,研究人员构建了一个清晰-模糊的街景数据集。之后,对 240fps(每秒显示帧数-帧率)相机拍摄的 5 到 25 帧进行随机抽样,并计算中间帧的模糊版作为这些帧的平均值。

总体来说,数据集包括 410 对模糊-清晰图像,这些图像是从不同街道和停车场拍摄的,包含不同数量和类型的汽车。

在模糊化前后的目标检测

在 recall 和 F1 socre 上,DeblurGAN 的表现远远超过了竞争对手。



去糊宝典

你也想告别 AV 画质?

别着急,论文地址在这:

https://arxiv.org/abs/1711.07064

相关代码(PyTorch):

https://github.com/KupynOrest/DeblurGAN

打开极客公园App阅读更多内容

最新文章

极客公园

用极客视角,追踪你最不可错过的科技圈。

极客之选

新鲜、有趣的硬件产品,第一时间为你呈现。

顶楼

关注前沿科技,发表最具科技的商业洞见。