09 IN: The Missing Ingredient for Fast Stylization
主要应用于风格迁移
风格迁移的历程
Gatys:
使用Gram矩阵作为风格的数学表示,图片的style可以表示为特征图上的Gram矩阵
G
[
i
,
j
]
=
∑
x
h
∑
y
w
F
i
[
x
,
y
]
∗
F
j
[
x
,
y
]
G[i,j]=\sum_{x}^{h}\sum_{y}^{w}{F_i[x,y]*F_j[x,y]}
G[i,j]=x∑hy∑wFi[x,y]∗Fj[x,y]
其中i和j是channel的下表,x和y是空间坐标。Gram矩阵的本质上就是算各个channel之间的相关性,即哪些channel倾向于同时激活,哪些channel倾向于此消彼长
Gram矩阵就是每一层滤波后的feature map, 后将其转置并相乘得到的矩阵,如下图所示。其实就是不同滤波器滤波结果feature map两两之间的相关性。譬如说,(如下图)某一层中有一个滤波器专门检测尖尖的塔顶这样的东西,另一个滤波器专门检测黑色。又有一个滤波器负责检测圆圆的东西,又有一个滤波器用来检测金黄色。对梵高的原图做Gram矩阵,谁的相关性会比较大呢?如上图所示,“尖尖的”和“黑色”总是一起出现的,它们的相关性比较高。而“圆圆的”和“金黄色”都是一起出现的,他们的相关性比较高。因此在风格转移的时候,其实也在风景图里去寻找这种“匹配”,将尖尖的渲染为黑色,将圆圆的渲染为金黄色。如果我们承认“图像的艺术风格就是其基本形状与色彩的组合方式” ,这样一个假设,那么Gram矩阵能够表征艺术风格就是理所当然的事情了
是用迭代optimization的方法来构建图片的:输入的是一张随机噪音构成的底图,通过计算Style Loss和Content Loss,迭代更新底图。比较费时
Ulyanov
提出用前馈神经网络来替代optimization的过程
generate in a single pass
把BN换成IN:生成图像的质量提高了。在训练和测试的时候都用IN
发现:使用越多的training example来训练generator g,生成的图像的表现反而越差
尤其是在边界部分,因为每次卷积前的0 padding操作。即使是使用了更为复杂的padding操作,也没能解决这个问题
目前Ulyanov的最好结果是只是用了小部分的训练图片以及早停得到的
按理来说,风格迁移的的结果不应该受到content image的对比度的影响(因为我要的只是它的内容而已啊)。但事实上,之前的方法是会受到对比度的影响的。所以generator应该抛弃掉content image里包含的对比度信息。
ith channel, tth image in a batch
其实做出的改进仅仅就是把网络里的BN换成了IN
为什么BN效果不好,IN的效果好?
图像风格迁移这种任务很注重每个像素,每个pixel都很重要,像BN这种把每个batch里面的样本都做归一化的话,单个图片里的像素的信息就会丢掉,因为BN考虑了一个batch里所有图片的内容,造成每个样本自己独特细节的丢失。(图像风格化中生成结果主要依赖于这个图像实例本身,所以如果把一个batch都考虑进来反而不妥)
自己独特细节的丢失。(图像风格化中生成结果主要依赖于这个图像实例本身,所以如果把一个batch都考虑进来反而不妥)
IN则是适用于这种对单个pixel要求很高的场景(例如风格迁移、GAN等),一次归一化只考虑一张图片的一个通道,这样就可以加速收敛的同时保证每个图像实例之间的独立