基于深度学习的图像语义编辑

深度学习在图像分类、物体检测、图像分割等计算机视觉问题上都取得了很大的进展,被认为可以提取图像高层语义特征。基于此,衍生出了很多有意思的图像应用。

为了提升本文的可读性,我们先来看几个效果图。

图1. 图像风格转换

图2. 图像修复,左上图为原始图,右下图为基于深度学习的图像

图3. 换脸,左图为原图,中图为基于深度学习的算法,右图为使用普通图像编辑软件的效果

图4. 图像超清化效果图,从左到右,第一张为低清图像三次插值结果,第二张残差网络的效果,第三张为使用对抗神经网络后的结果,第四张为原图。

卷积神经网络(For starters)

深度学习在图像领域表现较好的是卷积神经网络,在自然语言处理领域的则是递归神经网络。本文所介绍的内容都是卷积神经网络的。

普通的神经网络是上一层神经元与下一层神经元全连接的非线性变换。如图5所示,其数学表达如图6所示。

图5. 神经网络示意图

图6. 神经网络的数学表达

而卷积神经网络则可以看做局部连接的非线性变换。一个卷积单元的示意图如图7所示。由该图可以看到,一个卷积核划过整张图像,得到一张新的图像。其中卷积核是卷积神经网络的参数,将由神经网络从数据中学习得到。经过卷积核处理后的图像称之为特征图。

图7. 卷积单元示意图

将多个卷积单元组合就可以形成一个卷积层。多个卷积层顺序处理图像就形成了深度卷积神经网络。每一个卷积层所有卷积单元的特征图组合起来称之为图像在该层的特征表示。

图像风格转换-V1

作为基于深度学习图像生成的第一个引爆点,图像风格转换将图像A的内容与图像B的风格糅合的一起,形成一张别出心裁的新图像。

图像的生成过程: 想象存在一张图像S,我们使用迭代的方式来从一张噪音图像N中复原它。那么我们可以定义一个损失函数E,E为S中每个像素和N中对应位置的像素的欧式距离的平方(欧式距离)。此时对N中的每个像素位置求导数,然后将导数乘以一个系数alpha然后加到N中该位置的像素上,从而得到一个更接近图像S的图像,逐步迭代,直至得到与S相差无几的图像。

图像风格转换是利用了卷积神经网络可以提取高层特征的效果,不在像素级别进行损失函数的计算,而是将原图像S和生成图像S都输入到一个已经训练好的神经网络里,在得到的某曾特征表示上计算欧式距离(内容损失函数)。这样得到的图像能够得到与原图内容相似但不必像素级别的相似,更具鲁棒性。

在卷积神经网络里的特征表示上计算欧式距离可以很好的复原内容。但是神奇之处来了,或许是随机尝试,或许是验证某个经过精确推导的数学公式,又或许是直觉的引导,某人发现了利用卷积神经网络提取风格特征的方法。

图像在某个卷积层的特征图统称为特征表示,那么在特征图之间两两求相关度,得到相关性矩阵,在原图像S和生成图像S的相关性矩阵上求欧式距离(风格损失函数)会如何呢? 答案就是提取出图像的风格特征。

图8. 风格重建和内容重建

图8中是分别采用风格损失函数和内容损失函数进行图像复原,上半部分是在不同层次的特征图上进行风格损失函数计算得到的不同的风格重建结果。下半部分则是在不同层次的特征表示上计算内容损失函数得到的不同的内容重建结果。

而将这两种损失函数加权组合起来,就得到了一张具有图像B的风格和图像A的内容的图像了。

图像风格转换-V2

上述方法对每一张图像都需要反复迭代多次进行求导,非常慢。所以首个图像风格转换应用Prisma在创业初期的做法是将图像传到GPU服务器上进行处理然后返回结果,导致服务器不堪重负经常不响应。

于是快速方法应运而生,网络结构如图5所示。在图5中,仍然是使用上述损失函数,但是不再是对噪声图像进行求导迭代,而是训练一个变换网络,将内容图像作为输入,然后将在变换网络的输出上计算内容和风格损失。这样,在变换某一张图像的时候,只要将这样图像输入进网络,做正向网络计算就能直接得到风格转换后的结果。

图9. 快速风格转换算法框架

图9的算法框架稍作变换就可以应用于图像超清化问题。在风格转换问题中,x和yc都是原图像,ys是风格图像。而在图像超清问题中,将风格图像和风格损失都去掉,然后x为低分辨率图像,yc为高分辨率图像,以此,可以将变换网络训练成处理超清化问题的网络。

图像风格转换-V3

V1和V2中都使用Gram矩阵来提取风格,这个方法没有严格的数学推导,比较tricky;在实践中也有混合不当的问题。如图10所示。

图10. 使用Gram矩阵时混合不当问题效果图

为了解决这个问题,V3算法中去除了Gram矩阵的应用,而是使用了最近邻算法。

将内容图像和风格图像都分为多个Patch,在各个Patch上计算损失函数,而整张图像的损失函数则为所有Patch上损失函数之和。

