《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》论文阅读之DeblurGAN

2023-11-09

前言

现实生活中,大多数图片是模糊不清的,试想一下,追剧时视频不清晰,看着都很捉急,何况现实中好端端的一幅美景(美女也可以)被抓拍得不忍直视,瞬间暴躁!!拍照时手抖,或者画面中的物体运动都会让画面模糊,女友辛辛苦苦摆好的各种Pose也将淹没在各种模糊的线条中,是时候要有一种新的算法解救水深火热中的你了。

这不,去年(2017)乌克兰天主教大学、布拉格捷克理工大学和解决方案提供商Eleks联手公布了一篇论文,文章标题为《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》。目前文章已更新,2018。

这篇文章中,研究人员提出一种基于条件对抗式生成网络和内容损失(content loss)的端对端学习法DeblurGAN,去除图像上因为物体运动而产生的模糊。今天我们不看美图,且之论学术。大致聊一聊这个去模糊的过程。

Introduction

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

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

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

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

最近,生成式对抗网络(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的实现原理

给出一张模糊的图像 I_{b} ,我们希望重建出清晰的图像 I_{s} 。为此,作者构建了一个生成式对抗网络,训练了一个CNN作为生成器 G_{\theta_{G}} 和一个判别网络 D_{\theta_{D}} 。

网络结构

生成器CNN的结构如下图:


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


去除运动模糊的整个流程(网络结构),如下图所示:



网络结构类似Johnson在风格迁移任务中提出的网络。作者添加了“ResOut”,即“global skip connection”。CNN学习的是残差,即 I_{S}=I_{B}+I_{R} ,这种方式使得训练更快、模型泛化能力更强。

判别器的网络结构与PatchGAN相同(即 image-to-image translation 论文中采用的判别网络)。

损失函数

损失函数使用的是“content loss”和“adversarial loss”之和:

在文章实验中,\lambda=100 。

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之间的距离。定义如下:

其中, \phi_{i,j} 表示将图像输入VGG19(在ImageNet上预训练的)后在第i个max pooling层前,第j个卷积层(after activation)输出的feature map。 W_{i,j} , H_{i,j} 表示feature map的维度。

Motion blur generation

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

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

用这种方法创建真实图片的模糊图像,会将图像空间(image space)局限在拍摄的视频中出现的场景,并将数据集变得更复杂。另一种方法就是用清晰图像卷积上各式各样的“blur kernel”,获得合成的模糊图像。作者在现有第二种方法的基础上进一步拓展,提出的方法能够模拟更复杂的“blur kernel”。

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


首先,作者采用了Boracchi和Foi[1]提出的运动轨迹随机生成方法(用马尔科夫随机过程生成);然后对轨迹进行“sub-pixel interpolation”生成blur kernel。当然,这种方法也只能在二维平面空间中生成轨迹,并不能模拟真实空间中6D相机的运动。

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

Training Details

DeblurGAN的代码在很大程度上借鉴了pix2pix的代码,使用的框架是pyTorch。作者一共在不同数据集上训练了三个model,分别是:

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

所有模型训练时的batch size都为1。作者在单张Titan-X GPU上训练,每个模型需要6天的训练时间。

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

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


实验结果对比

GoPro数据集

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



上图是DeblurGAN和Nah等人提出的 Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 方法的结果对比。左侧一列是输入的模糊图像,中间是Nah等人的结果,右侧是DeblurGAN的结果。


Kohler标准数据集

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





YOLO上的目标检测基准

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

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

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

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







论文主要贡献:

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


论文来源:arXiv2017

论文作者:Orest Kupyn,Volodymyr Budzan等

下载链接:PDF | github


参考链接:

1.https://blog.csdn.net/yh0vlde8vg8ep9vge/article/details/78641844

2.https://zhuanlan.zhihu.com/p/32260634



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》论文阅读之DeblurGAN 的相关文章

随机推荐

  • Ubuntu 安装 cuDNN(附测试)

    为深度学习所用 博主预想在Ubuntu16 04上安装 显卡驱动 CUDA cuDNN Tensorflow gpu Keras PyCharm 参考了众多资料 最终成功将所有软件安装完毕 且能成功运行使用 该篇博客介绍了cuDNN的安装教
  • 相机畸变+张正友标定(含源代码)

    希望2022能够自主学习 本文狠狠的借鉴了 相机标定之张正友标定法数学原理详解 含python源码 知乎和最详细 最完整的相机标定讲解 a083614的专栏 CSDN博客 相机的标定 非常感谢 只供自我学习 不做他用 我们知道了相机是如何成
  • Collection集合的三种初始化方法

    一 java容器可以分为两大类 1 Collection其中包括List Set Queue 2 Map 二 Arrays asList 方法 接受一个数组或一个逗号分隔的元素列表 并将其转化为Lists对象 三 1 构造器方法 Colle
  • UVC摄像头-学习

    多摄像头拍摄实现 从人脸识别入手 已经实现打开双uvc摄像头 需要支持UVC 支持USB OTG接口驱动 通过OTG扩展多个USB接口 应用层调用JNI函数 可以实现实时显示 图像拍摄 视频录制等功能 UVCCamera 听名字就知道使用U
  • 入门靶机渗透之Me And My Girlfriend

    靶场介绍 靶场下载地址 点击进入下载界面 下载 ova文件 在VMware中导入该虚拟机 导入完成后开启虚拟机 这个靶场背景告诉我们有一对恋人 即 Alice 和 Bob 这对情侣原本很浪漫 但自从 Alice 在一家私人公司 Ceban
  • Arduino IDE编译烧写ESP32 CAM

    一 安装Arduino IED 到官网下载IDE 二 安装ESP32 工具 打开菜单 文件 首选项 在设置页 附加开发板管理器网址 添加 https dl espressif com dl package esp32 index json
  • 异常检测的总结性介绍

    1 异常检测 1 1 什么是异常值 在机器学习中 异常检测和处理是一个比较小的分支 或者说 是机器学习的一个副产物 因为在一般的预测问题中 模型通常是对整体样本数据结构的一种表达方式 这种表达方式通常抓住的是整体样本一般性的性质 而那些在这
  • 练习四、把数组扁平;获取页面所用标签,并去重

    功能描述 题目一 将多层嵌套数组降低层级 比如 1 2 3 0 4 5 10 200 3 扁平到 1 2 3 0 4 5 10 200 3 题目二 获取页面所用标签 比如应含有html多种标签 并且去重 主要考点 题目一 判断是否为数组的方
  • Activity启动流程详解

    普通Activity创建也就是平常我们在代码中采用startActivity Intent intent 方法来创建Activity的方式 总体流程如下图 启动过程设计到两个进程 本地进程和系统服务进程 本地进程也就是我们的应用所在进程 系
  • 蓝桥 小明的游戏 反nim 博弈论

    题目描述 蓝桥公司给他们的员工准备了丰厚的奖金 公司主管小明并不希望发太多的奖金 他想把奖金留给智慧的人 于是他决定跟每一个员工玩一个游戏 规则如下 桌面上一共有 n 堆一元钱 双方轮流行动 由小明先行动 每次行动从某一堆钱中拿走若干元 至
  • 刷脸支付服务商的到来彻底将其颠覆

    互联网技术的发展 人工智能的不断升级 人们的生活正在变得越来越便捷 刷脸支付的优势就是体验度较好 用户较易接受 由于人脸识别根据摄像头的提高而提高 而且算法的改进会让刷脸核验在极短时间内完成 让用户觉得这技术很很便捷 而指纹 虹膜由于更多地
  • 活动回顾|多模态 AI 开发者的线下聚会@深圳站(内含福利)

    回顾来了 4 月 22 日 由 Jina AI 和 OpenMMLab 联合主办的 多模态 AI Office Hours 深圳站圆满结束 迎来了将近 60 位开发者的热情参与 现场不仅有别开生面的 开发者集市 供大家打卡赢取好礼 更有四场
  • 2023华为OD机试Python【最接近中位数的索引】

    前言 本题使用Python解答 如果需要Java版本答案 请参考以下链接 点击此处跳转 题目 假设我们有一个数组X和正整数K 满足以下表达式 X i x i 1 X i K 1 结果最接近于数组中位数的下标i 如果有多个i满足条件 请返回最
  • SuspendThread 造成程序死锁的一个例子

    msdn对SuspendThread 的说明 This function is primarily designed for use by debuggers It is not intended to be used for thread
  • 从零开始学GitHub【第三篇】

    GitHub 需要搭梯子么 印象中 GitHub 之前确实总是断断续续的访问不了 不过在13年初的时候有段时间最严重 一度被封了 当时李开复老师再也忍无可忍 公开发了一条抗议 GitHub 被封的微博 这事我印象很深 因为我是12年底加入的
  • Qt关于lineEdit的输入格式设置

    设置提示文字 ui gt lineEdit gt setPlaceholderText 联机游戏欢乐多 仅能输入整数 无限制 ui gt lineEdit gt setValidator 0 仅能输入整数 ui gt lineEdit gt
  • 移动端页面适配

    目录 一 移动端页面适配 1 什么是移动端页面适配 2 移动端页面适配的设计方向 二 0 适配 1 简介 2 缺陷 三 等比缩放 1 viewport 缩放方案 2 动态 REM 方案 3 VW 适配方案 4 适配方案对比 四 相对单位 e
  • 零基础想转行Python?新手应该注重学习哪方面的技术?

    大家都用Python做什么 做网站后台 有大量的成熟的框架 如django flask bottle tornado 写网络爬虫 Python写爬虫很简单 库很健全 科学计算 参加数学建模大赛 完全可以替代r语言和MATLAB 数据挖掘 机
  • mybatis sql xml文件读取源码分析

    在执行一个自定义sql语句时 dao对应的代理对象时如何找到sql 也就是dao的代理对象和sql之间的关联关系是如何建立的 在mybatis中的MybatisPlusAutoConfiguration类被 Configuration注解
  • 《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》论文阅读之DeblurGAN

    前言 现实生活中 大多数图片是模糊不清的 试想一下 追剧时视频不清晰 看着都很捉急 何况现实中好端端的一幅美景 美女也可以 被抓拍得不忍直视 瞬间暴躁 拍照时手抖 或者画面中的物体运动都会让画面模糊 女友辛辛苦苦摆好的各种Pose也将淹没在