Py学习  »  机器学习算法

浅析深度学习在图像处理中的应用趋势及常见技巧

小白学视觉 • 1 年前 • 95 次点击  

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

来自 | 知乎  作者 | 疾星

链接 | https://zhuanlan.zhihu.com/p/147885624

编辑 | 深度学习这件小事公众号

本文仅作学术交流,如有侵权,请联系后台删除

   引言


近年以来,随着深度学习在图像识别领域取得巨大突破(以AI之父Geoffry Hinton在2012年提出的高精度AlexNet图像识别网络为代表),掀起了以神经网络为基础的深度学习研究热潮。目前为止,图像处理已成为深度学习中重要的研究领域,几乎所有的深度学习框架都支持图像处理工具。当前深度学习在图像处理领域的应用可分为三方面:图像处理(基本图像变换)、图像识别(以神经网络为主流的图像特征提取)和图像生成(以神经风格迁移为代表)。本文第一部分介绍深度学习中图像处理的常用技巧,第二部分浅析深度学习中图像处理的主流应用,最后对本文内容进行简要总结。

   一.深度学习中图像处理的常见技巧

目前几乎所有的深度学习框架均支持图像处理工具包,包括Google开发的Tensorflow、Microsoft的CNTK等。以操作简单的Keras前端,Tensorflow后端开发框架为例介绍图像处理中的常见操作技巧:

1.数据增强:

制约深度学习发展的三要素分别为算法、算力和数据,其中算法性能由设计方式决定,算力供给的关键在于硬件处理器效能,算法和算力相同时,数据量的多少直接决定模型性能的最终优劣。进行图像识别时,经常出现因原始图像数目不足而导致的输出曲线过拟合,从而无法训练出能泛化到新图像集上的模型。数据增强根据当前已知的图像数据集生成更多的训练图像,具体实现是利用多种能够生成可信图像的随机变换来增加原始图像数量。数据增强前后的对比结果如图1所示:

图1a 原始图像

图1b 数据增强后的图像

图1 对图像进行数据增强

其中关键代码如下(定义增强数据的操作,包括缩放,平移和旋转等):

对比可知,数据增强的实质是在未改变原始图像特征内容的基础上(例如上图中的关键对象:猫、铁笼、食物)对图像数量的扩充,从而避免因图像不足而导致的模型过拟合与泛化性差等缺陷,在小型图像数据集上进行训练时尤其有效。

2.图像去噪:

现实的图像在传播过程中,由于传输波动和受外界噪声干扰而很容易引起图像质量下降。图像去躁是指滤除图像包含的干扰信息而保留有用信息,常见去噪方法包括非局部平均过滤算法、高斯滤波算法和自适应滤除噪声的卷积神经网络等。简要介绍如下:

1.2.1 非局部平均过滤算法

非局部平均过滤算法的降噪原理如下:图片中像素的设定通过与其周围的像素点加权而成,也就是图片中某点的像素设定和其周围像素的权重设定有关。具体原理如下式所示:

式中  代表  位置像素点受  位置像素点影响的权重大小,  代表选取像素点  周围半径为  范围内的像素点作为加权参照。  和  分别代表像素点 周围像素权值的大小统计和像素点 受周围 半径内像素影响的加权总和。

对原始图像添加噪声,随机设定3000个像素点为白色(RGB值均为255),可以看出添加噪声后的图像相对原始图像增添了许多噪声白斑,如图2所示:

图2a 原始海滩背景图像


图2b 添加噪声后的背景图像

图2 对原始背景图像添加随机的白色像素点以模拟实际噪声干扰

然后使用openCV内置的非局部平均噪声过滤算法滤除图片噪声,结果如图3所示:

图3 非局部平均噪声滤波后得到的背景图像

观察非局部平均噪声算法滤波前后的图像,可知滤波后图像的白斑噪声点明显减少,图像的质量得到有效提升,有利于后续的编码处理和传输。

1.2.2 去躁神经网络。

