图像风格迁移_图像风格迁移算法

图像风格迁移_图像风格迁移算法风格迁移指的是两个不同域中图像的转换,具体来说就是提供一张风格图像,将任意一张图像转化为这个风格,并尽可能保留原图像的内容

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定


前言

在这里插入图片描述

风格迁移指的是两个不同域中图像的转换,具体来说就是提供一张风格图像,将任意一张图像转化为这个风格,并尽可能保留原图像的内容(否则就成了艺术创作了…)

图像的风格迁移只是目的,实现图像风格迁移的手段是多种多样,所谓条条大路通罗马。个人根据时间线将其概况为三种大类别。传统的图像风格迁移;基于神经网络的图像风格迁移和基于对抗生成网络的图像迁移。

至于图像风格迁移可以用来做什么,大多数情况下可以实现类似于滤镜的图像处理效果;基于对抗生成网络实现的风格迁移甚至可以实现语义上的迁移(橘子变苹果,马变斑马,卡车变汽车以及一些侵犯肖像权的不好变换…)。总的来说,这些多种多样的变换不仅好玩儿,也是数据集扩充的另一个思路和手段。


一、传统的图像风格迁移(Traditional style transfer)

时间线:2015年前30到40年间

1.1计算机图形学领域和计算机视觉领域(Computer Graphics&Computer Vision)

传统的图像风格迁移可以从两个角度来说:计算机图形学领域和计算机视觉领域
防止混淆,这里简单介绍两者的区别(顺带提一下电子图像处理)

计算机图形学Computer Graphics,简称 CG 。输入的是对虚拟场景的描述,通常为多边形数组,而每个多边形由三个顶点组成,每个顶点包括三维坐标、贴图坐标、rgb 颜色等。输出的是图像,即二维像素数组。

计算机视觉Computer Vision,简称 CV。输入的是图像或图像序列,通常来自相机、摄像头或视频文件。输出的是对于图像序列对应的真实世界的理解,比如检测人脸、识别车牌。

电子图像处理Digital Image Processing,简称 DIP。输入的是图像,输出的也是图像。Photoshop 中对一副图像应用滤镜就是典型的一种图像处理。常见操作有模糊、灰度化、增强对比度等。

这三者于人工智能的总结如下图所示:
在这里插入图片描述

1.2非真实感图形学(Non-photorealistic graphics)和纹理迁移(texture transfer)

下面回归正题:
图形风格转移在计算机图形学领域其实就是非真实感图形学(Non-photorealistic graphics)
其中大体又可以分为三种方法:笔触渲染的方法(Stroke-based Rendering)、基于图像类比的方法(Image Analogy)、基于图像滤波的方法(Image Filtering)。但是这些方法都没有大规模落地。

首先,基于笔触的方法在设计前需要确定某一风格,不能简单的扩展到其他风格的迁移;基于图像类别的方法需要成对的数据集,然而采集成对的数据集在现实场景下几乎是不可能的,打个比方,我们要采集晴天和雨天两种风格下的猫咪,不可能采集到两种图片分别在晴天和雨天下猫咪的姿态一模一样;最后,通过图像滤波的方式速度快,效果稳定,可满足工业界落地的需求,但是滤波器的值是算法工程师不断调整出来的,十分的耗时耗力,而且模拟出来的风格种类也是有限的。这就是为什么这些方法没有大规模工业落地的原因。然后,隔壁的计算机视觉领域的进展也不理想。

在计算机视觉领域,风格迁移被视为纹理合成的扩展问题,当时甚至连名字都没有,更多的叫法是纹理迁移(texture tansfer)因为风格其实也可以看做一种纹理,假如在合成纹理图的时候刻意的保留一些语义信息(即输入图的内容信息),那就得到了风格迁移的结果。这一方法没有流行起来的原因是当时纹理迁移的是基于像素的底层图像特征,并没有过多的考虑语义信息,因此图像的迁移结果并不理想。

其实,我们可以将图像迁移看做图像纹理提取和图像重建两个步骤,2015年前,仅在图像纹理合成上有些许成就,但在图像重建领域考虑的并不周全。但是随着深度学习的飞速发展,基于神经网络的图像迁移方法有了巨大的进步,以下的介绍都是基于神经网络的图像迁移方法。该课题在效果上看上去是一个image-to-image,似乎属于DIP领域,可实际应用的越是计算机视觉领域的知识和方法,具体来说是神经网络知识和深度学习方法。

二、基于神经网络的风格转换(Neural style transfer)

