图像风格迁移简介

图像风格迁移简介1 风格迁移开山之作。2015年,Gatys等人发表了文章《A Neural Algorithm of Artistic Style》,首次使用

大家好,欢迎来到IT知识分享网。

1 风格迁移开山之作

1.1 思想简介

2015年,Gatys等人发表了文章《A Neural Algorithm of Artistic Style》,首次使用深度学习进行艺术画风格学习。

作者的目的是想把艺术大师的名画的画风迁移到普通的图片上,使机器也可以画名画。这就涉及到两方面的图片:画风图片(一般是名画)、内容图片(我们想画的内容)。

输入是:内容图像、style和合成图像

由于合成图像未知,因此可以将其设置为白噪声,同时将合成图像的梯度设置为True,这一步来看合成图像就是待求的参数,可以理解为权重。

简单理解:

图像风格迁移简介

实际操作:

  • 通过不带全连接层的vgg网络分别抽取内容图、画风图以及生成图(就是最后你画的“名画”)的特征图
  • 然后分别用内容特征和生成特征图计算内容损失,用画风图和生成图计算风格损失,将两个损失合起来,作为总体损失。
  • 最后用总体损失来计算生成图的梯度然后更新生成图

其中:

  • 生成图最初初始化为白噪声图。
  • vgg用imagenet 预训练模型
图像风格迁移简介

作者的意图是想通过CNN分别抽取内容图的特征图、名画的特征图

然后用内容特征图做出目标内容;用画风特征图做出目标画风

根据生成图的内容与目标内容的差异来“画”(优化)内容;用生成图与目标画风的差异来“画”(优化)风格。

这样一来,上面框图中最上面的网络和最下面的网络实际只跑一次,但中间网络要跑N次,但这N次跑前向和后向,后向不会优化网络参数只会优化生成图

特征图可以选择vgg 5个卷积模块中任何一个模块的卷积层的输出,实际画风提取了多个卷积层的输出。内容直接用特征图表示画风采用每个特征图自己与自己的格拉姆矩阵表示,通常将多个卷积层提取的多个特征图作格拉姆矩阵后叠加。

格拉姆矩阵是计算相关关系的,计算特征图自己的格拉姆矩阵是提取像素与像素之间的关联,以这种关联性来表示风格。

1.1 构建损失函数

损失函数的具体形式:

  • 内容的损失(Content Loss)和基于生成图的梯度

在CNN网络中,一般认为较低层的特征描述了图像的具体视觉特征(即纹理、颜色等),较高层的特征则是较为抽象的图像内容描述。

所以要比较两幅图像的内容相似性,可以比较两幅图像在CNN网络中高层特征的相似性(欧式距离)。

图像风格迁移简介

其中和分别表示生成图像和原始内容图像中的像素值。

  • 画风损失(Style Loss)和基于生成图的梯度

而要比较两幅图像的风格相似性,则可以比较它们在CNN网络中较低层特征的相似性。

不过值得注意的是,不能像内容相似性计算一样,简单的采用欧式距离度量,因为低层特征包含较多的图像局部特征(即空间信息过于显著),比如两幅风格相似但内容完全不同的图像,若直接计算它们的欧式距离,则可能会产生较大的误差,认为它们风格不相似。

论文中使用了Gram矩阵,用于计算不同响应层之间的联系,即在保留低层特征的同时去除图像内容的影响,只比较风格的相似性:

图像风格迁移简介

图像风格迁移简介

  • 总损失(otal Loss)
图像风格迁移简介

1.2 训练过程

使用VGG19网络进行训练(包含16个卷积层和5个池化层,但实际训练中未使用任何全连接层,并使用平均池化average- pooling替代最大池化max-pooling)。

图像风格迁移简介

内容层和风格层的选择:将内容图像和风格图像分别输入到VGG19网络中,并将网络各个层的特征图(feature map)进行可视化(重构)。

内容重构五组对比实验:

1. conv1_1 (a) 2. conv2_1 (b) 3. conv3_1 (c) 4. conv4_1 (d) 5. conv5_1 (e) 

风格重构五组对比实验:

1. conv1_1 (a) 2. conv1_1 and conv2_1 (b) 3. conv1_1, conv2_1 and conv3_1 (c) 4. conv1_1, conv2_1, conv3_1 and conv4_1 (d) 5. conv1_1, conv2_1, conv3_1, conv4_1 and conv5_1 (e) 

