python 马赛克还原_卷积神经网络教你如何还原被马赛克的文本图像

对人类来说,将带有文字的图像锐化是很容易的。以图1为例。

图1:被锐化的图像

把图1恢复为图2也不是件很困难的事。

图2:原图

然而,我们是懒惰的,并且不想这样做,所以我们尝试用神经网络来自动实现图片的不模糊化!

发展

得到被模糊的文本的实图和它们的不模糊的副本是不容易的,因此在时间的兴趣中产生了一个训练集。生成文本图像并将它用计算机软件进行模糊处理是很简单的,一个python脚本利用PIL(python图片库)就可以完成。训练集的大小可以储存10.000张图片。训练集的例子可以在图3中找到。

图3:训练集的例子。上一行显示输入图像,而下一行显示输出目标。

让Fθ成为不模糊图像神经网络,Y1,Y2,…,Yn成为图像,然后X1,X2,…,Xn作为模糊的副本。我们为神经网络找到参数θ,该神经网络最小化了每个图像的每个像素的均方差。

为了解决这一问题,我们尝试了两种Fθ的架构。然而,它们都是某种形式的卷积神经网络。

第一个架构尝试的是一些卷积层,它们具有相同的输入和输出维度,也就是说,当在tf.conv2d函数中填充 “SAME”设置时,才会得到结果。然而,中间层的通道数量并不是固定的。在层间,除了最后一层使用的是一个被激活的正常的ReLU,LeakyReLU被用作激活函数。由此来看,这个结构不能很好的运作。

图4:左列:模糊的图像,中间的列:目标输出,右列:输出的图像

看看图4中神经网络的输出,它只是简单地学习了恒等函数。这似乎是成本函数(cost function)的一个局部极小值。改变层数,改变激活函数,改变成本函数和改变中间通道的数量,对网络收敛没有任何影响,但局部极小值不能以这种方式被避免。因此, 我们需要重新设计。

卷积层被允许缩小图像的尺寸,而不是强迫卷积的输出维度对所有的层都要一样。这相当于在tf.conv2d函数中填充“VALID”设置。然而,要计算每个像素的均方差的话,输出的图像需要与输入图像尺寸相同。因此,解卷积层需要再一次放大图像。

图5:尝试的第二个神经网络结构

图5显示了尝试的第二种神经网络结构。前四个转换是带有LeakyReLU激活的卷积。前两个卷积的stride为2,但是其他的stride为1。(注:Stride: 移动切片的步长,影响取样的数量。)四个卷积(cony)后面跟着去卷积(decony)。在每一次卷积之后,除了最后一层都是一个常规的ReLU外,LeakyReLU被用作激活函数。通道的数量是选被择的,这样在中间表示中至少会有和输入图像一样多的特性,所以理论上来看,所有来自输入图像的信息都可以被保留。通过这种架构,网络能够更好地适应数据。

训练

采用批量梯度下降法来训练神经网络。批处理大小是8,学习速率设置为0.001。总共的训练时间是约为6小时,共有18次训练。图6显示了训练的过程。

图6:训练期间的cost,橙线是验证集的cost(未经过训练的一个单独的数据集),而绿线是训练集的cost。

为训练找到一个好的学习率是有挑战性的。网络只会在学习率接近学习率的情况下快速学习,这使得训练产生了分歧。所以我们用一种新颖的方法来寻找一个好的学习率: 简单地在神经网络上打印一个参数,在这里使用一个首层的参数,然后在每次迭代之后打印出来。如果没有改变,那么提高学习率。如果它正在发生变化,并且迅速变大,那么训练不仅变得简单,而且还为这项工作带来了巨大的成果。

在选择学习率之后,神经网络开始比以前更好地适应训练数据。首先,它了解了正方形周围的黑色部分,然后用正确的颜色对正方形进行着色。然后慢慢地,网络学会了将这些字母输出到不模糊的情况下。这种进展可以在图7到9中查看。左列是神经网络的输入图像,中间列是目标输出,右列是神经网络的输出图像。

图7:500次迭代

图8:3000次迭代

图9:22000次迭代

图10:来自验证组的图像。左边:原始图像,中间:模糊的图像,右边:训练后的输出图像。