时间线:2015年后

在上一小节说道,我们可以通过纹理建模方法(Visual Texture Modelling),主要研究如何表示一种纹理,是纹理合成技术的核心。

以往的纹理合成方法大致可以分为两大类:
(1)基于统计分布的参数化纹理建模方法(Parametric Texture Modelling with Summary Statistics)
(2)基于 MRF 的非参数化纹理建模方法(Non-parametric Texture Modelling with MRFs)。

基于统计分布的参数化方法主要将纹理建模为 N 阶统计量,而基于 MRF 的方法一个经典套路是用 patch 相似度匹配进行逐点合成。纹理建模方法的相关研究解决了图像风格化迁移的第一个大问题:如何对风格图中的风格特征进行建模和提取。然而,如何将风格和内容混合然后还原成一个相应的风格化结果呢?这就到了另一个领域——图像重建(Image Reconstruction)了。

图像重建算法其实也可以分为两类:
(a)基于在线图像优化的慢速图像重建方法(Slow Image Reconstruction based on Online Image Optimisation)
(b)基于离线模型优化的快速图像重建方法(Fast Image Reconstruction based on Offline Model Optimisation)

第一类图像重建的方法是在图像像素空间做梯度下降来最小化目标函数。这一类算法的过程可以理解为:由随机噪声作为起始图,然后不断迭代改变图片的所有像素值来寻找一个目标结果图 x’ 。由于每个重建结果都需要在像素空间进行迭代优化很多次,这种方式是很耗时的,占用的计算资源以及需要的时间开销很大。为了加速这一过程,一个直接的想法是设计一个前向网络,用数据驱动的方式,喂给它很多训练数据去提前训练它,训练的目标就是给定一个输入,这个训练好的网络只需要一次前向就能输出一张重建结果图像。即第二类方法 。

基于神经网络的风格迁移就是以上面的四大类方法进行排列组合。

便于理解,这里可以将图像风格迁移想象成一个虚拟画家,这个画家的目的就是学习并创作各种风格的图像,我们的目的就是让这个画家具备智能,以下会穿插画家的类比,方便理解。

2.1 基于在线图像优化的慢速图像风格化迁移算法(Slow Neural Method Based On Online Image Optimisation)

2.1.1 基于统计分布的参数化慢速风格化迁移算法(Parametric Slow Neural Method with Summary Statistics)这一类方法是基于在线图像优化的慢速图像重建方法和基于统计分布的参数化纹理建模方法结合而来的,即上面提到的(1)+(a)。

Neural style transfer的开山之作,祖师爷 Gatys 在2015年提出的‘Texture Synthesis Using Convolutional Neural Networks’就是基于此方法的。如下图所示,输入是噪声底图,约束是Style Loss和Content Loss分别用来优化风格图像的风格和目标图像的内容。
在这里插入图片描述

简单说便是输入一张随机噪声构成的底图,通过计算Style Loss和Content Loss,迭代update底图,使其风格纹理上与Style Image相似,内容上与原照片相似。正常的训练过程是通过loss反向传播更新网络参数,这里则是用一个已经训练好的VGG16作为backbone,锁住参数,更新输入的底图。类比画家作画的话,随机噪声就是画家的画纸,网络提取更新的内容特征相当于画家打的线稿,风格特征则是画家写真的风景对象(晴天,雨天,雪天等等各种风格)。可以想象,这种方式是十分耗时的,而且每张结果都需要长时间的训练(就想作家作画每一张都需要很长时间一样)。但是好处是由于长时间的训练,每幅画的效果还是很不错的。

具体说,论文用 Gram 矩阵来对图像中的风格进行建模和提取,再利用慢速图像重建方法,让重建后的图像以梯度下降的方式更新像素值,使其 Gram 矩阵接近风格图的 Gram 矩阵(即风格相似),然后,用VGG网络提取的高层feature map来表征图像的内容信息,通过使 VGG 网络对底图的提取的高层feature map接近目标图高层的feature map来达到内容相似,实际应用时候经常再加个总变分 TV 项来对结果进行平滑,最终重建出来的结果图就既拥有风格图的风格,又有内容图的内容。

额外提一下,Gram矩阵是论文的核心思想,是一种基于统计分布的参数化纹理建模方法,作者发现Gram矩阵可以很好的提取图像风格,具体原理这里就不展开叙述了。

