图像去模糊代码 python_用Keras搭建GAN:图像去模糊中的应用(附代码)

雷锋网 (公众号:雷锋网) 按:本文为 雷锋字幕组 编译的技术博客,原标题GAN with Keras: Application to Image Deblurring,作者为Raphaël Meudec。

翻译 | 廖颖  陈俊雅  整理 | 凡江

2014年 Ian Goodfellow 提出了 生成对抗网络(GAN) 。这篇文章主要介绍在 Keras 中 搭建GAN实现图像去模糊 。所有的Keras代码可点击 这里 。

快速回忆生成对抗网络

GAN中两个网络的训练相互竞争。生成器( generator) 合成具有说服力的假输入 来误导判别器(discriminator ),而判别器则是来 识别这个输入是真的还是假的 。

生成对抗网络训练过程— 来源

训练过程主要有三步

根据噪声,生成器 合成假的输入

用真的输入和假的输入 共同训练判别器

训练整个模型:整个模型中判别器与生成器连接

注意:在第三步中,判别器的权重是固定的

将这两个网络连接起来是由于生成器的输出没有可用的反馈。 我们唯一的准则就是看判别器是否接受生成器的合成的例子。

这些只是对生成对抗网络的一个简单回顾,如果还是不够明白的话,可以参考 完整介绍 。

数据

Ian Goodfellow首次使用GAN模型是生成MNIST数据。 而本篇文章是 使用生成对抗网络进行图像去模糊 。因此生成器的输入不是噪声,而是模糊图像。

数据集来自 GOPRO数据 ,你可以下载 精简版数据集 (9GB),也可以下载 完整版数据集 (35GB)。其中 包含了来自不同街道视角的人造模糊图像 ,根据不同的场景将数据集分在各个子文件夹中。

我们先把图像分到 A (模糊)和 B (清晰)两个文件夹。这个 A&B 结构对应于原始文章 pix2pix 。我创建了一个 自定义脚本来执行这个任务。 看看 README 后尝试一下吧。

模型

训练过程还是一样,首先来看一下神经网络结构。

生成器

生成器要生成清晰图像,网络是基于 ResNet blocks 的,它可以记录对原始模糊图像操作的过程。原文还使用了基于 UNet 的版本,但我目前还没有实现。这两种结构都可以很好地进行图像去模糊。

DeblurGAN 生成器网络 结构 — 来源

核心是采用 9 个ResNet blocks 对原始图像进行上采样。来看一下Keras上的实现!

ResNet 层就是一个基本的卷积层,其中,输入和输出相加,形成最终输出。

生成器结构的 Keras 实现

按照计划,用9个ResNet blocks对输入进行上采样。我们 在输入到输出增加一个连接 ,然后除以2 来对输出进行归一化。

这就是生成器了! 我们再来看看判别器的结构吧。

判别器

判别器的目标就是要确定一张输入图片是否为合成的。因此判别器的结构采用卷积结构,而且是一个 单值输出 。

判别器结构的 Keras 实现

最后一步就是建立完整的模型。 这个GAN的一个特点 就是输入的是真实图片而不是噪声 。因此我们就有了 一个对生成器输出的直接反馈 。

接下来看看采用两个损失如何充分利用这个特殊性。

训练

损失

我们提取生成器最后和整个模型最后的损失。

第一个是 感知损失 ,根据生成器输出直接可以计算得到。第一个损失保证 GAN 模型针对的是去模糊任务。 它比较了VGG第一次卷积的输出 。

第二个损失是对整个模型输出计算的 Wasserstein loss , 计算了两张图像的平均差值 。众所周知,这种损失可以提高生成对抗网络的收敛性。

训练流程

第一步是加载数据并初始化模型。我们使用自定义函数加载数据集,然后对模型使用 Adam 优化器。我们设置 Keras 可训练选项来防止判别器进行训练。

然后我们进行epochs(一个完整的数据集通过了神经网络一次并且返回了一次的过程,称为一个epoch),并将整个数据集分批次(batches)。

最后根据两者的损失,可以相继训练判别器和生成器。用生成器生成假的输入,训练判别器区别真假输入,并对整个模型进行训练。