对于每个Patch而言,内容损失同上,但风格损失不再计算Gram矩阵,而是计算Patch的特征表示和风格图像中特征表示最接近的Patch的欧式距离。这样,既能达到更加平滑的效果,又可以摆脱Gram矩阵这样比较tricky的东西。效果对比如图11所示。

图11. 风格转换效果图,左图为内容图像,中图为V1算法的结果,右图为V3算法的效果

图像风格转换的三种典型算法至此就全部阐述了,换脸、图像修复和图像超清化均和这上述三种算法有密切的联系。

换脸

由于换脸是只针对人脸的操作,因而除了卷积神经网络外,还需要一定的预处理步骤,即将原图的人脸和目标人脸进行对齐。预处理步骤如图12所示。

图12.原图人脸和目标人脸的对齐

在预处理中,使用两种现有的技术,一种是人脸标定,即识别出人脸上的68个关键点,然后依据这68个关键点将人脸进行对齐。另一种是前后景切分,将人脸从背景中分割出来,只对人脸进行操作。

换脸时使用的卷积神经网络架构同图像风格转换-V3很类似,即输入图像是原图,目标人脸图像是风格图像。不同的地方有两点:

  • 需要目标图像的多张图像来适应不同的表情,也即神经网络不能产生表情,而是在目标图像中寻找最相似的表情。
  • 在使用最近邻来寻找Patch的时候,会根据关键点的位置进行搜索域的限制,即眼部的Patch只在目标图像的眼部附近进行搜索,但由于目标图像有多张,因而可以在多张图像上进行查找。

换脸效果如图13所示。

图13.使用Nicolas Cage和Tylar Swift对某章图像进行人脸替换,第一行为原图,第二行为Cage替换结果,第三行为Swift替换结果

图像修复

本文所言的图像修复问题是指依据现有的图像信息,将图像中缺失的部分复原回来。其实在该问题上,如果缺失部分有残存部分不存在的信息,是不能复原的。所复原后的图像是用背景将缺失部分进行填充。但即便如此,图像复原的效果也依然令人震撼。

深度学习下的图像修复算法可以看做是图像风格转换-V1,图像风格转换-V2和图像风格转换-V3的组合体。如图14所示。

图14. 图像修复的卷积神经网络框架

算法步骤分为两步走:

  • x0输入进内容生成网络得到生成图片x
  • x作为最后生成图像的初始值,保持纹理生成网络的参数不变,使用Loss NN对x进行梯度下降,得到最后的结果。

内容生成网络(Content Network)类似于图像风格转换-V2的结构,训练一个转换网络将缺失图像补全。但仅仅是这样并不能得到比较好的效果,还需要对纹理进行进一步的细化。纹理网络则是结构上同图像风格转换-V1算法类似,直接对图像进行求导,是图像越来越接近真实图像,但损失函数上却与图像风格转换-V3类似,在全局域内寻找最相似的Patch来进行损失函数的计算。

算法效果如图15所示。

图15. 使用图像修复算法进行物体移除,从左到右,第一张为原图,第二张为移除物体后的图像,第三张为非卷积网络算法处理结果,第四张为深度学习算法处理结果

图像超清

图像超清化算法的结构如同图像风格转换-V2,但在神经网络上有一些特殊性。如图16所示。

图16. 图像超清化网络结构

由于输入图像与输出图像有极大的相似性,因而,不需要让神经网络每一层都学习全部的图像信息,而是让神经网络学习到高清图像和低清图像的差值即可。

为了达到这种效果,在网络结构上进行如下变动。在处理的时候,首先,使用三次插值法将低清图像变为高清图像的尺寸,然后让神经网络学习高清图像与低清图像之差。

这种网络结构也称之为skip-connection,是最近热火的残差网络的基础之一。

自然,此处阐述的算法是最基本的算法,还有更加复杂的算法,比如基于对抗神经网络的算法和基于PixelCNN的算法等。

总结

本文首先介绍了图像风格转换的三种典型算法,然后以此为出发点,介绍了基于类似技术的另外三个应用,即图像修复,图像超清化和换脸。这些问题都属于图像生成问题。

在图像生成问题领域,还有很多前沿的技术是本文所没有涉及的,比如对抗神经网络和PixelCNN,这两种算法在图像超清领域已经有了比本文介绍的算法更好的效果。对抗神经网络甚至在很多其他的图像语义编辑问题上也有了很好的效果应用。

深度学习是一门正在快速变化的技术,新的技术突破与创新层出不穷。虽然不能真正达到AI的效果,但确实能够帮助我们在语言理解和图像理解上前进一大步。

引申链接

时间: 2024-11-23 12:38:35

基于深度学习的图像语义编辑的相关文章

基于深度学习的图像语义分割方法综述