再讲一下如何提取图像的内容特征,这里使用VGG网络高层特征表达目标图像的内容特征。得益于对神经网络黑盒特性的不断研究,学者们发现,神经网络的中间层提取到的图像特征是不一样的,越靠近输入层的中间层提取到的特殊是浅层特征(即,点,线,色块等低级特征);越靠近输出层的中间层提取到的特征是高级特征(例如,边,角,轮廓等)因此,图像的内容信息可以使用神经网络提取到的高级特征来表达(实际上,Gram矩阵是对神经网络提取的浅层特征做变换得到的,用来表示风格)。

总结一下,这篇开山之作的算法虽然生成的图片看起来很不错,但是仍存在以下问题:

由于每次迁移都要对网络进行训练,速度是非常慢的,无法实现实时迁移;
应用在照片上进行风格迁移,会出现失真的情况;

针对第一个问题,Johnson提出的fast-neural -style在本文网络模型前增加一个转换网络,转换网络的输入是内容图片,输出是风格迁移图片。而本文的网络模型称为损失网络,用于计算损失。为每个风格图片训练一个网络,这样在测试时,给定一张内容图片,只需要一次前向过程即可得到生成图片。这对第二个问题,康奈尔大学和Adobe公司合作推出了一篇文章:Deep Photo Style Transfer,通过对损失函数进行改进,使得可以在照片之间进行风格迁移且不失真。

当然,基于统计分布的参数化纹理建模方法不只Gram矩阵一种,才疏学浅这里就不一一介绍了。

2.1.2 基于MRF的非参数化慢速风格化迁移算法(Non-parametric Slow Neural Method with MRFs)

另外一类慢速风格化算法就是利用基于 MRF 的非参数化纹理建模方法对风格信息进行建模了,即第二篇开篇提到的(2)+(a)。代表性工作由浙大出身、德国美茵茨大学 Postdoc Chuan Li 学长完成并发表于 CVPR 2016的Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesis

其核心思想是提出了一个取代 Gram 损失的新的 MRF 损失。思路与传统的 MRF 非参数化纹理建模方法相似,即先将风格图和重建风格化结果图分成若干 patch,然后对于每个重建结果图中的 patch,去寻找并逼近与其最接近的风格 patch。

与传统 MRF 建模方法不同之处在于,以上操作是在 CNN 特征空间中完成的。另外还需要加一个祖师爷 Gatys 提出的内容损失来保证不丢失内容图中的高层语义信息。

这种基于 patch 的风格建模方法相比较以往基于统计分布的方法的一个明显优势在于,当风格图不是一幅艺术画作,而是和内容图内容相近的一张摄影照片(Photorealistic Style),这种基于 patch 匹配(patch matching)的方式可以很好地保留图像中的局部结构等信息。

至此,我们创作的虚拟画家已经学会了如何作画,前提是需要提供给它两张图片,一张告诉它画什么,一张告诉它画什么风格。关键是这个画家的工作方式是一幅一幅的进行从头作画,看上去工作效率并不是很高。

2.2 基于离线模型优化的快速图像风格化迁移算法(Fast Neural Method Based On Offline Model Optimisation)

本节算法主要为了解决上一小节的算法速度慢这一缺点。核心思想就是利用基于离线模型优化的快速图像重建方法来节省时间。具体来说就是预训练一个前向网络,使得图像经过一次前向计算就可以得到图像重建结果,在依据各自约束来优化这一结果。根据一个训练好的前向网络能够学习到多少个风格作为分类依据,这里可以将这一类算法再细分为单模型单风格(PSPM)、单模型多风格(MSPM)和单模型任意风格(ASPM)的快速风格化迁移算法

类比画家来说就是我们的画家工作效率太低了,我们希望它更智能,希望它画的更快。

2.2.1 PSPM的快速风格迁移(Per-Style-Per-Model Fast Neural Method)
主要想法是针对每一风格图,我们去特定的训练处一个前向网络,这样当测试的时候,我们只需要向模型中输入一张图,经过一次前向计算就可以得到输出结果。这种方法按照纹理建模的方式不同其实又可以分成基于统计分布的参数化纹理建模和基于MRF的非参数化纹理建模两类,即第二节开篇提到的(1)+(b)和(2)+(b)。

(1)+(b)这一小类算法代表性工作主要有两个,一个由斯坦福的 Justin Johnson 和李飞飞教授提出的 Perceptual Losses for Real-Time Style Transfer and Super-Resolution;另一个由俄罗斯成立不久的 Skolkovo 科技研究所的 Ulyanov 提出的Texture Networks: Feed-forward Synthesis of Textures and Stylized Images

