1. 举个栗子

clipboard.png

(上图是使用VGG19学习200次后的结果)

2. 原理

简单说就是通过给的内容图片中学习内容,从风格图片中学习风格特征,最后将学习到的内容特征和风格特征按比例凑在一起就好了。
那么问题来了,我们怎么衡量网络学习后的生成的图片与我们提供图片的相似程度呢?很直接的方法就是比较,用生成图片分别与内容图片和风格图片进行比较。emmm...怎么比呢??这里我们就需要定义两个损失函数了:

2.1 内容损失函数$J_{content}$

  • $J_{content}(C, G)$:内容代价,度量生成图片$G$与内容图片$C$的相似性,值越小越相似。
  • 第$l$层的内容相似性公式:$J_{content}^{[l]}(C,G) = \frac{1}{2} {\mid\mid a^{[l](C)}-a^{[l](G)}\mid\mid}^2$
    其中:$\frac{1}{2}$是归一化因子,加不加都行,因为可以通过$\alpha$来调试; $a^{[l](C)}, a^{[l](G)}$都是向量形式,相当于计算$a^{[l](C)}, a^{[l](G)}$的$L_2$范式(差值平方和)

2.2 风格损失函数$J_{style}$

  • $J_{style}(S, G)$:风格代价,度量生成图片$G$与风格图片$S$的相似性,值越小越相似。
  • 第$l$层的风格相似性公式:$J_{style}^{[l]}(S, G) = \frac{1}{(2*n_{H}^[l]*n_{W}^[l]*n_{C}^[l])^2} \sum_{K} \sum_{K^{'}}(G_{KK^{'}}^{[l][S]}-G_{KK^{'}}^{[l][G]})^2$
    其中:

    • $\frac{1}{(2*n_{H}^[l]*n_{W}^[l]*n_{C}^[l])^2}$ 是归一化因子
    • $G_{KK^{'}}^{[l][S]} = \sum_{i=1}^{n_H^{[l]}} \sum_{j=1}^{n_W^{[l]}} a_{ijk}^{[l][S]}a_{ijk^{'}}^{[l][S]}$;
    • $G_{KK^{'}}^{[l][G]} = \sum_{i=1}^{n_H^{[l]}} \sum_{j=1}^{n_W^{[l]}} a_{ijk}^{[l][G]}a_{ijk^{'}}^{[l][G]}$;
    • $i$表示当前位置的高度$H$,$j$表示当前位置的宽度$W$,$k$表示对应的通道;$KK^{'}$用来描述通道$K$与通道$K^{'}$的相关系数。比如我们拿前一个公式来举栗,当$i,j$都为$n$时,计算的是宽度和高度都为$n$的位置的通道$K$与$K^{'}$的相关系数。

所以,当生成图片$G$与风格图片$S$越相似时,生成图片$G$的风格矩阵才和风格图片$S$的风格矩阵越接近,风格代价也才越小。
风格矩阵在数学上就是$Gram$矩阵。

总风格损失函数 :$J_{style}(S, G) = \sum_{l}\lambda^{[l]} J_{style}^{[l]}(S, G)$
$\lambda$是每一层的权重

2.3 总函数$J(G)$

$J(G) = \alpha J_{content}(C, G) + \beta J_{style}(S, G)$
其中:$\alpha,\beta$ 是超参数,用于调节内容和风格之间的权重。

3.目标

通过梯度下降最小化$J(G)$


橙茗
26 声望5 粉丝

python c


引用和评论

0 条评论