Google风格迁移:Linear...名字太长放不下(CVPR2019)

1. 前导

根据原论文的思路简单过一遍。

1.1. 出处

论文名称:Learning Linear Transformations for Fast Image and Video Style Transfer
论文收录于CVPR2019
项目地址Github

1.2. 变量命名

\(F_c\) 表示内容图像的特征图;\(F_s\)表示风格图像的特征图;
\(F_d\) 表示变换后的特征向量;\(\bar{F}\) 表示具有0均值的矢量化特征图\(F\)(也就是F减去F的均值);
\(\phi_s\) 表示所需风格的“虚拟”特征图(\(\phi_s=\phi(F_s)\),在AdaIN/WCT中,\(\phi_s=F_s\))
\(T\) 表示学习矩阵;
\(N\) 表示像素量,即\(N=H\times W\);\(C\) 表示通道数;
说明:

  1. 为什么这里\(\bar{F}\)只减去均值不除以方差呢?是因为后面需要用方差计算协方差矩阵。

    2. 推导(Image)

    2.1. 求解目标

    先给出优化目标公式

    $$ F^*_d = arg\min_{F_d} \frac{1}{NC} \|\bar{F_d}\bar{F_d}^{\top} -\bar{\phi_s}\bar{\phi_s}^{\top} \|^2_F \tag{1} \\ s.t. \bar{F_d} = T \bar{F_c}. $$

目标含义是为了最小化\(F_d\)和\(\phi_s\)之间的中心协方差。中心协方差就是将样本均值移动到原点再计算协方差,这就是为什么\(\bar{F}\)只减去均值。也就是说我们期望减去均值后的内容特征经过学习矩阵\(T\)变换后接近风格特征。留个问题:为什么这里使用的是协方差?

将公式\(1\)中的约束条件代入可知,当

$$ T\bar{F}_c\bar{F}_c^{\top}T^{\top} = \bar{\phi_s}\bar{\phi_s}^{\top} \tag{2} $$

时,目标函数最小。

\(\bar{F_c}\)的中心协方差:\(cov(F_c)=\bar{F}_c\bar{F}_c^{\top}=V_cD_cV_c^{\top}\);对应的奇异值分解(SVD):\(cov(\phi_s)=\bar{\phi_s}\bar{\phi_s}^{\top}=V_sD_sV_s^{\top} \)。所以,根据这两个公式,可以容易得到公式\(2\)的一组解:

$$ T=(V_sD^{\frac{1}{2}}_sV_s^{\top})U(V_cD^{-\frac{1}{2}}_cV_c^{\top}) \tag{3} $$

其中,\(U\in R^{C\times C}\)是\(C\)维正交群。

由此,可以看出 \(T\)仅由内容特征协方差和风格特征协方差确定。

当给定一个\(T\)时,变换后的特征\(\bar{F_d}\) 加上 \(mean(F_s)\) 与 目标风格的均值和协方差统计值对齐。 (与前面那句加粗的话在一定程度上等价)

现在的问题是\(T\)怎么得到,有前面可以知道\(T\)仅取决于内容和风格,一种可行的方法是使用网络将两个图片直接输出为\( C \times C\)的矩阵。
由等式\(3\)得,内容和风格是分离的,所以可以使用两个独立的CNNs来提取各自的特征。
从等式\(2\)可以推断出CNNs可以有三种输入的方式:1. 图片(c/s)2. 特征图(\(F_c\)/\(F_s\)) 3. 协方差矩阵(\(cov(F_c)\)/\(cov(F_s)\))。所以选哪种呢?还是每种都行呢?
在这里,作者希望输出\(T\)的模块可以灵活适应所有内容图像和任意形状区域(就是大小可以不一样),所以方式1和方式2不适用,因为容易知道\(T=\bar{\phi_s}U\bar{F_c}^{-1}\),那么这就要求内容和风格的维度特征需要相同;还有另一点,由于\(T\)描述的是风格变换,侧重于描述全局统计量变化而不是图像空间信息。所以综合以上这两点,选择方式3,输入协方差,输出\(C\times C\)中间矩阵,然后这两个矩阵相乘得到\(T\)。
这里作者也给出了三种方式的实际效果,个人感觉除了尺寸的问题,方式2和方式3的效果差距不是太大,方式2的结果偏重内容一些,方式3偏重风格一些。
Google风格迁移:Linear...名字太长放不下(CVPR2019)_第1张图片

你可能感兴趣的:(Google风格迁移:Linear...名字太长放不下(CVPR2019))