李飞飞的模型如下图所示
在这里插入图片描述
相比于祖师爷Gatys提出的模型相比,输入不再是噪声底图而是目标图像,并增加了一个autoencoder形状的前向网络来拟合风格转移的过程,其他思想相同:损失函数仍是用另一个神经网络(一般是VGG)提取的content loss+style loss,并统称perceptual loss,纹理建模使用Gram矩阵来表达。

Ulyanov的模型与李飞飞提出的相似,不同之处在于两个工作的具体网络框架设计不同,一个基于当时最新的残差网络设计的,一个是设计了多尺度的网络。Ulyanov后来又在 CVPR 2017 上对其之前的工作做了改进,他们发现 Instance Normalization 比 Batch Normalization 能够更快、更好地使模型达到收敛(其实就是把 batch normalization 的 batch size 设成 1)。Instance Normalization 的 idea 最早是在论文Revisiting Batch Normalization For Practical Domain Adaptation 中提出的 ,即文章中的 Adaptive Batch Normalization (AdaBN)。

第二小类(2)+(b)基于 MRF 的快速 PSPM 风格化算法由Chuan Li提出的Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks属于此类方法,他们将自己之前提出的基于 patch 的慢速风格化算法进行了加速。同样是训练一个前向网络,Chuan Li 进一步利用 GAN 中的判别网络的想法来取代他们慢速风格化算法中的 patch 匹配(patch matching)过程。这一思想在清华出身的朱俊彦发表的论文 Image-to-Image Translation with Conditional Adversarial Networks 中被进一步延伸和发展。

总结一下,使用类比画家作画的思维描述,不管是(1)+(b)还是(2)+(b),(b)其实就是一种类似颜色模板的东东,不管勾勒的线稿是什么,都使用这种模板进行上色。比如这种模板可能是白雪皑皑的天气,不管画中的内容是什么,最终的结果都是统一风格的——雪中风景图。在模型角度来说,这个颜色模板就是训练出来的前项网络,勾勒的线稿就是Gram矩阵或者MFR所表达的特征,至于到底是使用Gram提取内容特征还是MFR提取内容特征还是其他的方式仅仅是方法不同而已,相当于画家作画的方式可能是油画,是素描,是水彩等等,只要能勾勒出风景的内容信息即可。使用模板进行创作的速度自然比画家一张一张的进行作画要快得多。至此,我们的画家已经学会如何快速作画了,当然,获得这个本领的前提是要对它进行提前训练。

2.2.3 MSPM 的快速风格转移(Mutil-Style-Per-Model Fast Neural Method)
楼上的单模型快速风格转化迁移算法对于每一个风格都要训练一个模型;这在风格类别较小的情况下是可行的,但是让所需风格类别是成千上万种时,就需要成千上万个模型,这是工业落地所不能接受的。

实际上,把多个风格整合到一个模型上的需求是合理的。类比来说,一名画家不应该只会画冬天的画,难道我要创作四季的风景还需要四名画家吗?这就显的有点人工智障而非智能了。。。。。从理论上来说也是合理的,例如一个树的四季风景图,不管是春夏秋冬,风格图总有相似的地方,就树的例子来说,相似的是树干,树的树干在一年四季变换是较小的,变换大的只是枝叶而已。因此,只需要发掘不同风格的相似部分就可以把不同风格整合到一个模型中。换句话说,即使风格不同,结果图中也有相似部分,因此对每个风格去训练一个模型是一件冗余的,不太合理的浪费资源的事情。这个思路的解决方案就是发掘不同风格网络之间的共享部分,然后对新的风格只去改变其有差别的部分,并保持共享部分不变

这就是 Google Brain 的众大佬们研究出来的一个 MSPM 算法的基本思路 A Learned Representation for Artistic Style。他们发现在训练好的一个风格化网络基础上,只通过在 Instance Norlization 层上做一个仿射变换(他们起了个名字叫 Conditional Instance Normalization,简称 CIN),就可以得到一个具有完全不同风格的结果。但是CIN 层为什么有效的理由现在也没有严格的推导证明。一个大概的解释是 CIN 能够进行一种 style normalization,能够将图像中的风格直接 normalize 成另外一种风格。另一个由陈冬冬提出的 MSPM 法 StyleBank: An Explicit Representation for Neural Image Style Transfer 与 Google Brain 这篇思路有异曲同工之妙,核心思想为把风格化网络中间的几层单独拎出来(文章中起了个名字叫 StyleBank 层),与每个风格进行绑定,对于每个新风格只去训练中间那几层,其余部分保持不变

