做了什么?
现有无监督Image-Image translation的缺点:
- 涉及多目标的时候,转换效果不佳
-
物体外形变化比较大的时候,转换效果不佳
多目标示例图
以上图为例,多个绵阳迁移到长颈鹿就是一个多目标,且形状变化较大的例子。作者提出的InstaGAN就在一定程度上解决了上述问题。
怎么做的?
基于上述问题,作者提出了InstaGAN。考虑图像转换中多个目标的Instance information(比如分割的masks)。使得完成属性迁移的同时,背景保持不变。背景保持不变通过引入context preserving loss来鼓励网络去学习一个目标示例的之外的一个恒等映射。此外,作者提出一种sequential mini-batch的方法以处理生成多个instance时内存不足的问题,同时也提升了生成效果。
总结说来,作者的贡献包括三方面:
- 提出了一个多属性图像翻译的网络结构,且属性之间的顺序是任意的
- 提出了context preserving loss来鼓励网络去学习一个目标示例的之外的一个恒等映射
- 提出一种sequential mini-batch的方法顺序生成mini-batchs的属性,而不是在整个数据集上做一次。
具体方法
整个模型基于CycleGAN,这两年基于CycleGAN的工作一大堆(基本上就是应用到不同领域,并加个约束)。不了解的可以看博客CycleGAN。
相比于CycleGAN,就是对生成器添加了目标的masks,并且判别器也加了masks。这样可以使得生成的判别器除了能鉴别是否是目标域的数据之外,还可以鉴别其形状(避免出现像上面cycleGAN的结果里面把长劲鹿脖子弄变形的情况)。
三点主要工作
多属性图像翻译的网络结构,属性之间顺序任意
测试阶段:
- 上图中间original image通过提取特征
- original masks通过提取特征,不同的mask代表不同的object。注意上图的Add操作,这个使得不同的mask之间存在时序不变性。
- 将mask的特征和original image的特征进行级联并重构
训练阶段:
- 除了上述步骤之外,还需要利用对masks的特征转换成目标域的mask。
- 判别器需要对重构后的图像,以及masks判断其一致性。
context preserving loss
这个比较简单,其实就是把加一个约束,保证masks之外的信息保持不变(下式中的项)。整个loss如下:
值得注意的是,上述目标域的mask生成没有使用监督信息,而是使用cycle consistency来约束目标域的mask,这样可以使得生成的mask更加鲁棒,比如处理一些遮挡的情况。
sequential mini-batch
当mask增加时,由于的存在,所需显存也是成倍增长,因此这里使用sequential的方法,其实就是渐进迭代的方法。具体看下图:
把mask分开,一个个生成就好了。但是这里要注意,通常小的mask放到后面效果会更好。因为迭代进行的话,每次生成的图片都会被改变,后面如果是大mask,很容易把前面生成的小mask跟淹没掉。
所以,使用这种办法,一定程度上破坏了object mask之间的时序不变性,如果GPU显存足够,就不要用这种方法了。
网友评论