作家
登录

利用卷积自编码器对图片进行降噪

作者: 来源: 2017-07-19 16:36:52 阅读 我要评论

应用卷积自编码器对图片进行降袈潆

这里的输入层和我们上一部分的输入层已经不合,因为这里我们要应用卷积操作,是以,输入层应当是一个 height x width x depth 的一个图像,一般的图像 depth 是 RGB 格局三层,这里我们的 MNIST 数据集的 depth 只有 1。

Encoder 卷积层

Encoder 卷积层设置了三层卷积加池化层,对图像进行处理。

第一层卷积中,我们应用了 64 个大年夜小为 3 x 3 的滤波器(filter),strides 默认为 1,padding 设置为 same 后我们的 height 和 width 不会被改变,是以经由第一层卷积今后,我们获得的数据大年夜最初的 28 x 28 x 1 变为 28 x 28 x 64。

紧接着对卷积结不雅进行最大年夜池化操作(max pooling),这里我设置了 size 和 stride 都是 2 x 2,池化操作不改变卷积结不雅的深度,是以池化今后的大年夜小为 14 x 14 x 64。

对于其他卷积层不再赘述。所有卷积层的激活函数都是用了 ReLU。

经由三层的卷积和池化操作今后,我们获得的 conv3 实际上就相当于上一部分中 AutoEncoder 的隐层,这一层的数据已经被紧缩为 4 x 4 x 32 的大年夜小。

至此,我们就完成了 Encoder 端的卷积操作,数据维度大年夜开端的 28 x 28 x 1 变成了 4 x 4 x 32。

接下来我们就要开端进行 Decoder 端的卷积。在这之前,可能有小伙伴要问了,既然 Encoder 中都已经把图片卷成了 4 x 4 x 32,我们如不雅持续在 Decoder 进行卷积的话,那岂不是获得的数据 size 越来越小?所以,在 Decoder 端,我们并不是纯真进行卷积操作,而是应用了 Upsample(中文翻译可认为上采样)+ 卷积的组合。

我们知道卷积操作是经由过程一个滤波器对图片中的每个 patch 进行扫描,进而对 patch 中的像素块加权乞降后再进行非线性处理。举个例子,原图中我们的 patch 的大年夜小假如是 3 x 3(说的通俗点就是一张图片中我们取个一一个 3 x 3 大年夜小的像素块出来),接着我们应用 3 x 3 的滤波器对这个 patch 进行处理,那么这个 patch 经由卷积今后就变成了 1 个像素块。在 Deconvolution 中(或者叫 transposed convolution)这一过程是反过来的,1 个像素块会被扩大成 3 x 3 的像素块。

然则 Deconvolution 有一些弊病,它会导致图片中出现 checkerboard patterns,这是因为在 Deconvolution 的过程中,滤波器中会出现很多重叠。为懂得决这个问题,有人提出了应用 Upsample 加卷积层来进行解决。

关于 Upsample 有两种常见的方法,一种是 nearest neighbor interpolation,另一种是 bilinear interpolation。

在隐层,我们采取了 ReLU 作为激活函数。

应用卷积自编码器对图片进行降袈潆

本文也会应用 Upsample 加卷积的方法来进行 Decoder 端的处理。

应用卷积自编码器对图片进行降袈潆

在 TensorFlow 中也封装了对 Upsample 的操作,我们应用 resize_nearest_neighbor 对 Encoder 卷积的结不雅 resize,进而再进行卷积处理。经由三次 Upsample 的操作,我们获得了 28 x 28 x 64 的数据大年夜小。最后,我们要将这个结不雅再进行一次卷积,处理成我们原始图像的大年夜小。

应用卷积自编码器对图片进行降袈潆

最后一步定义 loss 和 optimizer。

应用卷积自编码器对图片进行降袈潆

loss 函数我们应用了交叉熵进行计算,优化函数进修率为 0.001。

构造噪声数据

Decoder 卷积层

经由过程膳绫擎的步调我们就构造完了全部卷积自编码器模型。因为我们想经由过程这个模型对图片进行降袈潆,是以在练习之前我们还须要在原始数据的基本上构造一下我们的噪声数据。

应用卷积自编码器对图片进行降袈潆

我们经由过程膳绫擎一个简单的例子来看一下若何参加噪声,我们获取一张图片的数据 img(大年夜小为 784),在它的基本上参加噪声因子乘以随机数的结不雅,就会改变图片上的像素。接着,因为 MNIST 数据的每个像素数据都被处理成了 0-1 之间的数,所以我们经由过程 numpy.clip 对参加噪声的图片进行 clip 操作,包管每个像素数据照样在 0-1 之间。

np.random.randn(*img.shape) 的操作等于 np.random.randn(img.shape[0], img.shape[1])

本篇文┞仿将实现两个 Demo,第一部分即实现一个简单的 input-hidden-output 结的自编码器,第二部分将在第一部分的基本上实现卷积自编码器来对图片进行降袈潆。

我们下来来看一下参加噪声前后的图像比较。

应用卷积自编码器对图片进行降袈潆

练习模型

介绍完模型构建和噪声处理,我们接下来就可以练习我们的模型了。

应用卷积自编码器对图片进行降袈潆


  推荐阅读

  只有20行Javascript代码!手把手教你写一个页面模板引擎

【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路!经由过程这种办法,我们可以根据字符串构造函数,包含它的参数和函数体。这不恰是我们想要的嘛!不过先别急,在构造函数之>>>详细阅读


本文标题:利用卷积自编码器对图片进行降噪

地址:http://www.17bianji.com/lsqh/36298.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)