什么是风格迁移?
风格迁移指的是将A风格的图像转换为B风格的图像,如素描转油画等。
什么是Gram Matrix?
图像尺寸假定为H x W x C的三维矩阵,讲其进行transpose和resize之后我们可以获得C x HW 与 HW x C这两个二维矩阵。对两个矩阵进行点乘,即可获得C x C的Gram Matrix。
那么格拉姆矩阵又有什么意义呢?
说起格拉姆矩阵的意义,我们先要了解向量点乘的几何含义。
X
⋅
Y
=
(
x
0
,
x
1
,
.
.
.
,
x
n
)
⋅
(
y
0
,
y
1
,
.
.
.
,
y
n
)
=
x
0
⋅
y
0
+
.
.
.
+
x
n
⋅
y
n
=
∣
∣
X
∣
∣
⋅
∣
∣
Y
∣
∣
⋅
c
o
s
θ
\begin{aligned} X \cdot Y &= (x_0, x_1, ..., x_n) \cdot (y_0, y_1, ..., y_n) \\ &= x_0\cdot y_0 + ... + x_n\cdot y_n \\ &= ||X|| \cdot ||Y|| \cdot cos\theta \end{aligned}
X⋅Y=(x0,x1,...,xn)⋅(y0,y1,...,yn)=x0⋅y0+...+xn⋅yn=∣∣X∣∣⋅∣∣Y∣∣⋅cosθ
其中
θ
\theta
θ为
X
X
X与
Y
Y
Y的夹角,点乘在几何上表示的就是两个向量的余弦相似度(实际上还是要把两个向量的模长除掉,这里是为了和格拉姆矩阵对齐)。
好,那么格拉姆矩阵表示的含义就很明显了。对角线上数字表示了各个channel的自身强度,其他数字则蕴涵着两个channel本身的强度与余弦相似度。
如此一来,不难看出,格拉姆矩阵可以从某种程度上去描述一张图像的风格。比如说,channel是RGB,则描述了三种色彩强度与他们之间的关系。
当然,仔细想来这其实有看起来没有那么严谨,所以只能说是从某种程度上来说。(比如,格拉姆矩阵可以说涵盖了像素级和全图级的信息,缺少了中间的局部信息对比。)
风格迁移和格拉姆矩阵有什么关系?
经过上面的解释,格拉姆矩阵可以描述一类图像的风格,风格迁移任务可以转换为缩小两个域之间格拉姆矩阵的差异(距离)。
不得不提的Instance Normalization
大家更加熟悉的一般都是BN,那么IN又是个什么东西呢?
其实IN就是batch_size = 1的BN。(滑稽
不就是改个参数,为什么要单独去说这个呢?因为IN可以说在风格迁移的任务上大放异彩,碾压了BN。
很多人会说,这是因为风格迁移讲究的是单体到目标域的转移,和其他任务有区别,要避免各个输入数据(图像)之间的互相影响。
说实话,这个理论乍一听还蛮像那么回事,细想起来又怪怪的。我们的任务就是让网络学习到源域到目标域的magic transfer function,这里为什么又要在源域里强调个体呢?整体不就是个体的一个概率分布么?和其他任务的区别又在哪里呢?
唯一可以勉强解释的是,GAN的生成器有一个输出多样化的需求,确实需要从源域中剥离个体的特性。
但是如果我们从格拉姆矩阵的角度去看这件事情,从两个域中进行个体采样,使用个体之间差异的来度量两个域的差异,通过极小化两张图之间格拉姆矩阵的MMD距离来优化整个过程。
至于什么是MMD距离,我也还没看懂。:)
感谢Naiyan Wang在知乎问题-Batch normalization和Instance normalization的对比?下的回答,给了我这些启发。