先介绍一下论文的思路。
思路
图像风格迁移,包括三部分:风格style特征提取(一般是纹理特征),目标图像内容content提取,style+content合成新的图片。
这篇论文之前的方法,三个部分分别实现,对于每一种风格,都要单独提取风格特征,没有一个通用的方法。
论文思路的提出,基于卷积神经网络的特点:
![](https://i-blog.csdnimg.cn/blog_migrate/142016ccd8a1704b43f2194cebc64488.png)
如图,神经网络的低层,可以提取简单的纹理特征,高层细节像素信息会损失掉,但是可以提取复杂的内容信息。
网络结构
这篇文章正是基于这一特性,实现了一个通用网络结构,使三部分都在同一个网络中实现:
该网络用了VGG19网络(16 convolutional and 5 pooling layers),a为风格图像,x为生成图片,p为内容图片。VGG19网络是训练好的,用来提取特征,并计算网络的损失函数,需要训练的是x,他是随机初始化,通过训练生成想要的图片。
网络的损失包括两部分,style损失和content损失:
![](https://i-blog.csdnimg.cn/blog_migrate/c255cc39214386016ce5e06b3196ff46.png)
![](https://i-blog.csdnimg.cn/blog_migrate/99c9eca29aa9a235df0960811576622a.png)
content损失计算生成图片在高层输出响应,与内容图片在高层的输出响应之间的平方差损失函数。
![](https://i-blog.csdnimg.cn/blog_migrate/c9a8fd4e497951a1d84bdcf101212626.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0a57856dcb2c75cffe0f2d1044d5a7d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2558b9aaaebdec27487264ba79ce73fa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1d1ae88329c066d5f49269ec5e0ca7f1.png)
style损失,需要 用的Gram矩阵。
Gram矩阵计算feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),在feature map中,每个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。
总之, 格拉姆矩阵用于度量各个维度自己的特性以及各个维度之间的关系。内积之后得到的多尺度矩阵中,对角线元素提供了不同特征图各自的信息,其余元素提供了不同特征图之间的相关信息。这样一个矩阵,既能体现出有哪些特征,又能体现出不同特征间的紧密程度。
可以注意到,计算content损失时只使用了最高层的输出,因为卷积神经网络的高层为图像的内容信息,而计算style损失时确使用了多层输出,看到这里我是有疑问的,因为神经网络的低层才是风格信息,为什么不只用低层的输出,后面会给出解释
最后整体损失函数由以上两部分组成:
![](https://i-blog.csdnimg.cn/blog_migrate/1245d4f8c53f128009b8b7eff9cffec3.png)
a,b为权重参数。
用 L-BFGS 使total损失最小化来训练网络。
![](https://i-blog.csdnimg.cn/blog_migrate/d0becfcafcc0856ea5ac124aad72d006.png)
a,b参数权衡
论文中还讨论了style和content之间的权衡,也就是a和b取值的问题。参数为a/b
![](https://i-blog.csdnimg.cn/blog_migrate/fc4f850c489e32ac9bacd6fff7d15568.png)
可以看出,当a很小时,如左上角图,内容损失相对大,风格损失相对较小,所以生成的图片更凸显风格;当a较大时,如右下角图,
内容损失相对小,风格损失相对较大,生成的图片更凸显内容。
α,
不同层风格特征的效果
下面来解释为什么风格损失要使用多层的特征,论文中用不同层的风格特征做了实验,发现
匹配conv2_2的保留了原始照片更多的清楚的结构,生成的图像看上去绘画的纹理简单和融合到照片中(图中间所示)。匹配conv4_2层的内容时,绘画的纹理和照片的内容就合并起来,照片的内容就显示出绘画的风格(图中下面所示)。可以发现风格表示匹配到网络的高层在一个增大的尺度上可以保留局部图像结构,生成更平滑、更连续的视觉体验。
![](https://i-blog.csdnimg.cn/blog_migrate/cff574fd15f585f4103389c2e5e59de0.png)
初始化
论文中还讨论了不同初始化的问题,对x有两种初始化方式,一种是白噪声初始化,另一种是style图片或conte图片初始化。下图展现了两种不同初始化方式的效果。
![](https://i-blog.csdnimg.cn/blog_migrate/efa0745b27d7bcfaede55c9ed30c8f1f.png)
A图由content图片初始化,B图由style图片初始化,C图由随机白噪声初始化。
可以看到两者效果几乎没用什么区别,并且使用白噪声初始化生成的图片更有丰富性。
除了对艺术类图片进行风格迁移,该网络还可以对真实图片进行风格迁移
![](https://i-blog.csdnimg.cn/blog_migrate/ea4113c689775c4b8738c7794d9593ef.png)
下一篇文章解释具体TensorFlow实现