深度学习-推荐系统-CV-NLP

InstaGAN:Instance-Aware Image To

2019-01-05  本文已影响94人  Mordekaiser

论文:InstaGAN
代码:Github

做了什么?

现有无监督Image-Image translation的缺点:

以上图为例,多个绵阳迁移到长颈鹿就是一个多目标,且形状变化较大的例子。作者提出的InstaGAN就在一定程度上解决了上述问题。

怎么做的?

基于上述问题,作者提出了InstaGAN。考虑图像转换中多个目标的Instance information(比如分割的masks)。使得完成属性迁移的同时,背景保持不变。背景保持不变通过引入context preserving loss来鼓励网络去学习一个目标示例的之外的一个恒等映射。此外,作者提出一种sequential mini-batch的方法以处理生成多个instance时内存不足的问题,同时也提升了生成效果。

总结说来,作者的贡献包括三方面:

具体方法

整个模型基于CycleGAN,这两年基于CycleGAN的工作一大堆(基本上就是应用到不同领域,并加个约束)。不了解的可以看博客CycleGAN

网络框架图

相比于CycleGAN,就是对生成器添加了目标的masks,并且判别器也加了masks。这样可以使得生成的判别器除了能鉴别是否是目标域的数据之外,还可以鉴别其形状(避免出现像上面cycleGAN的结果里面把长劲鹿脖子弄变形的情况)。

三点主要工作

多属性图像翻译的网络结构,属性之间顺序任意

测试阶段:

训练阶段:

context preserving loss

这个比较简单,其实就是把加一个约束,保证masks之外的信息保持不变(下式中的L_{ctx}项)。整个loss如下:

loss

值得注意的是,上述目标域的mask生成没有使用监督信息,而是使用cycle consistency来约束目标域的mask,这样可以使得生成的mask更加鲁棒,比如处理一些遮挡的情况。

sequential mini-batch

当mask增加时,由于h_{GA}的存在,所需显存也是成倍增长,因此这里使用sequential的方法,其实就是渐进迭代的方法。具体看下图:

sequential mini batch

把mask分开,一个个生成就好了。但是这里要注意,通常小的mask放到后面效果会更好。因为迭代进行的话,每次生成的图片都会被改变,后面如果是大mask,很容易把前面生成的小mask跟淹没掉。

所以,使用这种办法,一定程度上破坏了object mask之间的时序不变性,如果GPU显存足够,就不要用这种方法了。

上一篇 下一篇

猜你喜欢

热点阅读