去躁神经网络通常是以CNN(卷积神经网络为基础),其实质是:利用在无噪图像集上训练完成的去躁模型,滤除预测图像中包含的噪声信息。使用图像识别中最常见的mnist手写图像库为训练集,mnist包含6万张训练集图像和1万张测试集图像,其大小均为28*28,按照图像内容的不同分为手写数字0-9,mnist数据库内置于keras中。搭建去躁神经网络结构,如图4所示:

图4 简单的去躁神经网络结构

使用去噪神经网络对mnist图像库中添加噪声的图像去躁,去躁前后对比结果如图5、图6所示,其中下标相同的Noise与Fliter相对应:

图5 对原始图像添加噪声

图6 使用去躁神经网络滤除噪声

观察去躁前后图片可知,去躁神经网络通过特征提取和监督学习等方式,对Mnist手写图像集实现了非必要噪声信息滤除,是简单常用的图像去躁器。

1.2.3 图像超分辨率重建(SR,Super Resolution)。

SR是图像处理中的经典应用,是图像增强领域的重要技术。其基本思想是通过提取低分辨率的原始图像特征来重构高分辨率的图像。按照其参考低分辨率图像种类和数目的不同,主要分为以下两种:

1. Image SR

特点是重构图像时,可供参考的原始低分辨率图像少,通常不依赖于其他图像而只参考当前的低分辨率图像,也称为单图超分辨率(SISR,single image super resolution)。

2. Video SR

特点是重构图像需要参照多个不同的原始低分辨率图像,也称为多帧超分辨率(MFSR,multi-frame super resolution)。通常MFSR相对SISR具有更高的重构质量和更多的特征匹配,代价是计算资源的更多消耗。

SR重构质量可通过图像质量评估的参考标准PSNR和SSIM进行评价,PSNR值和SSIM值越高,代表重建图像像素值与标准值越接近。其中PSNR定义如下(MSE代表图像评估中的均方误差):

其中MSE的定义如下:

SSIM定义简化如下(其中代表  均值,  代表均方差):

近年以来,图像超分辨率重建技术逐渐成为深度学习领域的研究热点,先后涌现出SRCNN(Super-Resolution Convontional Netural Network,超分辨率卷积神经网络)和FSRCNN(Fast Super-Resolution Convontional Netural Network,快速超分辨卷积神经网络)等超分辨率重构结构,分别介绍如下:

1. SRCNN

SRCNN是香港中文大学在2014年提出的一种Image SR重构网络,核心结构是利用CNN网络对原始的低分辨率图像进行特征提取和映射,最后完成高分辨率图像重构,其实质是利用深度学习神经网络实现稀疏自编码器。SRCNN网络核心结构如图7所示:

图7 SRCNN网络的结构示意图

如图7所示,SRCNN网络完成图像超分辨率转换的过程分为三部分:首先通过插值法对原始低分辨率图像进行维度扩展,目标是保证输入网络的图像与目标图像尺寸相同;然后将拓展后的原始图像通过卷积网络拟合的非线性映射进行特征提取,完成低分辨率特征图到高分辨率特征图的映射。CNN特征提取网络是SRCNN网络的关键结构,文中采用的特征提取网络为3层堆叠的CNN;最后根据获得的高分辨率图像特征对目的图片进行维度与内容的组合重建,输出生成的高分辨率图像。

对比SRCNN网络与同类算法进行的高分辨率图像重构,结果如图8所示:

图8a 对相同的图像使用不同超分辨率方法重构

图8b 常见超分辨重构方法的PSNR和SSIM标准评估

图8 SRCNN网络与传统方法的性能对比

如图8所示,相同条件下SRCNN网络的SSIM和PSNR值绝大多数情况下优于传统算法,说明SRCNN网络的编码质量相对传统算法有所提升。与传统超分辨算法相比,SRCNN网络具有结构原理简单、重构质量高等优点,不足之处在于图像的转换重构速率较低。

2. FSRCNN

