深度学习去运动模糊----《DeblurGAN》

2023-10-31

前言

现实生活中,大多数图片是模糊不清的,试想一下,追剧时视频不清晰,看着都很捉急,何况现实中好端端的一幅美景(美女也可以)被抓拍得不忍直视,瞬间暴躁!!拍照时手抖,或者画面中的物体运动都会让画面模糊,女友辛辛苦苦摆好的各种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



(上述内容都是转发别人的》
**个人感言:**个人认为DeblurGAN文章不论从题材还是创新这篇文章都足够,但是可能目前个人能力也有限,还没有达到论文中作者的实验结果,后续继续就自己实现的继续更新!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习去运动模糊----《DeblurGAN》 的相关文章

  • LINUX函数库

    Linux函数库介绍 静态库 静态库的代码在编译时就已经链接到开发人员开发的应用程序中 而共享库是在程序开始运行时被加载 共享库 在使用共享库时程序中并不包含库函数的实现代码 只是包含了对库函数的引用 因此程序代码规模较小 系统中可用的库都
  • Linux简介+详细安装虚拟机过程

    1 初学Linux 谈到Linux 自然不能忘了他们 首先是他 自由软件之父 Richard M Stallman 其次就是他 Linux之父 Linus Benedict Torvalds 老师总说这些牛人在周末的时候无聊就写写 所以 从
  • 【alert(1) to win】不完全攻略

    alert 1 to win 一个练习XSS的平台 地址 https alf nu alert1 Warmup 给出了一段JavaScript代码 function escape s return 对s没有任何校验 payload为 ale
  • 大学python笔记_天文数据处理笔记之python(1)

    前阵子学完了coursera上悉尼大学的天文数据处理课程 感觉非常适合想学习天文的python初学者所以分享出来 顺便复习一下 网课的地址一会补在评论里 所有的笔记都记录在onenote上 为了方便观看先上图片 想要复制代码的可以往下看 最
  • Facebook 架构学习

    Facebook 架构学习 网址 http www dbanotes net arch facebook arch note html 在 QCon 2008 旧金山站 上Facebook 做的这个技术分享有不少值得借鉴的东西 所以 暂停对
  • java按照模板导出pdf或者word

    一 java按照模板导出pdf 一 制作模板 1 在word里制作模板 因为PDF常用的软件不支持编辑 所以先用Word工具 如WPS或者Office新建一个空白Word文档 里面制作出自己想要的样式 2 将Word转换成PDF形式 将设置
  • 微信小程序切片工具-右滑删除效果(带视频)右滑删除效果(带视频)-史上最简单、最快的的右滑制作

    下面讲解如何进行小程序的右滑删除效果 史上最简单 最快的的右滑制作 视频及演示文件下载地址 http www ymznkf com resources view aspx id 1507 1 导入效果图 并按规则进行切片 2 设置列表的数据

随机推荐

  • 2023node期末课设-超市管理系统node+js+css+html+mysql(附下载链接)

    超市管理系统node js css html mysql 源码 数据库文件 介绍文档 点我下载项目资源 后端部分 后端用node启用了四个服务器 四个服务器分别为可以启动对应的页面 前端显示图标的数据均为数据库获取 操作数据库可以实时更改页
  • 关于mvvm简易封装(一)

    前言 关于mvvm的出现已经很长一段时间了 但是博主一直没有太过于关注 但是由于最近接触的和新出的很多框架都是基于mvvm模式去开发的 于是花了点时间看了下 关于学习mvvm前 可能需要首先了解databing 请自行百度了 介绍datab
  • 音视频造数据的路

    目录 1 多路数据制造 1 合并多路 2 视频修改分辨率 3 修改视频码率 4 修改帧率 2 音频流多声道合成 1 双声道合并单声道 2 双声道提取 3 双声道转双音频流 4 单声道转双声道 5 两路音频合并双声道 6 合并多声道 7 声道
  • 光收发器安装介绍,光纤收发器连接示意图解

    对于光纤布线来讲光纤收发器都是非常熟悉的产品了 在光纤网络中 我们常常会使用到光纤收发器 那么 在网络布线过程中光纤收发器该怎么连接呢 接下来飞畅科技的小编就来为大家介绍下光纤收发器安装以及连接图解 感兴趣的朋友一起来看看吧 一 光收发器安
  • java实现excel的导出之使用easyExcel

    前言 在我们的项目需求中 经常会遇到导出的需求 其中excel的导出最为常见 生成Excel比较有名的框架有Apache poi jxl等 但他们都存在一个严重的问题就是非常的耗内存 如果你的系统并发量不大的话可能还行 但是一旦并发上来后一
  • PCL K4PCS算法实现点云配准

    目录 一 算法原理 1 算法概述 2 算法流程 3 参考文献 二 代码实现 三 结果展示 一 算法原理 1 算法概述 K 4PCS方法主要分为两个步骤 1 利用VoxelGrid滤波器对点云进行下采样 然后使用标准方法 3D harris或
  • 通过screw生成数据库文档,支持(WORD,HTML,MD)

    文章目录 前言 一 使用步骤 基于springboot项目 1 pom xml引入 2 运行screw 3 查看文档效果 前言 你还在通过手写数据库文档吗 out了 通过screw插件一键生成数据库文档 可生成HTML WORD MD三种类
  • 串口通信(PC-51单片机)

    实验现象 下载程序后打开串口调试助手 将波特率设置为4800 选择发送的数据就可以显示 接线说明 具体接线图可见开发攻略对应实验的 实验现象 章节 注意事项 include reg52 h
  • Luci的工作流程

    1 浏览器敲入192 168 1 1后就 路由器作为uhttp server会把 www index html这个页面返回给浏览器 而且这个页面又会刷新 去请求页面 luci cgi 代码如红色标记
  • vue中使用cookies和crypto-js实现记住密码和加密

    不多BB 搞快 搞快 使用crypto js加解密 第一步 安装 npm install crypto js 第二步 在你需要的vue组件内import import CryptoJS from crypto js 第三步 使用 Encry
  • 【Idea技巧】01.Idea无法打开,报错 Start Failed

    序章 个人使用Idea版本 借鉴文章 添加链接描述 解决方案 管理员命令cmd netsh int ipv4 set dynamicport tcp start 49152 num 16383 netsh int ipv4 set dyna
  • 怎么用计算机计算年月份,如何使用Excel计算两个日期之间的月数?

    一 这可以通过DATEDIF函数完成 二 DATEDIF函数的定义 DATEDIF函数是Excel中的隐藏函数 而不是帮助和插入公式中的隐藏函数 返回两个日期之间的年 月 日间隔的数量 DATEDIF函数通常用于计算两个日期之间的时差 语法
  • Windows11之QT开发框架超详细下载安装与使用教程

    文章目录 前言 3 1 QT开发框架下载 3 2 QT开发框架安装 3 3 QT开发框架使用 总结 前言 本博客的主要内容为在Windows11系统下的QT开发框架的下载安装与使用教程 QT开发框架开发C 图形化界面十分有用 读者跟着我一步
  • 球坐标系下梯度、散度、旋度和拉普拉斯的简单计算

    转载于 https www cnblogs com hiramlee0534 p 5480045 html
  • 七天玩转Redis

    一 简要了解 redis是一个key value存储系统 和Memcached类似 它支持存储的value类型相对更多 包括string 字符串 list 链表 set 集合 zset sorted set 有序集合 和hash 哈希类型
  • ELK系列(九)、配置ES和Kibana的用户密码

    前面介绍的都是没有设置密码的情况 ES默认没有密码 什么数据泄露的新闻简直是家常便饭 所以这里还是建议大家给ES和kibana设置用户登陆 或者使用nginx限制IP或用户访问 本文介绍ELK自带的创建用户的方式 ELK系列 一 安装Ela
  • CSDN编程竞赛第六期

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 本次是我第二次参加CSDN举办的编程竞赛 这一次的题相比上一次简单不少 对编程新人或者刚开始学习算法的人很友好 前言 背景 本次CSDN编程
  • 服务器管理系统是什么

    服务器管理系统是什么 服务器管理系统 是在操作系统下对操作系统的服务器软件及其相关软件进行二次设置的管理软件 是运营商管理域名 服务器 企业邮局 数据库等服务器主机类产品的一个网站平台 以达到快捷实现域名 服务器主机 企业邮局 数据库等产品
  • C#连接数据库SQlServer+Form窗格实现简单动态增删查改操作

    C 连接数据库SQlServer Form窗格实现简单动态增删查改操作 一 数据库连接 数据库连接部分学习自该博主原创博客 点击即可跳转 再附上该博主的博客链接 https blog csdn net kiss soul article d
  • 深度学习去运动模糊----《DeblurGAN》

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