上面俩工作的共同点都是把网络的一部分拿出来与每个风格进行绑定,从而实现 MSPM,虽然随着风格的增加,模型大小也会增大,即使远远低于正比关系。所以呢,另外有一些研究者想,能不能试试完全用一个网络,看它能不能学到多个风格。这时候需要考虑的问题是既然只用一个网络,那就需要给网络一个信号,我们需要风格化成哪一个风格。这一思路最早由 Amazon AI 的张航 在 2017 年 3 月提出Multi-style Generative Network for Real-time Transfer。 该算法的核心思想是把通过 VGG 网络提取到的风格特征与风格化网络中的多个尺度的中间层的 feature map 通过提出的 Inspiration Layer 结合在一起,相当于将风格特征作为信号输入到网络中来决定要风格化成哪一个风格。最终算法的效果非常显著。另外除了把风格特征作为信号外,另一个选择是把图像像素作为信号输入进去风格化网络。这一想法的可行性在浙大李一君的工作中得到了证明 Diversified Texture Synthesis With Feed-Forward Networks首先将每一张风格图与一个随机产生的噪声图进行绑定,然后将噪声图与风格化网络中间层的 feature map 进行 concat,作为网络进行风格选择的信号

2.2.3 ASPM快速风格化迁移算法(Arbitrary-Style-Per-Model Fast Neural Method)

有了上面的介绍,现在已经可以利用深度学习做到使用一个模型迁移多个风格了,美中不足的是,对于新的一组风格,我们仍需要额外的训练时间开销

类比来说,至此,我们使用深度学习创造出来的一个画家就已经初具智能了。但是天赋不足,每次学习新的画风时都需要练习很长时间。于是,我们考虑是否可以创造出一个天赋异禀的画家,对于新的风格,只需要看一眼就可以理解并创作而不需要长时间的练习呢?

果然,科学的探索是神奇且永无止境的,这种 Zero-shot Fast Style Transfer 的单模型任意风格转换( ASPM)的畅想最早由多伦路大学的天才博士陈天奇解决。他提出的 *Fast Patch-based Style Transfer of Arbitrary Style算法是基于 patch 的,可以归到基于 MRF 的非参数化 ASPM 算法。基本思想是在 CNN 特征空间中,找到与内容 patch 匹配的风格 patch 后,进行内容 patch 与风格 patch 的交换(Style Swap),之后用快速图像重建算法的思想对交换得到的 feature map 进行快速重建。但由于 style swap 需要一定的时间开销,还没有达到实时的效果。

第一篇能达到实时的 ASPM 算法由康奈尔的大牛 Xun Huang 提出 Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization。其工作主要受到 MSPM 的 CIN 层启发,提出一个 Adaptive Instance Normalization (AdaIN)。AdaIN 的输入是通过 VGG 提取的风格和内容特征,用数据驱动的方式,通过在大规模风格和内容图上进行训练,让 AdaIN 能够直接将图像中的内容 normalise 成不同的风格。这一工作录用为 ICCV 2017 的 Oral。另外一个数据驱动的 ASPM 方法是Exploring the Structure of a Real-time, Arbitrary Neural Artistic Stylization Network。可以看做是前一篇的一个 follow-up 的工作,既然通过改变 CIN 层中仿射变换的参数,就可以得到不同的 style,换言之,只要任意给一个风格,我们只需要知道他的 CIN 层中的仿射变换的参数就可以了。沿着这个思路,Google Brain 的研究者设计和训练了一个 style prediction network 去专门预测每个 style 的仿射变换的参数,style prediction network 需要大规模 style 和 content 图来进行训练。这个方法的缺点也很明显,数据驱动的方式不可避免地导致风格化效果与训练数据集中 style 的种类和数量非常相关

由以上数据驱动 ASPM 算法的局限性,李一君学长进一步思考能不能用一种不需要学习训练的方式(style learning-free),而是单纯使用一系列特征变换来进行 ASPM 风格迁移 Universal Style Transfer via Feature Transforms。李一君发现在 VGG 提取的特征上用 ZCA whitening transform 能够把一张图片的风格信息抹去,而保留原有高级语义信息,之后应用 coloring transform 将风格图的颜色进行迁移,即可重建出效果不错的风格化结果。这一工作发表于 NIPS 2017 上,也是很少见的一篇 NIPS 上发表的 application 类的文章,足见学术界对 Neural Style Transfer 的关注。

