你还记得胶卷相机的时代吗?冲洗照片是一个神秘的过程,只有摄影师和专业人士才能够驾轻就熟。大多数人的印象中只有弥漫着昏暗红光的暗室。简而言之,冲洗照片是一个耗时的过程。
后来数码相机革命开始了,过往的时代一去不复返!我们甚至不想再打印照片了——大多数人的照片存储在智能手机、笔记本电脑或云上。
即使现在,我们也会遇到(点击鼠标的时候)模糊、像素化和模糊的图片。我对此深表愧疚,很多人都在努力呈现出完美的图片。这正是深度学习和自动编码器的用武之地。
下面将介绍什么是自动编码器,以及工作原理。然后,我们会给一个实际案例——基于Python中的自动编码器提高图像的分辨率。
必备条件:熟悉Keras,基于神经网络和卷积层的图像分类。如果你需要回顾这些概念,可以参考以下:
-
神经网络概论(免费课程)
https://courses.analyticsvidhya.com/courses/Introduction-to-Neural-Networks?utm_source=blog&utm_medium=what-is-autoencoder-enhance-image-resolution
-
建立你的第一个图像分类模型
https://www.analyticsvidhya.com/blog/2019/01/build-image-classification-model-10-minutes/?utm_source=blog&utm_medium=what-is-autoencoder-enhance-image-resolution
一、什么是自动编码器
二、关于图像去噪自编码器
三、问题描述-使用自动编码器提高图像分辨率
四、使用Python实现自动编码器
一、什么是自动编码器
Pulkit Sharma在文章中给出了如下定义:
“自动编码器本质上是学习输入数据低维特征表示的神经网络结构。”
自动编码器由两个相连的网络组成:编码器和解码器。编码器的目的是获取一个输入(x)并产生一个特征映射(z):
这个特征映射(z)的大小或长度通常小于x。为什么是这样呢?
因为我们只希望z捕获可以描述输入数据的有意义的变化因子,因此z的形状通常小于x。
现在,问题是我们如何获得这个特征表示(z)?我们如何训练这个模型?为此,我们可以在提取的特征之上添加一个解码器网络,然后训练模型:
二、
关于图像去噪自编码器
我们将在本文中解决的问题与图像去噪自动编码器的功能有关。下面我们详细介绍下如何利用自动编码器消除图像中的噪声。
假设我们有一组手写数字图像,其中一些已经损坏。 以下是一些带有噪点(损坏)的图像:
从图像中去除这种噪声被称为图像去噪问题。
所需的输出是干净的图像,其中大部分噪声被去除,如下所示:
但是自动编码器如何从图像中去除这种噪声呢?
正如我们在上一节中已经看到的,自动编码器试图重建输入数据。因此,如果我们把损坏的图像作为输入,自动编码器将尝试重建噪声图像。
那么,我们该怎么办呢?改变结构?答案是否定的!
这里需要的是一个小调整。我们可以通过使用原始图像和重构图像来计算损耗,而不是使用输入和重构输出来计算损耗。下图说明了我的观点:
图像去噪自编码器
现在我们已经熟悉了去噪自动编码器的功能,下面我们回到期望使用自动编码器解决的问题。
三、问题描述-使用自动编码器提高图像分辨率
对这个问题相信你不会陌生。我们大多数人遇到模糊图像都很郁闷,都希望图片能清晰些。下面我们将使用自动编码器解决该问题!
假设我们有一组低分辨率的人脸图像。我们的任务是提高这些图像的分辨率。可以借助Photoshop等照片编辑工具来完成此操作。但是,当手头有成千上万张图像时,我们需要一种更智能的方法来执行此任务。
以下是一些示例图像及其原始图像:
四、使用Python实现自动编码器
让我们打开我们的Juyter Notebook并导入所需的库:
我们的研究基于流行的“Labeled Faces in the Wild”数据集。它设计用于研究无约束人脸识别问题。然而,在这里我们的目标不是人脸识别,而是建立一个模型来提高图像分辨率。
让我们下载和提取数据集:
# download dataset
! wget http://vis-www.cs.umass.edu/lfw/lfw.tgz
# extract dataset
! tar -xvzf lfw.tgz
此数据集将被提取到多个文件夹中。因此,捕获所有图像的文件路径是很重要的。我们可以借助glob库轻松地做到这一点。
#capture paths to imagesface_images = glob.glob('lfw/**/*.jpg')
图像的原始大小是250×250像素。然而,在一般配置的系统上处理这些图像需要消耗相当多的计算资源。因此,我们需要裁剪所有图像的尺寸。
接下来,我们将数据集(图像)分成两组——训练和验证。我们将使用训练集来训练我们的模型,并用验证集来评估模型的性能:
让我们来看看数据集中的图像:
这个案例的思想和去噪自动编码器非常相似。
我们将对输入图像做一些修改,并使用原始图像计算损失。作为一个提高分辨率的任务,我们降低原始图像的分辨率,并将其输入到模型中。
如下是处理后的输入图片:
我们将使用下面的函数来降低所有图像的分辨率,并创建一组单独的低分辨率图像。
降低所有图像的分辨率,包括训练集和验证集。
模型的结构定义如下:
可以根据需要修改该结构。你可以改变层的数量,改变层的类型,使用正则化,以及其他很多参数。当下我们继续使用这个结构。
模型结构可视化对于调试(如果出现错误)很有帮助。在Keras中很容易实现,仅需执行<model name>.summary( )函数即可:
autoencoder.summary()
我们最终可以训练我们的模型:
predictions = autoencoder.predict(val_x_px)
本教程讲解了自动编码器,我们基于图像去噪的思路实现了提高图像分辨率。我们可以将其扩展到其他很多地方。
例如,我们也可以使用这种技术来提高低分辨率视频的质量。 因此,即使没有给图像打上标签,我们也可以处理图像数据并解决一些实际问题。如果您还有其他基于无监督学习的图像处理案例或技术,请在下面的评论部分中共享它。
原文标题:
What are Autoencoders? Learn How to Enhance a Blurred Image using an Autoencoder!
原文链接:
https://www.analyticsvidhya.com/blog/2020/02/what-is-autoencoder-enhance-image-resolution/
【end】
◆精彩推荐◆
「AI应用技术大师课」是CSDN发起的“百万人学AI”倡议下的重要组成部分,4月份AI大师课以线上技术峰会的形式推出,来自微软、硅谷TigerGraph、北邮等产学界大咖就图计算+机器学习,语音技术、新基建+AI、AI+医疗等主题展开分享,扫描下方二维码免费报名,限时再送299元「2020AI开发者万人大会」门票一张。推荐阅读
百万人学AI:CSDN重磅共建人工智能技术新生态1分钟售出5万张票!电影节抢票技术揭秘暴风集团仅剩10余人;搜狗告百度输入法侵权案再驳回;Linux 5.6发布 | 极客头条马云为什么救援世界?BTC重现“自由落体”式暴跌,原来是受这几个因素影响?一文教你如何使用 MongoDB 和 HATEOAS 创建 REST Web 服务你点的每个“在看”,我都认真当成了AI
来源 | 数据派 THU概述自动编码器是什么?自动编码器是如何工作的?本文将回答这些问题。我们将通过一个案例——如何提高模糊图像的分辨率,来探讨自动编码器的概念。简介你还记得胶卷相机的...
为提升水下图像的增强效果,提出了一种基于金字塔注意力机制和生成对抗网络(GAN)的水下图像增强算法。它将生成对抗网络作为基本架构,生成网络采用编码解码结构并引入特征金字塔注意力模块,多尺度金字塔特征与注意力机制的结合可以捕获更丰富的高级特征以提升模型性能;判别网络采用类似马尔科夫判别器的结构。此外,通过构建包含全局相似性、内容感知和色彩感知的多项损失函数,使增强后的图像与参考图像的结构、内容和色彩保持一致。实验结果表明,所提算法增强的水下图像在清晰度、颜色校正和对比度上都有所提升。其中,在SSIM、UIQM和IE指标上的平均值分别为0.7418、2.9457和4.6925。在主观感知和客观评价指标上,所提算法的实验结果均优于对比算法。
由于成像环境的变化和红外成像传感器的局限性,红外图像通常具有一些缺点:对比度低,细节少和边缘不清晰。 因此,为了促进红外成像技术的应用,必须提高红外图像的质量。 为了自适应地增强图像细节和边缘,我们在提出的图像增强方案下提出了一种红外图像增强方法。 一方面,假设高质量图像比低质量图像具有更明显的结构奇异性,我们提出了一种依赖于结构特征提取的图像增强方案。 另一方面,不同于当前基于深度学习网络的图像增强算法,该算法试图训练和构建端到端映射以提高图像质量,我们分析了堆叠稀疏去噪自动编码器中第一层的重要性,以及为提出的图像增强方案提出了一种新颖的特征提取方法。 实验结果证明,该新颖的特征提取方法在边缘没有伪影,例如块状伪影,“梯度反转”和伪轮廓。 与其他增强方法相比,该方法在红外图像增强方面达到了最佳性能。
【题目】:Underexposed photo enhancement using deep illumination estimation 在网络中引入中间光照,将输入与预期的增强结果相关联。
和以往的图像到图像的生成不太一样,这篇文章首先产生了三个亮度的通道,用这三个亮度的通道的逆去乘原图像,得到的最后增强之后的图像。...
“自编码”是一种数据压缩算法,其中压缩和解压缩功能是1)数据特定的,2)有损的,3)从例子中自动学习而不是由人工设计。此外,在几乎所有使用术语“自动编码器”的情况下,压缩和解压缩功能都是用神经网络来实现的。
1)自动编码器是特定于数据的,这意味着它们只能压缩类似于他们所训练的数据。这与例如MPEG-2音频层III(MP3
Building Autoencoders in Keras[https://blog.keras.io/building-autoencoders-in-keras.html]
Keras上实现AutoEncoder自编码器[https://blog.csdn.net/marsjhao/article/details/68928486]
import tensorflo...
使用keras构建深度学习模型,我们会通过model.summary()输出模型各层的参数状况,如下:
________________________________________________________________
Layer (type) Output Shape Param #
==============...
TensorFlow2.0教程-keras 函数api
完整tensorflow2.0教程代码请看tensorflow2,0:中文教程tensorflow2_tutorials_chinese(欢迎star)
# !pip install pydot
#!sudo apt-get install graphvizf
from __future__ import absolute_import, ...