图10显示了神经网络如何在以前没有见过的模糊图像上执行任务。神经网络似乎能够很好地总结出只有10.000张图片和18个训练期的验证集的特点。第四行图像显示,有时网络会给图像增加噪点。这也许可以通过更长的训练来改变这一缺陷。

这项工作的实际用途是用智能手机拍下被锐化的文本照片。图11显示了两个图像,顶部的图像是文本的图像,底部的图像是由神经网络生成的。底部图片的不模糊度是非常糟糕的。罪魁祸首可能是训练数据所遵循的简单分布。为了提高质量,人们可能会试图使训练数据中添加的模糊效果变得更加复杂。然而,这是一种推测,因此需要更多的工作来确定是否提高了图片的整体质量。

这个项目的代码可以在下面的链接里找到:

https://github.com/gardarandri/TextSharpener

此文为编译作品,作者Gardar Andri Sigurdsson,原网站:https://gardarandri.github.io/TextSharpener/

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

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

相关文章

angluar cdk_零分钟即可在容器开发套件(CDK)上实现云运营

angluar cdk尽管这很有趣,但是它实际上并不可行,并且很快就遇到了使用限制。前一段时间, 我逐步完成了在容器中安装称为CloudForms的云管理解决方案。 真正的解决方案是将这个示例放入Red Hat Demo Central集合中,并将其放在基于…

Linux 系统下载和安装 rarlinux

文章目录红帽系的 Linux下载已经编译好的软件包下载程序的源代码软件包Debian Linux安装过程常遇到的问题rarlinux 下载地址:http://www.rarlab.com/download.html rarlinux 相关命令使用说明,猛戳《Linux 系统下命令 unrar 的中文版使用说明》 红帽系的…

腾讯面试编程题python_腾讯面试官出的 2 道经典数据分析面试题

没想到这篇文章这么受欢迎,那就再分享一篇:苏克1900:腾讯高级数据分析师:十年分析之路的力荐书籍​zhuanlan.zhihu.com以下原文章:近期暑期实习和提前批招聘已经开始了,不论你是校招还是想社招,…

Linux 系统下命令 unrar 的英文版使用说明

查看中文版&#xff0c;猛戳《Linux 系统下命令 unrar 的中文版使用说明》 UNRAR 5.40 freeware Copyright (c) 1993-2016 Alexander RoshalUsage: unrar <command> -<switch 1> -<switch N> <archive> <files...> <listfiles...&g…

网络研讨室_免费网络研讨会:Java应用程序中的吞咽异常

网络研讨室1月30日参加我们的网络研讨会&#xff0c;以发现Java应用程序中的“隐藏”异常。 如果一棵树落在森林中&#xff0c;但是没有写到原木上&#xff0c;它会发出声音吗&#xff1f; 答案是肯定的。 这些类型的错误可能会对用户体验造成严重影响&#xff0c;而没有根本原…

java8默认内存收集器_使用正确的垃圾收集器将Java内存使用量降至最低

java8默认内存收集器大小对于软件至关重要。 很明显&#xff0c;与大的整体方法相比&#xff0c;在微服务体系结构中使用小片段具有更多优势。 最新的Java版本的Jigsaw有助于分解旧应用程序或从头开始构建新的云原生应用程序。 这种方法减少了磁盘空间&#xff0c;构建时间和启…

oc 协议 回调 静态成员_每日一问:c++类的成员函数,能作为线程的参数吗?

问&#xff1a;类的成员函数可以传入线程参数吗&#xff1f;回答&#xff1a;如果c语言的全局函数&#xff0c;可以。如果是类的静态成员函数&#xff0c;可以如果是类的普通成员函数&#xff0c;不可以为什么&#xff1f;《深入探索C对象模型》中提到成员函数时&#xff0c;当…

Linux 系统下命令 unrar 的中文版使用说明

查看英文版&#xff0c;猛戳《Linux 系统下命令 unrar 的英文版使用说明》 $ rar --help用法: rar <命令> -<选项 1> -<选项 N> <压缩档案> <文件...> <文件列表...> <解压缩路径\><命令> a 添加文件到压缩档案 …

如何使用 MySQL 安装后自带的帮助文档

文章目录一、查询帮助文档二、MySQL 相关资源网址一、查询帮助文档 输入命令 ? contents 或者 help contents 来显示所有可供查询的分类&#xff1a; mysql> ? contents; You asked for help about help category: "Contents" For more information, type help…