至此,我们已经可以使用深度学习创作出一名天赋异禀的画家了。

三, 基于对抗生成网络的风格迁移(Style transfer based on GAN)

时间线: 2017年后

3.1 对抗生成网络(adversarial generative network)

严格来说,基于GAN的风格迁移其实是属于基于神经网络的风格迁移范围之内的,因为GAN网络本质上就是神经网络,只是由于其巧妙的loss函数设计方法,使得GAN网络的效果在图像生成领域一马当先,其研究也极为火热,近些年已有开山立派之态。

为了对比来说GAN网络和神经网络的异同,这里重新贴一下祖师爷Gatys的模型在这里插入图片描述
这里在贴一张普通GAN网络的模型
在这里插入图片描述
相同点显而易见,输入都是噪声图像,输出也是一张图像,经过的网络都是神经网络。不同之处则在于loss的设计方面,Gatys模型的loss函数是使用VGG网络去提取风格图片和目标图片的特征做label;提取输出图片的特征做结果,并比较两者的差异作为loss。而Gan网络的loss设计比较巧妙,Gan网络由生成器和判别器两个网络组成,生成器负责对输入图片进行重建;其重建结果与真实数据集一起送入判别网络进行判断,判别网络负责分辨生成器的输出结果到底是来自真实数据集的真实图片还是来自其本身的生成图片。这时,巧妙的事情就发生了,生成器会努力使自己生成的图片骗过判别器,方法自然是生成的图片越真实越容易欺骗判别器;判别器则会努力分辨输入到底是真实的还是生成的,其反馈来指导生成器生成更真实的图片,从而形成一种动态博弈,结果是输出的图片在内容和风格上都类似于真实数据集。

这时,因为对GAN网络并没有内容和风格上的约束,因此其输出结果更像是艺术创作,只不过由于loss设计的巧妙性,其模型创作出来的结果非常的逼真,甩了其他图片生成模型好几条街。由于篇幅原因,对普通GAN网络不再展开解释,好奇的小伙伴可以自行搜索,尤其是对抗损失的理解。这对理解下面的GAN变体很有帮助。

3.2 CycleGAN(Unpaired Image-to-ImageTranslation using Cycle-Consistent Adversarial Networks)

现在要通过GAN网络实现风格迁移需要考虑的事情就是如何为GAN网络加上内容约束和风格约束了,著名的CycleGan变通过自己巧妙的loss设计实现了这一点。

上图的原始GAN网络可以进行如下的简化描述
在这里插入图片描述
输入x 经过生成器 G 得到输出Y ,判别器用来负责判别Y是取自真实数据集还是生成的图像。通过这一约束,使得生成器生成的图片越来越真实,但是由于没有内容和风格约束,所以模型的输出结果是不可预测的,这更像是艺术创作。就像给画家一张白纸,说你去画画吧,最后只评判画家画的画写不写实,因此画家可以随意创作,这要保证作品看起来真实就好。那么如何添加约束?

首先, 要做风格转换,就必须要有两套不同风格的数据集,例如春天数据集和冬天数据集;GAN网络的输入也不再是随机噪声,而是其中一个数据集,这里使用春天数据集,经过生成器后重建的结果图片与冬天数据集一起作为判别器的输入,让判别器来判断该冬天风格图是否真实,从而指导生成器生成的图片是冬天风格且真实的。这样这个生成器G就通过优化对抗loss就学习到了一种由春天风格到冬天风格的一种映射,可以将任意一张输入图片转换为冬天风格的。这里的风格约束与Gatys的思路就完全不同了,一个是通过不断优化结果图与风格图Gram矩阵的距离作为loss;一个是通过对抗损失的动态博弈最为loss。值得一提的是,由于对抗损失只是为了学习不同风格域间的映射,因此两个数据集里的数据不必是成对的,(通俗的理解是风格作为纹理特征的延伸是一种低级特征,内容作为语义信息是一种高级特征。当我们只希望从不同数据集学习风格映射时,只需要保证不同数据集风格一致即可,比如一个数据集都是冬天,另一个数据集都是夏天,对数据集中具体照片的内容没有要求,是猫是狗是啥姿态无所谓,即可以是非配对的)这一点很重要因为现实中不同风格下成对的数据是很难很难获得的

