《Multimodal Unsupervised Image-to-Image Translation》(2018 ECCV)
这篇文章解决了跨域图像转换的问题。主要思想是将图像的特征表示分解成2个部分:content code和style code。其中,content code不随领域的改变而改变,而style code则表示特定于领域的属性。
以这张图为例:
左边的豹子和右边的猫属于不同的类别,但是通过提取豹子的某些域不变特性(如轮廓、五官大小等等),并将它的content code和猫的某些特有的style code结合起来,就可以生成右边这几张猫咪的图像。
这里给出了一个转换过程的示意图:
左边是域内重构,右边是跨域转换。x1和x2属于2个不同的类别,且x1和x2都可以通过编码器得到content code和style code。如果将属于同一张图片的content code和style code组合起来输入解码器,就可以得到一张和输入一致的图像;而如果把c1和s2组合起来,就会生成x1→2。同样地,x1→2也可以由编码器分解成c1’和s2’,而c1和c1’、s2和s2’、x2和x2’之间会有重构损失,x2(源域)和x1→2(目标域)之间则存在对抗损失。
为了确保构成转换模型的encoder和decoder是互逆的,这里构造了几个重构损失函数。通过将重构损失函数整体最小化,就可以保证用c1和s1组合生成的图像尽可能地接近x1,即保证域内转换的准确性。
而对于域间转换,这里使用GAN来将生成图像的分布和目标域内的图像的分布尽可能地保持一致,换句话说,要使生成图像和ground truth图像相互混淆,难以分辨。
文章在训练时将这个损失联合起来,构造了一个整体损失函数。通过优化这个损失函数来得到合适的模型:
其中还包括GAN带来的对抗损失:
这里给出了整体的网络框架结构:
content encoder由一个下采样模块和一个残差模块构成;style encoder包括几个卷积层,然后是平均池化层和全连接层。这两个编码器的核心区别在于有无IN层(Instance Normalization,实例规范层,用来删除代表重要style信息的均值和方差。content encoder的所有卷积层后面都有IN层,而style encoder则没有)。
解码器decoder根据输入的c和s来重建图像。它首先通过一组残差模块对content code进行处理,再使用几个上采样层和卷积层来生成重构图像。
训练时使用的是LSGAN架构,用来保证生成器生成的t图片尽可能的逼真、具有正确的结构。
实验
在4个数据集(edge↔shoes/handbags,动物,街景,Yosemite国家公园)上进行了实验。
首先是edge↔shoes的检索。上面是输入的轮廓,下面是对应的ground truth图片,即轮廓是从这张图片中提取的。把轮廓放到不同的转换网络中,得到了不同的结果。首先看前3列,这3个网络输出的图片基本都一样,缺乏多样性;第4、5列分别是在训练时没有加入L_recon(x)和L_recon©的结果,可以看出结果并不让人满意(有的输出连轮廓都存在形变);第6列是去掉L_recon(s)的结果,质量比前2列稍微好一点,但也缺乏多样性(第1、2个长得很像)。倒数第2列是文章提出的完整框架的输出结果,最后1列是Bicycle-GAN的输出结果。这2个的性能都比较好,但Bicycle-GAN是有监督的,而MUNIT是无监督的,这是一个优势。
这里还给出了量化结果,结论与之前的一致。
文章还给出了用MUNIT进行轮廓和鞋、轮廓和手提包之间相互转换的结果:
然后是动物图像的转换。MUNIT成功地将一种动物转换为另一种动物,保留了整体的姿势、方向等特征,同时还加入了目标域特有的特征:
最后是在SYNTHIA数据集上进行的转换实验,以及用Yosemite国家公园的图像数据集做的实验:
前面的实验,是将content code与从目标域的style空间中采样得到的随机的style code进行重新组合。而相应地,MUNIT还可以允许用户通过指定一个示例的style图像,来控制转换输出的结果:
(总而言之就是很niubility啦o( ̄▽ ̄)d