对人类来说,将带有文字的图像锐化是很容易的。以图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/

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

  1. python狗品种识别_卷积神经网络(CNN)项目,给你一个狗的图像,你的算法将会识别并估计狗的品种...

    广告:Udacity课程优惠券:邀请码: 67D6DA2E,立减 300 元 项目概述 欢迎来到卷积神经网络(CNN)项目!在这一项目中,你将学到如何建立一个处理现实生活中的,用户提供的图像的算法.给 ...

  2. python 图像卷积_[卷积神经网络(CNN)中的卷积核到底是如何提取图像特征的(python实现图像卷积运算)]...

    1.前言 我们知道,卷积核(也叫滤波器矩阵)在卷积神经网络中具有非常重要的作用.说白了,CNN主要作用在于提取图像的各种特征图(feature maps). CNN主要是通过卷积运算来完成特征提取的. ...

  3. c语言实现图片卷积_卷积神经网络(CNN)Python的底层实现——以LeNet为例

    本文介绍了如何使用Python从底层实现一个简单但经典的卷积神经网络结构--LeNet,并用它完成MNIST手写数字识别任务. 具体的完整代码以及代码的使用方法,可以光顾我的Github Profes ...

  4. 人脸检测卷积神经网络_卷积神经网络和计算机视觉的人脸面具检测算法

    人脸检测卷积神经网络 In this article, we explore an application of Computer Vision that is largely relevant to ...

  5. python 卷积神经网络 应用_卷积神经网络概述及python实现

    摘要:本文概括地介绍CNN的基本原理 ,并通过阿拉伯字母分类例子具体介绍其实现过程,理论与实践的结合体. 对于卷积神经网络(CNN)而言,相信很多读者并不陌生,该网络近年来在大多数领域都表现优异,尤其 ...

  6. 卷积神经网络算法python实现_卷积神经网络概述及python实现-阿里云开发者社区...

    对于卷积神经网络(CNN)而言,相信很多读者并不陌生,该网络近年来在大多数领域都表现优异,尤其是在计算机视觉领域中.但是很多工作人员可能直接调用相关的深度学习工具箱搭建卷积神经网络模型,并不清楚其中具 ...

  7. 利用python卷积神经网络手写数字识别_卷积神经网络使用Python的手写数字识别

    为了使机器更智能,开发人员正在研究机器学习和深度学习技术.人类通过反复练习和重复执行任务来学习执行任务,从而记住了如何执行任务.然后,他大脑中的神经元会自动触发,它们可以快速执行所学的任务.深度学习与 ...

  8. cnn卷积神经网络应用_卷积神经网络(CNN):应用的核心概念

    cnn卷积神经网络应用 In this tutorial, we'll work through the core concepts of convolutional neural networks ...

  9. 卷积网络和卷积神经网络_卷积神经网络的眼病识别

    卷积网络和卷积神经网络 关于这个项目 (About this project) This project is part of the Algorithms for Massive Data cour ...

  10. 卷积神经网络结构_卷积神经网络

    卷积神经网络结构 CNN's are a special type of ANN which accepts images as inputs. Below is the representation ...

最新文章

  1. svn TortoiseSVN 回滚版本
  2. php ssd性能影响,SATA SSD有无缓存,是否影响速度性能实例
  3. 苹果承认iPhone 12“绿屏”等问题:目前正进行调查
  4. rabbitmq安装centos7
  5. Linux passwd系统错误,Linux系统处理”passwd: Authentication token manipulation error”错误...
  6. php mysql 设置字符_php mysql字符集设置方法
  7. 一些CFD名词缩写的含义(持续更新中)
  8. ubuntu mysql 5.7 出错_ubuntu mysql5.7 启动提示错误:/var/run/mysqld/mysqld.sock
  9. is not allowed for source level below 1.7 的解决办法
  10. Improving Opencv 7: The Core Functionality : Discrete Fourier Transform
  11. 如何将ThinkPad T490拆机加内存条
  12. 文献(2): 综述_癌症相关成纤维细胞(CAF)的异质性【建议收藏】
  13. 今日头条信息流 - 广告策略
  14. 改进left函数,截取varchar需要的字符串长度
  15. TCP三次握手中SYN,ACK,Seq含义
  16. 记一道字节跳动的算法面试题
  17. 【学习笔记】dij 费用流 + 势能函数
  18. TIMESHFIT保存的系统镜像
  19. 金仓数据库KingbaseES GIN 索引
  20. 又是一个夏天要过去了

热门文章

  1. ios 旋转屏幕试图切换_iOS播放器横竖屏切换的实现
  2. 东方联盟郭盛华获100亿战略入股,到底谁支持他?网友:不敢猜
  3. 考教师资格证需要买书吗?
  4. 嵌入式的苦逼从何而来
  5. 基本比例尺标准分幅编号流程
  6. 异次元发卡源码/荔枝发卡V3.0二次元风格发卡网全开源源码/对接免签约支付接口
  7. Win10 安装 SQL Server 2008 与使用指南
  8. friendly发音_friendly是什么意思
  9. 最新搜狗收录提交工具分享
  10. 【实习生面试】阿里前端实习生一面流程及题目