通过实验发现:

  • 对于内容重构,(d)和(e)较好地保留了图像的高阶内容(high-level content)而丢弃了过于细节的像素信息;
  • 对于风格重构,(e)则较好地描述了艺术画的风格。

如下图红色方框标记:

图像风格迁移简介

在实际实验中,内容层和风格层选择如下:

内容层:conv4_2

风格层:conv11, conv2_1, conv3__1_, _conv4_1, conv5_1

训练过程:

  • 以白噪声图像作为输入(x)到VGG19网络,
  • conv4_2层的响应与原始内容图像计算出内容损失(Content Loss),
  • “conv1_1, conv2_1, conv3_1, conv4_1, conv5_1”这5层的响应分别与风格图像计算出风格损失,然后它们相加得到总的风格损失(Style Loss),最后Content Loss + Style Loss = Total Loss得到总的损失。
  • 采用梯度下降的优化方法求解Total Loss函数的最小值,不断更新x,最终得到一幅“合成画”。

1.4 总结

  • 每次训练迭代,更新的参数并非VGG19网络本身,而是随机初始化的输入x
  • 由于输入 x是随机初始化的,最终得到的“合成画”会有差异
  • 每生成一幅“合成画”,都要重新训练一次,速度,难以做到实时。

2 快速风格迁移

2016年Johnson等人提出了一种更为快速的风格迁移方法《Perceptual losses for real-time style transfer and super- resolution》。

它们设计了一个变换网络(Image Transform Net),并用VGG16网络作为损失网络(Loss Net)。

输入图像经由变换网络后,会得到一个输出,此输出与风格图像、内容图像分别输入到VGG16损失网络,类似于开山之作的思路,使用VGG16不同层的响应结果计算出内容损失和风格损失,最终求得总损失。

然后使用梯度下降的优化方法不断更新变换网络的参数。

主要思想白噪声由网络生成(转换网络),该网络一旦生成就可以实时运行。

图像风格迁移简介

内容层:relu3_3

风格层:relu12, relu2_2, relu3_3, _relu4_3

其中变换网络(Image Transform Net)的具体结构如下图所示:

图像风格迁移简介

3 格拉姆矩阵(Gram matrix)

Gram矩阵是两两向量内积组成,所以Gram矩阵可以反映出该组向量中各个向量之间的某种关系

图像风格迁移简介

输入图像的feature map[ ch, h, w]。经过flatten(即是将h*w进行平铺成一维向量)和矩阵转置操作,可以变形为[ ch, h*w][ h*w, ch]的矩阵。

再对两个作内积得到Gram Matrices。(蓝色条表示每个通道flatten后特征点,最后得到 [ch *ch ] 的G矩阵):

图像风格迁移简介

画风在不同层的特征的Gram Matrices:

图像风格迁移简介

实际上Gram Matrix可看做是feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵):

  • 在feature map中,每一个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字就代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等。
  • 同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。

有了表示风格的Gram Matrix,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。

4 AnimeGANv2

在给大家推荐一个人脸转漫画脸的风格迁移网络(AnimeGANv2)。该网络是Ahsen Khaliq等工程基于styleGNA和神经网络等技术造就的人脸制作动画面孔的算法。

StyleGAN中的“Style” 是指数据集中人脸的主要属性,比如人物的姿态等信息,而不是风格转换中的图像风格,这里Style是指人脸的风格,包括了脸型上面的表情、人脸朝向、发型等等,还包括纹理细节上的人脸肤色、人脸光照等方方面面。

每个图像都有两种处理模式,就像第一组照片,第一个曲线更加柔和,第二个曲线更加粗旷。

直接在网页上尝试:

https://huggingface.co/spaces/akhaliq/AnimeGANv2

图像风格迁移简介

5 Tensorflow版

实际操作过程中,可以分成以下几步:

A. 图像预处理(内容图、画风图)、生成图占位符定义 B. 预训练模型加载 C. 三张图跑网络 D. 内容损失计算 E.格拉姆矩阵计算 F. 风格损失计算 G. 损失和梯度汇总 H. 设置迭代计算图 I.选择生成图优化方法 J. 开始迭代 

程序如下:

https://github.com/keras-team/keras-io/blob/master/examples/generative/neural_style_transfer.py

参考:

https://blog.csdn.net/juanjuan1314/article/details/

https://www.zhihu.com/question/ https://zhuanlan.zhihu.com/p/

https://cloud.tencent.com/developer/article/

https://juejin.cn/post/

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/80021.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信