你可以参考 Github 来查看完整的循环。

实验

我使用的是在 AWS 实例(p2.xlarge)上配置深度学习 AMI (version 3.0)进行的 。对 GOPRO 精简版 数据集的训练时间大约有 5 个小时(50个epochs)。

图像去模糊结果

从左到右:原始图像,模糊图像,GAN 输出

上面的输出结果都是我们用 Keras 进行 Deblur GAN 的结果。即使是对高度模糊,网络也可以减小模糊,产生一张具有更多信息的图片,使得车灯更加汇聚,树枝更加清晰。

左图: GOPRO 测试图像,右图:GAN 输出结果

因为引入了VGG来计算损失,所以会产生图像顶部出现感应特征的局限。

左图: GOPRO 测试图像,右图:GAN 输出结果

希望你们可以喜欢这篇关于生成对抗网络用于图像去模糊的文章。 你可以评论,关注我或者 联系我 。

如果你对机器视觉感兴趣,我们还写过一篇用Keras实现 基于内容的图像复原 。下面是生成对抗网络资源的列表。

左图: GOPRO 测试图像,右图:GAN 输出结果

生成对抗网络资源

更多文章,关注雷锋网 雷锋网雷锋网

添加雷锋字幕组微信号(leiphonefansub)为好友

备注「我要加入」,To be an  AI  Volunteer !

雷锋网原创文章,未经授权禁止转载。详情见 转载须知 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序动态class_会后剧透!百度智能小程序的最新动态都在这儿了!

月活突破5亿,入驻智能小程序数量42万。这是百度智能小程序在万象-百度2020移动生态大会上交出的最新成绩单。当天,百度方面还以“生态进化,共创共荣”为主题,召开了智能小程序分论坛。分论坛上,百度特别邀请了百度副总…

matlab qtdecomp,Opencv图像识别从零到精通(25)------区域分裂与合并

区域分割一般认为有漫水填充,区域分裂与合并,分水岭,这篇是中间的区域分裂和合并。区域分裂合并算法的基本思想是先确定一个分裂合并的准则,即区域特征一致性的测度,当图像中某个区域的特征不一致时就将该区域分裂成4个相等的子区域,当相邻的…

去调频体制下的 rd算法_【技术文章】一次调频工作原理及控制 学习1+1

1、基本概念一次调频:PrimaryFrequencyControl。在电网实际运行中,当电量消耗与电量供给不匹配时,即可引起电网频率出现变化较小、变动周期较短的微小分量,这种频率扰动主要靠汽轮发电机组本身的调节系统直接自动调整汽轮机调门完…

tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...

TinyXML-2 是一个用 C 开发的小巧、高效的 XML 解析工具,它在 GitHub 网站上的链接为:https://github.com/leethomason/tinyxml2 。它的结构非常精简,仅由 tinyxml2.h 和 tinyxml2.cpp 两个文件组成。TinyXML-2 能够处理 UTF-8 编码方式的 XM…

矩阵特征值的用matlab,[急求]谁可以用matlab帮我运行求矩阵特征值的命令???...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼v Columns 1 through 60.0529 0.0228 - 0.0573i 0.0228 0.0573i 0.0222 0.0630i 0.0222 - 0.0630i -0.0630 0.0105i0.2249 -0.0870 0.2003i -0.0870 - 0.2003i 0.1077 0.2366i 0.1077 - 0.2366i 0.1861 0.0350i0.0977 -0.082…

蓝牙版本avrcp怎么选_500元内无线蓝牙耳机测评年轻人的第一款廉价蓝牙耳机怎么选?...

这是马克君的第 90 篇对比测评-建议佩戴耳机体验-?- 10款TWS耳机测评 -TWSTrue Wireless Stereo⇩真无线立体声自AirPods问世以来,真无线耳机的概念开始爆火?。虽然AirPods“真香”,但售价也是真滴贵,所以有没有便宜又好用的真无线蓝牙耳机…

kb4023057安装失败_微软重发Win10 KB4023057 补丁,推动Win10更新

