十图九糊。
置身异国街道,感受着陌生环境里熙熙攘攘的街道,你掏出手机想留住这一刻。
好嘞,一、二、三,咔嚓。
由于行人和车辆都在运动,再加上你的手稍微抖了一抖,照片中的景象是这样的——
这样的——
和 这样的——
这是什么AV画质啊!
拍照时手抖,或者画面中的物体运动都会让画面模糊,女友辛辛苦苦摆好的各种Pose也将淹没在各种模糊的线条中,是时候要有一种新的算法解救水深火热中的你了。
近日,乌克兰天主教大学、布拉格捷克理工大学和解决方案提供商Eleks联手公布了一篇论文,文章标题为《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》。
这篇文章中,研究人员提出一种基于条件对抗式生成网络和内容损失(content loss)的端对端学习法DeblurGAN,去除图像上因为物体运动而产生的模糊。
效果嘛,可以说好到让你不太相信自己的眼睛。
比如我们刚刚在异国街头拍糊了的那张,处理后变成了这样——
炉火纯青。
还不来学习一下去糊大法的手艺?
回归我们的终极议题:在没有提供任何关于核(kernel)或相机的运动信息的情况下,怎样去除单张照片中的运动模糊(Motion Blur)呢?
这不禁让人联想起生成对抗网络(GAN),因为它能够保存高纹理细节,创建的图案又接近真实图像,所以是图像超分辨率和图像修复中的主力军。
能否将这种方法应用到消除运动模糊的工艺中呢?
可以。模糊处理可以看作是图像转化中的一个特例,研究人员提出基于条件生成式对抗网络和多元内容损失的DeblurGAN法。
这是种什么方法?我们继续往下看。
因为目标是把模糊图像IB在没有提供模糊核的情况下恢复成清晰图像IS,因此,我们需要训练一个CNN GθG作为生成器。每张IB都对应着一张估计出的清晰图像IS。此外,在训练阶段,我们将引入critic函数DθD,以对抗的方式训练两个网络。
从上图的架构中可以看出,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中所描述的随机轨迹生成的概念,对轨迹矢量应用亚像素插值法生成核。每个轨迹矢量都是一个复杂矢量,对应着一个连续域中的二维随机运动物体的离散位置。
轨迹生成由马尔可夫过程完成、由算法总结。根据前一个点速度和位置、高斯摄动方程和脉冲摄动,随机生成下一个点的位置。
基本思路和运动模糊生成后,可以开始着手训练模型了。
研究人员用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数据集包含了2103对从不同的场景拍摄的720p的模糊-清晰的图像对。研究人员将模型的结果与标准指标的模型状态进行比较,并在单个GPU上显示每个算法的运行时间,结果如下:
测试结果表明,DeblurGAN在定性和定量两方面都表现出优异的结果。它可以处理由相机抖动和物体运动引起的模糊,不会受到通常的核评估方法的影响,同时参数仅为Multi-scale CNN的六分之一,大大加快了推理速度。
不信?那来看看GoPro数据集测试的去模糊图像——
Kohler数据集由4张图像组成,每张用12个不同的核模糊图像。这是一个标准的基准数据集,用于评价去模糊算法。数据集通过记录和分析真实的相机运动产生,并在机器人载体上回放,这样在6D相机运动轨迹上会留下一系列清晰的图像。
这项研究中还有一个小彩蛋。
研究人员探索了动态模糊对目标检测的影响,基于在预训练的YOLO网络上目标检测的结果,提出一种评估质量的去模糊算法的新方式。
通过用高帧率摄像机模拟相机抖动,研究人员构建了一个清晰-模糊的街景数据集。之后,对240fps(每秒显示帧数-帧率)相机拍摄的5到25帧进行随机抽样,并计算中间帧的模糊版作为这些帧的平均值。
总体来说,数据集包括410对模糊-清晰图像,这些图像是从不同街道和停车场拍摄的,包含不同数量和类型的汽车。
在recall和F1 socre上,DeblurGAN的表现远远超过了竞争对手。
你也想告别AV画质?
别着急,论文地址在这:
https://arxiv.org/abs/1711.07064
相关代码(PyTorch):
https://github.com/KupynOrest/DeblurGAN
— 完 —
加入社群
量子位AI社群11群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot4入群;
此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。
进群请加小助手微信号qbitbot4,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态