这几天看了一篇风格转移的论文,这里大致介绍下论文的内容,并且推到下论文中出现的公式。
有两张图片,我们关注一张图片的内容(Content)记为C,一张图片的风格(Style)记为S,想要生成一张图片包含C的内容和S的风格,记为G。
那么如何获取图片的C和S那?论文使用训练好的VGG net解决这一问题。
文中使用VGG net的中间层来表示C:对于一张input_image,中间某一输出层shape为 height×width×channel ,将其reshape成 (channel×(height∗width)) 。这样便得到了C,简单的理解是使用训练好的VGG net对图片进行再编码。为公式推导方便我们记为 FN×M ,N为特征图的数量,M为特征图的大小。
对于S的表示略微复杂:在VGG net的某一层,得到了该层的feature maps,计算这些feature maps的特征相关性feature correlations,就可以得到这一层的“风格表示”,最终的S是多个层的“风格表示”的线性组合。
怎么计算feature correlations那?文中介绍了使用Gram Matrix的方法。
论文中定义的Loss是对ContentLoss和StyleLoss进行加权求和。
为公式推到方便,先来定义几个符号
p→ : 原始图像
x→ : 生成图像
l : VGG net的第 l 层
Fl : 原始图像在VGG net第 l 层的内容特征表示
Pl : 生成图像在VGG net第 l 层的内容特征表示
ContentLoss定义为
a→ : 原始图像
x→ : 生成图像
l : VGG net的第 l 层
Al : 原始图像在VGG net第 l 层的风格特征表示
Gl : 生成图像在VGG net第 l 层的风格特征表示
第 l 层的StyleLoss定义为
link
Image Style Transfer Using Convolutional Neural Networks by Gatys et al. CVPR 2016
Neural Transfer with PyTorch
https://jiweibo.github.io/Neural-Style-Transfer/