简介
本文做的模型是从一张语义图(分割里的semantic mask)生成相应的一张真实图,下图的第一行是输入,不同的颜色代表不同的语义类别,第二行到第三行是生成的真实图像,其中每一行对应一种风格,每行最左边的图例为风格样式。
这篇文章最主要的地方就是讨论了normalization层在语义信息里的作用。之前的方法,normalization层会过滤掉语义图的语义信息。为什么呢,可以看下图的例子。
作者假设,语义图输入单个类别,那么一整张图都是同一个数,在经过InstanceNorm之后会输出0(按说应该是个固定的bias),语义信息完全丢失。所以上图的 pix2pixHD就无法生成有效的图片,没有任何类别信息。针对这个问题,作者提出了SPADE(SPatially-Adaptive (DE)normalization)方法,通过SPADE使用语义图来调整normalization输出的结果,使其更好的具有语义信息,并将语义信息贯穿整个网络。并且其方法可以应对各种使用语义图的生成任务(semantic image synthesis task)。
SPADE
这个方法本身并不难,先看BN层,可以简单将BN层看成normalize部分跟denormalize部分。normalize部分就是bn的归一化部分,计算N个featuremap某个通道的均值跟方差,用均值跟方差进行归一化,下面公式中间那部分。而demormalize即bn学习的gain跟bias,重新作用在归一化之后的feature map上,即下面公式左边的gama跟右边的beta。这个gain跟bais学习之后就固定了,它不跟输入数据的变化而变化,因此是Unconditional normalization的。类似的方法还有Local Response Normalization (LRN)、Instance Normalization (IN)、Layer Normalization (LN)、Group Normalization (GN)、Weight Normalization (WN)。
不同的normalization方法(截自Group Normalization):
有Unconditional normalization就会有Conditional normalization,根据输入的不同得到不同的gain跟bias,本文的方法就是这类。不同于其他的方法的是,其他的方法一般是一个feature map通道计算一个gain跟bias,是spatially-invariance的,所有位置都是这个gain跟bias,起到一个总体风格控制的作用。本文的方法是spatially-variance的,每个位置都计算一个gain跟bias。而作者的目的又是要保留语义图的语音信息,因此输入是语义图,输出是对应整个feature map的gain跟bias,所以可以很好的保留一些局部的语义信息。
作者使用两层conv层来定义SPADE层,说明图如下:
输入是semantic图,根据当前feature map的大小进行downsample,之后经过两个conv层计算出gama跟beta,加到BN之后的featuremap上。详细的结构如下:
这里提一下Sync Batch Norm,作者用的 这个代码。这个主要是多卡训练的时候可以将bn的mean跟std分配到所有卡上,对于单张卡的batch比较小的情况是更好的。pytorch默认的bn在多卡上是每个卡计算自己卡中的batch的mean跟std,不会多卡间通信,因此如果batch size比较小,计算会不准。
增加了SPADE的resblock如下,将所有bn进行替换:
因为有了SPADE,语义信息会在所有的BN之后都会加上,也就没有必要通过encoder部分来encode输入的语义图了,所以生成网络不需要encoder部分了,只需要输入随机向量即可进行图像的生成。生成网络的结构如下:
具体结构:
加入Style
为了使生成的图像符合某种自定义的风格,作者使用VAE的方式,利用一个encoder来产生具有某种style信息的随意向量,输入为某种style的图像。encoder的结构为:
网络输出高斯分布的均值跟方差,VAE还不是很了解,作者使用KL散度来训练encoder,KL散度的loss权重设为0.05。
训练部分
整体训练的目标函数跟pix2pixHD是差不多的,作者把LS-GAN Loss换成了Hinge Loss,权重也跟pix2pixHD相同。D网络的输入是语义图concat生成图,D网络结构如下:
整体GAN训练流程图:
讨论
本文方法有更好的视觉效果,artifact也相对比较少。作者认为,SPADE的效果好主要还是更好的保留了语义图中的语义信息。另外作者也尝试了在pix2pixHD网络的中间层直接concat语义图,但是效果没有SPADE的好。