zoukankan      html  css  js  c++  java
  • Neural Style Transfer

    Neural Style Transfer

    风格转移

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

    NST1.png

    基本思想

    有两张图片,我们关注一张图片的内容(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$是超参数

    NST2.png

    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

  • 相关阅读:
    计算某一日期是在一年中第几周
    动态生成web表-asp.net table
    sql server 小技巧(7) 导出完整sql server 数据库成一个sql文件,包含表结构及数据
    循环取月的三位英语名 Jan Feb
    Python面向对象编程
    算法
    UDP Sockets in C#
    C++ 11
    GNU Make
    C++ 11
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12275661.html
Copyright © 2011-2022 走看看