但是,仅仅使用两个数据集运用GAN网络是不能达到风格迁移的目的的,原因有二:其一,没有内容约束,生成的结果无法预测,失去了风格迁移的意义(我们希望风格迁移后的语义信息是不变的);其二,GAN网络的训练倾向于模式崩塌(Model collapse),这里不展开解释,简单来说就是,当生成器发现生成某一张图片可以轻易的骗过判别器时,其他的生成结果就会倾向类似于该照片。即当生成器发现一个好的解时,就疯狂输出类似于这个解的结果,不愿意去做其他的尝试,但是,关键在于该解并不一定有较好的视觉效果并不一定是我们期望的结果,只是因为该解的loss较优,生成器才做此决定,而我们希望生成器多去尝试,以找到最优解(这里隐含一点,个人认为loss只是指导,并不代表loss最优,结果的视觉效果就是最优的)。

言归正传,CycleGan如果进行内容约束?如下图所示
在这里插入图片描述
对输出结果进行一次反变换来对比原始输入和反变换后的输出间的差异即可进行内容上的约束
类比语言翻译:我的目的是将汉语风格的X “神经网络真奇妙~” 变换成英语Y。生成器G相当于翻译机,经过在这里插入图片描述过程可以有多个翻译结果:例如 1,“神经net very fun” 2,“neural network 真好玩” 3,“neural network very fantastic” 4,“I am very handsome” 判断器D的任务是判断哪个结果更像英语,因此判断器给出的结果可能是3,也可能是4,因为它们都是英语,但是,显然4是不对的。如何进行约束呢?只需要再进行一次反变换,判断其结果和原始输出之间的差别即可。
经过在这里插入图片描述过程,我的得到3的结果是神经网络真奇妙,与原始输入结果(神经网络真奇妙)的距离为0,4的结果是我真帅与原始结果的距离就很大了。这变达到了内容约束的目的。将后半部分一翻转就是一个圆,如下图所示,这就是CycleGan名字的由来。
在这里插入图片描述
总结一下,CycleGan使用两个不同风格的数据集,通过优化对抗损失来到底风格约束的目的,这一过程需要生成器和判别器两个网络组成;CycleGan又通过一次反向变化来达到内容约束的目的,同样,这一过程也需要生成器和判别器两个网络组成。因此CycleGan的网络组成部分是两个生成器和两个判别器四部分,loss组成部分是对抗loss和原始输入与反变换后输出的内容距离loss两部分组成

由于GAN网络在图像生成领域的效果卓越,因此也广泛应用于风格转换,各种基于GAN的变体都能达到风格转换的效果。CycleGan是其中非常有创新性的代表模型,与其同期发表的DiscoGAN和DualGAN于CycleGAN有异曲同工之妙,可以说是孪生兄弟,篇幅原因就不展开介绍了,最后放一些cyclegan的效果图瞻仰一下吧
在这里插入图片描述
顺便提一下CycleGan的问题,CycleGAN 存在一种情况,是它能学会把输入的某些部分藏起来,然后在输出的时候再还原回来。比如下面这张图:
在这里插入图片描述
可以看到,在经过第一个生成器的时候,屋顶的黑色斑点不见了,但是在经过第二个生成器之后,屋顶的黑色斑点又被还原回来了。这其实意味着,第一个生成器并没有遗失掉屋顶有黑色斑点这一讯息,它只是用一种人眼看不出的方式将这一讯息隐藏在输出的图片中(例如黑点数值改得非常小),而第二个生成器在训练过程中也学习到了提取这种隐藏讯息的方式。那生成器隐藏讯息的目的是什么呢?其实很简单,隐藏掉一些破坏风格相似性的“坏点”会更容易获得判别器的高分,而从判别器那拿高分是生成器实际上的唯一目的。

3.3 StarGAN(StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation)

仔细思考一下,上面的CycleGAN其实是一个单模型单风格的风格迁移方式PSPM),甚至一个模型中就需要四个网络结构(两个生成器,两个判别器)。有时候我们可能希望图像能在n个风格下互转,比如春夏秋冬四季风格,安装CycleGAN的思想,我们就需要24个网络结构(12个生成器+12判别器)如下图:在这里插入图片描述
很明显这需要训练的生成器太多了,那可不可以像第二章Neurol Style Transfer提到的那样实现单模型多风格的风格迁移呢(MSPM)?于是StarGAN被提出来了。

StarGAN 在设计的时候就希望只用一个生成器去实现所有 domain 之间的互转。
对于判别器,它的输入是一张图片,它需要去鉴别出这张图片是真实图片还是生成器产生的图片,同时它还需要分辨出这张输入的图片来自哪种风格的。
对于生成器,它有两个输入,分别是目标风格和输入图片,它的输出是一张符合目标风格的图片。