FSRCNN网络同样由SRCNN开发团队提出,目的是针对SRCNN网络图像转换速率低的缺点进行改进。改进后网络的图像转换速率较SRCNN网络大幅提升,图像重构质量稍有提升。FSRCNN网络对SRCNN网络添加的改变总结如下:

维度变换上: 原始SRCNN网络从图片输入网络开始即对其进行插值变换,以完成与目的图像维度匹配的维度拓展。这样使得网络开头增加的张量维度参与到端与端间的所有变换运算,大大增加了网络计算复杂度和运算开销。改进后的FSRCNN网络将维度拓展的结构放置于网络终端,避免了引入网络内部的非必要运算消耗,提高了图像的转换速率。

运算结构上: FSRCNN改进了特征映射中的非线性映射方式,并且减小了卷积运算时的卷积核维度,结果使得网络运算和特征提取的参数数量大幅减少、图像的高分辨率重构效率大为提升。由于网络内部结构的改变,FSRCNN重构图像质量相对SRCNN略有提升。FSRCNN与SRCNN的对比结果如图9所示,改进后FSRCNN网络编码质量和效率相对传统SRCNN网络均有所提升。

图9a SRCNN与FSRCNN的结构对比

图9b FSRCNN与SRCNN的质量及效率对比

   二.深度学习中的图像处理应用

当前深度学习在图像处理方面的应用和发展主要归纳为三方面:图像变换、图像识别和图像生成,分别从这三方面进行介绍:

2.1.图像变换

指对图片进行的常规操作,包括图像缩放、复制等简单操作和上文提及的去躁、提升超分辨率等常见操作,其目的是提升图片质量,得到理想的目标图片。总体来说,深度学习进行的图像变换依赖于内置工具的强大功能,使用者可根据不同需求学习对应图像处理工具的使用,此处不再赘述。

2.2.图像识别

计算机视觉(CV,Computering Version)已成为深度学习领域的重要发展方向,CV的主要内容就是进行目标识别,图像作为生活中的常见目标一直是CV方向研究热点。使用深度学习进行图像识别的通常方法是:构建识别对象为图像的神经网络,达到图像识别的高精度与低运算资源消耗。

简要介绍使用神经网络进行图像识别,以2013年Kaggle竞赛提供的猫狗图像集为例,构建图10所示的猫狗图像集识别神经网络:

图10 简单的猫狗图像识别神经网络

设定训练轮数epochs为50,对4000张猫狗图像进行分类,得到图像识别网络对猫狗图像集进行训练过程中损失和精度的变化趋势,如图11所示:

图a 图像识别过程中的精度变化


图b 图像识别中的损失变化

图11 构建图像识别网络对猫狗数据集的识别结果

由图11可知,构建的简单图像识别网络经50轮迭代后,对目标图像集达成了80%以上的识别精度。虽然识别过程中存在过拟合现象,并且识别精度不尽人意,但结果证明神经网络进行图像识别的简便性与可行性。图像过拟合带来的负面影响可以通过减少网络参数量(数据削弱等)和训练图像量等方法减小,目标图像的识别精度可以通过添加预训练模型等方法进行提升。

当前神经网络构建的高精度图像识别已广泛应用于人脸识别等智能领域,相关实例可上网查阅自行了解,本文不再赘述。

图12 使用神经网络进行人脸识别的结果

2. 3.图像生成

图像生成是指从已知图像中学习特征后进行组合,生成新图像的过程。不同于图像的高分辨率重建,图像生成通常需要学习不同图像的特征并进行组合,生成的图像是所有被学习图像特征的结合。常见的图像生成应用包括神经风格迁移、Google公司开发的Deep Dream算法和变分自编码器等,分别介绍如下:

2.3.1. Deep Dream

由Google公司在2015年夏首次发布,使用早期常见的Caffe架构编写实现,由于其生成的图像布满了算法式的迷幻错觉伪影而引起轰动。DeepDeram生成图像的显著特征是鸟羽毛和狗眼睛数量较多,原因是DeepDream学习的原始图像库为鸟样本和狗样本特别多的ImageNet(Google开源的大型数据库,常用作预训练模型的权重训练)。