java设置并行度_控制Java并行流的并行度

java设置并行度在掌握了这些新功能之后&#xff0c;随着Java 9的最新发布&#xff0c;我们有了许多新功能可以用来改进我们的解决方案。 Java 9的发布也是修改我们是否掌握Java 8功能的好时机。 在这篇文章中&#xff0c;我想解决关于Java并行流的最常见的误解。 人们通常说您…

flink读取不到文件_日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践...

简介&#xff1a; 友信金服公司推行全域的数据体系战略&#xff0c;通过打通和整合集团各个业务线数据&#xff0c;利用大数据、人工智能等技术构建统一的数据资产&#xff0c;如 ID-Mapping、用户标签等。友信金服用户画像项目正是以此为背景成立&#xff0c;旨在实现“数据驱…

MySQL 如何将数据表中字符串类型的字段值中的部分字符串替换掉(字符串替换/字符串拼接/生成 SQL 脚本语句)

使用拼接函数(concat)生成更新某字段值的 SQL 脚本语句 一、生成更新字段 logo 的 SQL 脚本语句如下: select concat( update tf_company set logo=, replace(logo,http://www.dpqyw.com:80,http://www.dpqyw.com), ,where company_id=,company_id,

apache pulsar_Apache Pulsar:分布式Pub-Sub消息系统

apache pulsarApache Pulsar是一个开源的分布式pub-sub消息传递系统&#xff0c;最初是由Yahoo创建的&#xff0c;并且是Apache Software Foundation的一部分 。 Pulsar是用于服务器到服务器消息传递的多租户高性能解决方案。 脉冲星的主要功能包括[4]&#xff1a; 对Pulsar…

python deque索引超出范围_Python基础语法

学习Python的四个要素有数据&#xff0c;函数&#xff0c;条件循环和模块一、数据数据是Python编程过程中的原材料&#xff0c;通过导入数据&#xff0c;对数据进行操作&#xff0c;实现预先设想的功能。数据共有5种类型&#xff0c;分别是字符串、数字、容器、布尔值和空值。字…

Path环境变量的理解以及设置MinGW环境变量

配置path环境变量 在使用MinGW的时候&#xff0c;不小心把path变量的东西全部删掉了&#xff0c;结果只能自己重新设置path变量&#xff0c;首先要知道如何设置path变量。 Path路径&#xff1a;用来指定可执行文件的搜索路径&#xff0c;也就是后缀名为.exe文件&#xff0c;方…

写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项

写java代码时的注意事项Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一。 尽管我喜欢这个新的Java类的东西比不喜欢的东西多&#xff0c;但在Java方法中将其用作return类型时&#xff0c;需要考虑一些事情。 我将在本文中讨论其中的一些问题&#xff0c;但不…

Linux 命令之 iconv -- 转换文件的字符编码

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;对指定文件进行转码&#xff0c;且输出到指定的文件中一、命令介绍 iconv 命令是 Linux 系统自带的用于转换文件编码的命令行工具&#xff0c;iconv 命令用来转换文件的编码方式&#xff…

python asyncio future_Python asyncio.isfuture方法代码示例

本文整理汇总了Python中asyncio.isfuture方法的典型用法代码示例。如果您正苦于以下问题&#xff1a;Python asyncio.isfuture方法的具体用法&#xff1f;Python asyncio.isfuture怎么用&#xff1f;Python asyncio.isfuture使用的例子&#xff1f;那么恭喜您, 这里精选的方法代…

python爬取网站的图片

python爬取网站的图片 本次爬取图片所需要用到的库&#xff1a;Requests库&#xff0c;BeautifulSoup库&#xff0c;正则表达式&#xff0c;os库。 思路&#xff1a;先爬一张图片&#xff0c;再爬一个网站的图片 先爬一张图片&#xff1a; 首先要得到这张图片的地址&#x…

spring 定时器注释_带注释的控制器– Spring Web / Webflux和测试

spring 定时器注释Spring Webflux和Spring Web是两个完全不同的Web堆栈。 但是&#xff0c; Spring Webflux继续支持基于注释的编程模型 使用这两个堆栈定义的端点可能看起来很相似&#xff0c;但是测试这种端点的方式却完全不同&#xff0c;并且编写这种端点的用户必须知道哪…