首先风格的定义在 StarGAN 中是用一个 vector 表示的,相当于一种label用来区分不同风格。这与CycleGAN不同,CycleGAN压根就没有这个东东,因为不需要,具体解释就是CycleGAN是单风格转变,类比画家,CycleGAN画家只会画一种冬天风格的画,所以只需要告诉它“你去画画吧” , 它就可以开始工作了。但是,当这个画家既会画冬天也会画春天时,如果还只告诉他“你去画画吧”。它就傻了…这时候必须指明画冬天还是画春天,即,需要给它一个风格信号。举个例子:
在这里插入图片描述
那如果一个风格表示为 00101 00000 10,就意味着这是一个 CelebA 的 label,并且
这个风格是棕发年轻女性,如果希望要转移到的风格是黑发年轻男性,那么训练
过程如下图所示:在这里插入图片描述
首先原始图片被丢入这个生成器中,目标风格是 10011(黑发年轻男性),然后生成器就会产生一个黑发年轻男性的图片,接着这张图片又会再次被丢进这个生成器中,但是目标风格改成了 00101(棕发年轻女性),然后生成器就会产生一个棕发年轻女性的图片,StarGAN 希望这张图片和原始的输入的棕发年轻女性的图片尽可能相似,此处用到的loss 就是 CycleGAN 当中的 loss。另外一方面,第一次生成器产生的黑发年轻男性图会传给判别器,判别器一方面要判断这张图的真假,另外一方面还要判断出这张图的风格,如果判断结果是 10011 的话就证明这张图的效果是好的。
综上就是 StarGAN 的实现过程,它能实现多种风格之间的互转,并且模型比较小巧且高效

四,自动驾驶数据集的扩充(外传)

一般来说,晴天的数据集是比较好采集的,但是极端天气下的数据是稀有的,例如暴雪,暴雨,风暴,雷暴等等。这时,可以通过风格迁移来扩充稀有数据集。个人认为,综上述方法,基于神经网络的PSPM快速离线建模方法和基于GAN的CycleGAN是首先值得尝试的方法(验证ing…)


比较懒。。文章中提到的论文就列链接了,名字都比较全,感兴趣的小伙伴自己查就好。另外,附一些链接,都是一些写的不错了关于图像风格迁移的文章
https://www.sohu.com/a/260408837_166433
https://zhuanlan.zhihu.com/p/40322927
https://zhuanlan.zhihu.com/p/57564626
https://mp.weixin.qq.com/s/iV-OXiKF1jgAhSmX4QUIXw
https://zhuanlan.zhihu.com/p/26332365

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/198370.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python单例模式

    实现单例模式的三种方法:类实现、装饰器实现和元类实现

    2021年12月18日
  • python操作windows窗口获取窗口句柄「建议收藏」

    python操作windows窗口获取窗口句柄「建议收藏」python获取窗口句柄在Windows下获取窗口句柄时操作系统版本和软件版本对获取有影响,就会出现在本地调试正常的程序,交付使用的时候报错。查看windows所有可显示的窗口句柄及窗口名称。#-*-coding:utf-8-*-“””FileNamewindows_guiCreatedon2019-11-06@author:jj”””importwin…

  • Keil 使用教程(详解)「建议收藏」

    Keil 使用教程(详解)「建议收藏」(1)打开Keil,点击project新建(2)选择合适的型号,没有STC的选项,不要紧,一般C51的好多兼容的(3)不用汇编的话,下面的这个对话框选择否就可以了(4)点击新建一个文件(5)选择保存,并命名为.c(6)双击SourceGroup(7)添加.c文件(8)写完程序后,点击标号1处的按钮,然后点击标号2处的output,依次点击3和4,生成.hex文件…

  • 解决eclipse乱码问题[通俗易懂]

    解决eclipse乱码问题[通俗易懂]本文章主要解决eclipse工程区乱码问题。

  • centos 改动字符集为GB2312的方法[通俗易懂]

    centos 改动字符集为GB2312的方法

  • 安全测试:BurpSuite 学习使用教程

    安全测试:BurpSuite 学习使用教程一、简介:BurpSuite是用于攻击web应用程序的集成平台。它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。这些工具设计了许多接口,以促进加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP消息,持久性,认证,代理,日志,警报的一个强大的可扩展的框架。它主要用来做安全性渗透测试

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号