Deep Dream与传统的卷积神经网络可视化过程思路相同,均为对卷积神经网络的输入进行梯度上升,以便将靠近网络输出端的某个过滤器可视化;区别在于Deep Dream算法直接从现有的图像提取特征,并且尝试最大化激活神经网络中所有层的激活。使用Deep Dream算法,在Keras框架上对已知图像进行特征迁移,结果如图13所示,Deep Dream生成的图像相对原图增添了许多特征(主要是鸟羽波纹和狗眼睛):

图13a 原始猫图像

图13b Deep Dream猫图像

图13c 原始狗图像

图13d Deep Dream 狗图像

图13 使用Deep Dream算法生成的图像

2.3.2. 神经风格迁移(NST,Neural Style Transfe)

神经风格迁移是指将参考图像的风格应用于目标图像,同时保留目标图像的内容。风格是指图像中不同空间尺度的纹理,颜色和视觉图案,内容则是指图像的高级宏观结构。

实现神经风格迁移的思路与寻常深度学习方法相同,均为实现定义损失的最小化。不同于通常的深度学习算法,神经风格迁移的损失函数与图像内容和风格的数学定义有关,具体定义如下式所示:

式中  代表定义的参考图像与生成图像损失,由  风格损失和  内容损失两部分构成。  和  分别定义为风格损失函数和内容损失函数。

内容损失函数由神经网络中更靠近顶层的网络激活  范数对参考图像和生成图像计算差值得到,由于选取的网络层更靠近输出端,可认为内容损失函数得到的差值代表目的图像和生成图像中更加全局抽象的图片内容差异。

风格损失函数的定义则使用神经网络的多个层,目的是保证风格参考图像和生成图像间在神经网络中各层激活保存相似的内部关系。不同于内容损失函数只关注更全局、更主要的图像内容,风格损失函数需要在网络较高层和较低层保持类似的相互关系,从而在根本上保证参考图片的风格不随特征提取进行而变化。

实现神经风格迁移的流程分为三个步骤:

1.加载预训练网络,创建能够同时计算风格参考图像、目标图像和生成图像预训练网络激活的神经网络。

2.使用三张图像上计算的对应层激活来定义内容损失与风格损失,得到总体损失函数。

3.设置批量梯度下降,最小化目标损失。

使用Keras内置的VGG19预训练模型实现神经风格迁移,目标是实现2015年提出的原始神经风格迁移算法,迁移结果如图13所示:

星空原始图像

荷池原始图像

图14a 实现神经风格迁移的原始图像

繁星荷池

荷池繁星

图14b 交换参考图像和目标图像得到的迁移结果

图14 使用Keras实现原始神经风格迁移

观察图13可知,迁移式神经网络成功完成了风格参考图像到目标图像的风格迁移,并且保留了目标图像的内容。分别以星空和荷池作为参考对象,得到目标图像繁星荷池和荷池繁星。合理选取原始图像和定义迁移参数,就能生成一系列美轮美奂的图像。

2.3.3 变分式自编码器(VAE,Variational autoencoder)

变分自编码器由Kingma和Welling在2013年12月首次提出,是一种利用深度学习中生成式模型构建的自编码器,特点是将深度学习思想和贝叶斯推断结合在一起,以完成输入目标向低维向量空间的编码映射和向高维向量空间的反解码。经典的图像自编码器首先使用编码器模块编码接收的图像,将其映射到包含图片特征的概念向量构成的潜在向量空间;然后通过解码器模块将其解码为与目标图片同维度大小的输出,经典自编码器的工作流程如图15所示。