8月29日早间消息:微软已经重新发布了Win10补丁KB4023057,其主要帮助用户升级到 Win10 2004或更新版本。微软表示,重新发布的补丁对 Windows Update 本身的可靠性进行了改进。此外,它还可以通过压缩用户目录中的文件来释放计算机上…

数据库查询语句慢如何优化_常见Mysql的慢查询优化方式

1 概念 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。 具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。 long_query_time的默…

pytorch中深度拷贝_pytorch:对比clone、detach以及copy_等张量复制操作

pytorch提供了clone、detach、copy_和new_tensor等多种张量的复制操作,尤其前两者在深度学习的网络架构中经常被使用,本文旨在对比这些操作的差别。1. clone返回一个和源张量同shape、dtype和device的张量,与源张量不共享数据内存&#xff0c…

php显示doc文件乱码,如何解决php doc 乱码问题

PHP下载DOC乱码最近做的一个系统,需要下载doc文件以前的代码下载完成后,打开总是乱码...google咯很久也没有解决办法后面总算搞定必须在Header之前进行清除,即 ob_end_clean()$file_size filesize($logName);ob_end_clean();header("Content-type:application/octet-stre…

c++ 多重背包状态转移方程_Python|动态规划关于0-1背包问题

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理以下文章来源于腾讯云,作者:算法与编程之美前言对学算法的同学来说,动态规划是其必学且较为重要的问题之一;…

golang string转int8_golang 中string和int类型相互转换

Notepad++ 默认快捷键Notepad绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad默认的快捷键做个整理(其中有颜色的为常用招数): 1 ...DB2执行脚本经常会遇到数据库脚本放在.sql文件中,那么怎么去执…

java 第二天,Java复习第二天

1.idea里jar包和war的区别JAR(JAVA Archive 是类的归档文件),JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。简单来说,jar包就像一个插件而且是打包已经写好的类…

qlistview 自定义控件_是否可以在QListView中添加自定义窗口小部件?

I have a large log data (100, 1000, 100000, ... records) and I want to visualize it in the following manner:Which widget (e.g. QListView, QListWidget) should I use and how, in order to stay away from performance and memory problems?解决方案Is it possible …

php 零宽断言,正则表达式之零宽断言实例详解

这篇文章主要介绍了正则表达式之零宽断言,简单介绍了零宽断言的概念、分类及php实现技巧与相关注意事项,需要的朋友可以参考下本文实例讲述了正则表达式之零宽断言。分享给大家供大家参考,具体如下:前言之前我曾写了一篇关于正则表达式的文章(http://www…

element ui 多个子组件_vue前端UI框架,一点都不圆润,盘它!

面对众多vue前端UI框架,看着它们干干巴巴、麻麻赖赖的样子,一点都不圆润,跟我一起盘它!Vue移动端UI框架1、Vux(star:15620)VUX(读音 [v’ju:z],同 views)是基于WeUI和Vue(2.x)开发的…

ios 裁剪圆形头像_iOS开发之裁剪圆形头像

- (void)viewDidLoad {[super viewDidLoad];//加载图片UIImage *image [UIImage imageNamed:"菲哥"];//获取图片尺寸CGSize size image.size;//开启位图上下文UIGraphicsBeginImageContextWithOptions(size, NO, 0);//创建圆形路径UIBezierPath *path [UIBezierPa…

python 图像处理_Python中的十大图像处理工具

文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。来源 | 大数据文摘(BigDataDigest)编译 | 张秋玥、小七、蒋宝尚本文主要介绍了一些简单易懂最常用的 Python 图像处理库。当今世界充满了各种数据&am…

php函数方法,基于PHP函数的操作方法

如下所示://简单函数function show(){echo "hello";}show();//有参数的函数function show($a){echo "$a";}show("world");//有返回值的函数function show(){return "小V,你好!";}echo show();functi…

centos7安装php5.2yum源操作_Centos7.6使用yum安装PHP7.2

Centos7.6使用yum安装PHP7.21、安装源安装php72w,是需要配置额外的yum源地址的,否则会报错不能找到相关软件包。php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic。如果跳过epel-relea…