《Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization》论文解析
Ulyanov发现在风格迁移上使用IN效果比BN好很多,从他开始凡是风格迁移都离不开IN和其变种AdaIN,本文简要介绍AdaIN这篇的原理。
下图为特征图张量,可以直观看出BN,LN,IN,GN等规范化方法的区别。N为样本维度,C为通道维度,H为height,W即width,代表特征图的尺寸。
《Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization》这篇文章首先介绍了这几种normalization的算法。
1、 Batch Normalization
BN是在深度学习网络中经常用的算法,在训练时对整个batch的每一个channel分别进行归一化。公式1中的y和β由网络学习得到。而在测试时,将统计信息(均值和方差)替换为全数据集的。
2、 Instance Normalization
如最上的图所示,IN对
- 每个样例以及每个通道都独立计算均值、方差
- IN layers在训练以及测试时使用相同的数据统计
3、Conditional Instance Normalization
CIN对于每一个风格,分别计算y和β。而对于卷积网络的其他权重则共享。
4、Adaptive Instance Normalization
AdaIN接受内容图片x和风格图片y,将内容图的每通道输入的均值和方差归一化后的结果对齐匹配到风格图的每通道输入的均值和方差,让x的通道均值和方差匹配y的,AdaIN的仿射参数并不是网络学习出来的,而是直接通过输入计算出来的。
5、网络结构和损失函数
在使用了AdaIN后,网络结构如下图所示:
损失函数由两部分组成:
其中Lc指的是内容损失:
而Ls指的是风格损失:
解释一下上面两部分损失: 首先用VGGencoder提取出图片的特征,再使用AdaIN对齐内容图和风格图的分布,此时得到的特征为t。而g()是decoder,g(t)旨在将特征恢复为图片。因此内容损失Lc就是把恢复后的图g(t)再过一遍encoder得到特征f(g(t)),与t做一个l2 loss。使得最后得到的输出图与内容图内容一致。
而Ls风格损失是将g(t)和s(风格图)都过一遍encoder,然后在某些网络层上算了一个统计意义上(均值方差)的l2 loss。使得他们风格上相像。原文:where each φi denotes a layer in VGG-19 used to compute the style loss. In our experiments we use relu1 1, relu2 1, relu3 1, relu4 1 layers with equal weights. 在VGG19的这几层上使用了这个loss。
实验效果还是很好的:
最重要的是,本算法在inference的时候不需要迭代地生成图片,速度很快,因此在应用上就有了可能性。