实践中,由于经典自编码器不具备良好结构的潜在学习空间而常常导致生成图像不连续,未达成对原始训练图像特征的高效提取。变分式自编码器在经典自编码器上基础上改变了其编解码方式,得到学习连续、高度结构化的潜在空间。VAE不是将输入图像压缩成潜在空间中的固定编码,而是将图像转换为统计分布参数(平均值和方差)。然后,VAE使用这两个参数从分布中随机采样一个元素并将其解码到原始输入。这个过程的随机提高了其稳健性,并迫使潜在空间的任何位置都对应有意义的表示,即潜在空间采样的每个点都能解码为有效的输出,变分自编码器的工作流程如图16所示。

图像变分自编码器与一般的深度学习模型相同,采用和输入图像相同类型大小的图片来训练模型,以完成对输入图像的特征提取和目标图像的自动重构生成。可以通过指定编码器的输出来限制编码器学习的具体特征。

图15 经典自编码器的工作流程示意图


图16 变分自编码器的工作流程(z_mean和z_log_var分别代表潜在图像通过编码器映射后的均值和方差)

使用mnist数据集作为变分自编码器训练数据集,生成的图像如图17所示:

图17 VAE生成的手写数字图像

2.3.4 生成式对抗网络(GAN,Generative adversarial network)

GAN由Goodfello等人于 2014 年提出,它可以替代VAE来学习图像的潜在空间,其生成的图像与真实图像在统计上几乎无法区分,从而生成相当逼真的合成图像。

GAN结构由一个伪造者网络和一个专家网络组成,二者训练的目的都是为了打败彼此。生成器网络(generator network)以一个随机向量(潜在空间中的一个随机点)作为输入,并将其解码为一张合成图像。判别器网络(discriminator network)又称为对手网络(adversary),以一张图像(真实或合成均可)作为输入,并预测该图像来自训练集还是生成器网络。训练生成器网络的目的是使其能够欺骗判别器网络,因此随着训练的进行,它能够逐渐生成越来越逼真的图像,即看起来与真实图像无法区分的人造图像,以至于判别器网络无法区分二者。GAN工作流程如图18所示:

图18 GAN网络的训练流程示意图

训练GAN和调节GAN实现的过程非常困难,此处不再赘述,读者可自行查阅相关资料了解,使用GAN生成的人脸图像如图19所示:

图19 GAN在人脸图像集上训练生成的图像

   三.总结

本文第一部分介绍了深度学习领域中图像处理的常用技巧,主要包括数据增强、图像去躁以及图像增强领域中的图像高分辨率重建技术(SR,Super Resolution)。数据增强能根据原始图像生成内容、风格相似的更多训练图像,可有效解决因训练图像不足带来的曲线过拟合;图像去躁技术的代表是常见的高斯滤波算法和去噪神经网络,其共同特征是有效过滤图片传输中受到的干扰波动,有利于后续的图像处理;图像高分辨率重建是图像增强领域的显著代表,其基本思想是通过提取原始低分辨率图片的特征,变换映射得到高分辨率图片。这种技术不仅完整保留了原始图片的内容和风格(图像的有效信息),也提升了变换后的图片质量。

本文第二部分简要分析深度学习技术在图像处理领域的主要应用,按照不同功能划分为图像变换、图像识别和图像生成三个领域。图像变换是图像处理最简单、基本的操作;图像识别是计算机视觉的重要分支研究领域,目的是达到深度学习图像识别网络识别精度和效率的提升,实际应用于人脸识别和遥感图像识别等方面;最后概述了图像生成应用的几个分支:包括神经风格迁移(NST,Neural Style Transfer)和变分自编码器(VAE,Variational autoencode)等。Deep Dream可以看做训练集为Image Net的神经风格迁移网络,它们的共同特点是:从参考图像中进行内容和风格的提取组合后,根据要求生成不同种类的目标图片。图像生成领域的另一个重要分支为生成式对抗网络(GAN,Generative adversarial network),可以生成与原始图像非常相似的目标图像,感兴趣的读者可以自行了解。

图像处理领域是深度学习和机器视觉领域重要的研究分支,相信在未来必将得到蓬勃的发展。本文涉及的图像和代码可在github.com/asbfighting/中下载和访问。


好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇



下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉 公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/147791
 
95 次点击