MUNIT-多模态无监督图像到图像的转换
一,github地址
https://github.com/NVlabs/MUNIT
二,MUNIT认为能够共享的这个空间叫做内容空间(content),而同时他们应该存在着一种彼此差异的空间,他将这个称作风格空间(style)。
从第一个数据域当中采集到一个样本为豹,它实际上可以被分解为两个部分:内容部分C以及风格S部分。如果我比较完美的完成了上述的分解,那么,从上述结果的内容空间当中采样,同时从另一个数据空间构成的风格空间采样,结合二者进行重构,我们就能够得生成另一个空间的数据。并且这也是一种无监督的算法,具有更好的应用场景。
生成图片时,把同一个内容c和不同样式s组合并编码输出,就可生成多态的图片:
三,MUNIT训练过程
需要两个自编码器,分别对应domain1和domain2:
标准的auto encoders结构,先编码再解码。编码分成内容与风格两部分,两个自编码器都要先在各自的domain中训练,过程中需要保证同一张图片x1可以被还原出相似的域中图片x1,即所谓的让x1的domain内部重构的loss降到最小:
其中E1是x1的编码器(分别编码成内容信息c和样式信息s),G1是解码器(根据c和s)解码成domain1中图片。
生成样式转换图片时,把另一个domain中的内容信息c2拿过来与当前domain的样式信息s1拼接,再解码生成新的图片,就可以从domain2生成domain1样式的图片x2->1,下图即交叉domain的转换方法:
这时对于转换后的图片x2->1, 需要构建所谓的隐含特征重构loss(latent reconstruction loss),即,用编码器再对图片x2->1编码后,依然可以得到内容信息c2与样式信息s1(显然这时符合直觉的):即,内容c和样式s的编码器对于生成后的图片也是适用的。
最后一个需要关注的loss是对抗loss,即,通过上述交叉domain生成的图片必须与内部本身domain生成的图片无法区分:
综合上面的3个loss考虑,我们需要的总的loss如下:
四,MUNIT的自编码器的实际实现架构如下:
其中的内容编码器(content encoder)和样式编码器(style encoder)。样式编码器主要是通过全局池化来提取风格。有意思的是解码器中要很好地整合c编码器和s编码器(内容和样式的完美合成),使用了自适应样例规范化Adaptive Instance Normalization (AdaIN) 技术,同时用一个MLP网络生成参数,辅助Residential Blocks生成高质量图片:
其中z代表前面的层输出的内容信息特征,u 和 σ 是对z的一些通道平均值和方差计算,γ 和 β 就是MLP从样式信息s生成的参数,用来调整图片生成(让图片内容更适应图片样式)。
五,MUNIT的图片生成样例