0%

A Neural Algorithm of Artistic Style

A Neural Algorithm of Artistic Style

  • 文章大致:算法基于深度神经网络,能将任意图片根据任意画家的风格转化,并提供一种方法了解人类如何创造和感知艺术意象
  • feature map(特征映射)s: 对于输入图像的不同的过滤视觉
  • 当CNN作用在物体识别的时候,网络产生一种能沿着处理层使得物体信息明显增加的==表征==,因此沿着网络的处理层,比起具体的像素值,输入图像对当前图像的内容(content)关注度会增加。

因此,我们把把每一层的被重构的图像可视化可以发现

  • 高层捕获在图像中关于物体的高级内容和他们排列,但不限制重构后确切的像素值(就是不怎么改变)
  • 底层只简单的重构造原图像确切的像素值

我们因此把网络高层的表达当做内容表征(content representation)
为了获得风格表征(style representation):我们用一个原创设计的特征空间来捕获特征信息

- 这个特征空间是建立在每一层的滤波器之上,它包含了不同滤波器在特征地图的空间范围之间的联系
    - 基于多层的特征联系,我们获得一个稳定的多规模的图像表征,它捕获图像的本质信息而不是整体排列信息,我们把这个多规模的表征叫风格表征(style representation)

关键的发现是CNN上内容和风格的表征是可分的,我们可以操控两个独立的表征来产生新的,感性的,有意义的图片(并不是能完全解开,但是可以调整偏向比重)
为了论证这个发现,我们混合来自两个不同图片的内容和风格,所以我们采用画家的风格和现实图片的内容来混合。

方法:

  • 算法由vgg-n和CNN组成

  • 特征空间由19层的vgg的16个卷积层、5个池化层提供,没有用到任何的全连接层

  • 该模型是公开的,可以在caffe-framework中被找到

  • 对于图像合成,我们发现用平均池来替换最大池可以改善梯度流,可以获得更优吸引力的结果

通常:网络里的每一层定义了的非线性过滤器组的复杂度随着该层的位置的增加 而增加,因此给定的输入图像$\vec x$被过滤器相应而编码在每一层的CNN中。

内容表征

一层的$N_l$个过滤器有$N_l$个特征映射,特征映射的大小是$M_l$(特征映射的高*宽)

  • 所以第$l$层的相应可以被存储在矩阵$F^l\in R^{N_l*M_l}$中($F^l_{ij}是第l层第i个过滤器在第j个位置的激活$)

  • 为了可视化每一层被编码的图像信息,我们用==梯度下降==来在白噪声图像上找另一个图像来匹配原图像的特征信息

  • 所以我们设$\vec p和\vec x$表示原图像和生成图像,$P^l和F^l$来表示他们相应的特征表征

  • 我们定义两个表征的平方缺失为
    $$
    L_{content}(\vec p,\vec x,l)=\frac{1}{2}\sum_{i,j}(F_{ij}^l-P_{i,j}^l)^2
    $$

  • 关于这个缺失在第l层上激活的导数为
    $$
    \frac{\part L_{content}}{\part F_{ij}^l}=\begin{cases}
    (F^l-P^l){ij} &\text{if }F{ij}^l>0 \
    0 &\text{if }F_{ij}^l<=0
    \end{cases}
    $$

  • 关于其他的梯度可以用反向传播计算

  • 然后我们可以更改随机图像$\vec x$直到它在CCN的某一层产生了与原图像相同的相应

    风格表征

  • 在CNN的每一层的相应基础上,我们建立一个风格表征,可以计算不同滤波器相应之间的相关性,这些特征的相关性由Gram matrix得到$G^l \in R^{N_l*N_l}$($G_{ij}^l是特征映射i和特征映射j在第l层的内积$)
    $$
    G_{ij}^l=\sum_k F_{ik}^lF_{jk}^l
    $$

  • 为了生成匹配给定图片风格的本质,我们用==梯度下降==来在白噪声图像上找另一个图像来匹配原图像的风格,这是通过最小化原图像Gram matrix和将要生成的图像之间每一项的均方距离来实现的

  • 所以我们设$\vec a和\vec x$表示原图像和生成图像,$A^l和G^l$来表示他们相应的风格表征的Gram matrix

  • 第l层的缺失总贡献为
    $$
    E_l=\frac{1}{4N_l^2M_l^2}\sum_{i,j}(G_{ij}^l-A_{ij}^l)^2
    $$

  • 所有的缺失总贡献为
    $$
    L_{style}(\vec a, \vec x)=\sum_{l=0}^Lw_lE_l
    $$
    $w_l$是对各层缺失值的加权因子

  • 关于这个缺失在第l层上激活的导数为
    $$
    \frac{\part E_{l}}{\part F_{ij}^l}=\begin{cases}
    \frac{1}{N_l^2M_l^2}((F^l)^T(G^l-A^l)){ji} &\text{if }F{ij}^l>0 \
    0 &\text{if }F_{ij}^l<=0
    \end{cases}
    $$

  • 关于其他的梯度可以用反向传播计算

合并图像

  • 为了生成用内容和风格混合的图像,我们最小化内容表征第一层的白噪声图像和风格表征CNN中多层图像的距离

  • 我们令$\vec p为内容信息,\vec a为风格信息$

  • 我们最小化的缺失函数是
    $$
    L_{total}(\vec p,\vec a,\vec x)=\alpha L_{content}(\vec p,\vec x)+\beta L_{style}(\vec a,\vec x)
    $$

    • $\alpha 和\beta就是分别的权重$