Neural Style Transfer

Posted lijianming180

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neural Style Transfer相关的知识,希望对你有一定的参考价值。

技术图片

风格转移

这几天看了一篇风格转移的论文,这里大致介绍下论文的内容,并且推到下论文中出现的公式。

技术图片

基本思想

有两张图片,我们关注一张图片的内容(Content)记为C,一张图片的风格(Style)记为S,想要生成一张图片包含C的内容和S的风格,记为G。

那么如何获取图片的C和S那?论文使用训练好的VGG net解决这一问题。

文中使用VGG net的中间层来表示C:对于一张input_image,中间某一输出层shape为$heighttimes width times channel$,将其reshape成$(channel times (height * width))$。这样便得到了C,简单的理解是使用训练好的VGG net对图片进行再编码。为公式推导方便我们记为$F_{N times M}$,N为特征图的数量,M为特征图的大小。

对于S的表示略微复杂:在VGG net的某一层,得到了该层的feature maps,计算这些feature maps的特征相关性feature correlations,就可以得到这一层的“风格表示”,最终的S是多个层的“风格表示”的线性组合。

怎么计算feature correlations那?文中介绍了使用Gram Matrix的方法。

从定义可以看出,Gram阵是对称阵,我们公式推导会多次用到这一性质。

loss定义

论文中定义的Loss是对ContentLoss和StyleLoss进行加权求和。

其中$alpha$和$beta$是超参数

技术图片

ContentLoss

为公式推到方便,先来定义几个符号

$overrightarrow{p}$: 原始图像

$overrightarrow{x}$: 生成图像

$l$: VGG net的第$l$层

$F^l$: 原始图像在VGG net第$l$层的内容特征表示

$P^l$: 生成图像在VGG net第$l$层的内容特征表示

ContentLoss定义为

误差对$l$层每一激活值的偏导

这一步偏导好求,就是当$F^l_{ij}<0$时偏导是0,文中没有做解释

StyleLoss

$overrightarrow{a}$: 原始图像

$overrightarrow{x}$: 生成图像

$l$: VGG net的第$l$层

$A^l$: 原始图像在VGG net第$l$层的风格特征表示

$G^l$: 生成图像在VGG net第$l$层的风格特征表示

第$l$层的StyleLoss定义为

TotalStyleLoss定义为

误差对$l$层每一激活值的偏导

接下来是推导过程

考虑这个式子$frac{partial{G^l_{mn}}}{partial{F^l_{ij}}}$

当$mneq i,nneq i$时,上式为0

当$m=i,nneq i$时,上式为$F_{nj}$

当$mneq i,n=i$时,上式为$F_{mj}$

当$m=i,n=i$时,上式为$F_{ij}$

利用Gram矩阵的对称性得

论文实现

link

Content Style Generate
技术图片 技术图片 技术图片
技术图片 技术图片 技术图片
技术图片 技术图片 技术图片

Acknowledgement

Image Style Transfer Using Convolutional Neural Networks by Gatys et al. CVPR 2016

Neural Transfer with PyTorch

以上是关于Neural Style Transfer的主要内容,如果未能解决你的问题,请参考以下文章

课程四(Convolutional Neural Networks),第四 周(Special applications: Face recognition & Neural style tr

A Neural Algorithm of Artistic Style

每一个人都是梵高A Neural Algorithm of Artistic Style

Neural Style Transfer

风格迁移论文理解--A Neural Algorithm of Artistic Style

OpenCv dnn模块扩展研究--style transfer