近年来,深度学习技术已经广泛应用到图像语义分割领域.主要对基于深度学习的图像语义分割的经典方法与研究现状进行分类.梳理和总结.根据分割特点和处理粒度的不同,将基于深度学习的图像语义分割方法分为基于区域分类的图像语义分割方法和基于像素分类的图像语义分割方法.把基于像素分类的图像语义分割方法进一步细分为全监督学习图像语义分割方法和弱监督学习图像语义分割方法.对每类方法的代表性算法进行了分析介绍,并详细总结了每类方法的基本思想和优缺点,系统地阐述了深度学习对图像语义分割领域的贡献.对图像语义分割相关实

基于深度学习的图像语义分割技术概述之背景与深度网络架构

图像语义分割正在逐渐成为计算机视觉及机器学习研究人员的研究热点.大量应用需要精确.高效的分割机制,如:自动驾驶.室内导航.及虚拟/增强现实系统.这种需求与机器视觉方面的深度学习领域的目标一致,包括语义分割或场景理解.本文对多种应用领域语义分割的深度学习方法进行概述.首先,我们给出本领域的术语及主要背景知识.其次,介绍主要的数据集及难点,以帮助研究人员找到合适的数据集和研究目标.之后,概述现有方法,及其贡献.最后,给出提及方法的量化标准及其基于的数据集,接着是对于结果的讨论.最终,对于基于深度学习

基于深度学习的图像语义分割技术概述之5.1度量标准

本文为论文阅读笔记,不当之处,敬请指正. A Review on Deep Learning Techniques Applied to Semantic Segmentation:原文链接 5.1度量标准 为何需要语义分割系统的评价标准? 为了衡量分割系统的作用及贡献,其性能需要经过严格评估.并且,评估须使用标准.公认的方法以保证公平性. 系统的多个方面需要被测试以评估其有效性,包括:执行时间.内存占用.和精确度. 由于系统所处背景及测试目的的不同,某些标准可能要比其他标准更加重要,例如,对于

(新)基于深度学习的图像语义分割技术概述之5.1度量标准

http://blog.csdn.net/u014593748/article/details/71698246 本文为论文阅读笔记,不当之处,敬请指正. A Review on Deep Learning Techniques Applied to Semantic Segmentation:原文链接 5.1度量标准 为何需要语义分割系统的评价标准? 为了衡量分割系统的作用及贡献,其性能需要经过严格评估.并且,评估须使用标准.公认的方法以保证公平性. 系统的多个方面需要被测试以评估其有效性,包

【超分辨率专题】—基于深度学习的图像超分辨率最新进展与趋势

1.简介 图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题,在医疗图像分析.生物特征识别.视频监控与安全等实际场景中有着广泛的应用.随着深度学习技术的发展,基于深度学习的图像超分方法在多个测试任务上,取得了目前最优的性能和效果.本文介绍的一篇综述(Deep Learning for Image Super-resolution:A Survey)给出了一个统一的深度学习视角,来回顾最近的超分技术进展,主要包括三个方面: 给出了综合性的基于深度学习的图像超分技术综述,包括问题设置.数据

TensorFlow实现基于深度学习的图像补全

目录 ■ 简介 ■ 第一步:将图像理解为一个概率分布的样本 你是怎样补全缺失信息的呢? 但是怎样着手统计呢?这些都是图像啊. 那么我们怎样补全图像?  ■ 第二步:快速生成假图像 在未知概率分布情况下,学习生成新样本 [ML-Heavy] 生成对抗网络(Generative Adversarial Net, GAN) 的架构 使用G(z)生成伪图像 [ML-Heavy] 训练DCGAN 现有的GAN和DCGAN实现 [ML-Heavy] 在Tensorflow上构建DCGANs 在图片集上跑DC

深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全

原文地址:Image Completion with Deep Learning in TensorFlow by Brandon Amos 原文翻译与校对:@MOLLY && 寒小阳 ([email protected]) 时间:2017年4月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/52665396 声明:版权所有,转载请联系作者并注明出 简介 第一步:将图像理解为一个概率分布的样本 你是怎样补全缺失信息的呢? 但是怎

4. 基于深度学习的目标检测算法的综述(转)

4. 基于深度学习的目标检测算法的综述(转) 原文链接:https://www.cnblogs.com/zyly/p/9250195.html 目录 一 相关研究 1.选择性搜索(Selective Search) 2.OverFeat 二.基于区域提名的方法 1.R-CNN 2.SPP-Net 3.Fast R-CNN 4.Faster R-CNN 5.R-FCN 三 端对端的方法 1.YOLO 2.SSD 四 总结 在前面几节中,我们已经介绍了什么是目标检测,以及如何进行目标检测,还提及了滑

基于深度学习的目标检测研究进展

前言 开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了什么物体?他们在什么位置?这还不简单,图中有一个猫和一个人,具体的位置就是上图右侧图像两个边框(bounding-box)所在的位置.其实刚刚的这个过程就是目标检测,目标检测就是"给定一张图像或者视频帧,找出其中所有目标的位置,并给出每个目标的具体类别". 目标检测对于人来说是再简单不过的任务,但是对于计算机来说,它看到的是一些值为0~255的数组,因而很难直接得到图像中有人或者猫这种高层语义概念,也不清楚目标出现在