- 文章转自:微信公众号「机器学习炼丹术」
- 作者:炼丹兄(已授权)
- 联系方式:微信cyx645016617
- 论文名称:“Learning From Synthetic Data: Addressing Domain Shift for Segmentation”
「前言」:最近好久没更新公众号了,我一不小心陷入了一个误区:我以为自己看的文章足够多了,用之前的风格迁移和GAN的知识来解决一个domain adaptive的问题,一顿乱拳并没有打死老师傅,反而自己累个够呛。然后找到这样一篇不错的DA framework,来认真学习一下章法,假期结束重新用章法组合拳再来会会。
0 综述
不同于以往的对抗模型或者是超像素信息来实现这个领域迁移,本文使用的是对抗生成网络GAN来将两个领域的特征空间拉近。
本文提出的是语义分割的领域自适应算法。论文特别关注的问题是:目标领域没有label。
传统的DA方法包含最小化某些可以衡量source和target两个分布的距离函数。两种常见的度量是:
- 最大均值差(Maximum Mean Discrepancy, MMD)
- 通过对抗学习,使用DCNN来学习distance metric
本文的主要贡献在于提出了一种基于生成模型的特征空间源分布与目标分布对齐算法。
1 method
从图片中来初步判断,其实是比较好理解的:
- 首先,我猜测其做域迁移,可能是仿照GAN领域中做风格迁移的办法;
- 图片中总共有4个网络,F网络应该是特征提取网络,C网络是做分割的网络,G网络是把F提取的特征再还原成原图的网络,D网络是做分类的网络,和一般GAN不同的是,D中做四个分类,是True source,True target, False source, False targe. 类似于把cycleGAN中的两个二分类的discriminator合并了。
2 细节
原始图片定义为(X),source domain的图片定义为(X^s),target domain的图片定义为(X^t).
- base network. 架构类似于预训练的VGG16,被分成了两个部分:特征提取部分叫做F网络,做像素分割的叫做C网络。
- G网络是用来从F生成的embedding特征中,重建原始图像的;D网络不仅要分别出图片是否是real or fake,还会做一个分割任务,类似于C网络。这个分割任务仅仅针对source domain,因为target domain不存在标签。
现在我们假定已经准备好了数据和标签({X^s,Y^s}):
- 首先经过F提取出来feature expression,(F(X^s))
- C网络生成分割的标签(hat{Y}^s)
- G网络重建图片(hat{X}^s)
基于最近的相关的成功的研究,不再在G的输入中显式的concatenate一个随机变量,而是在Generator中使用dropout layer
3 损失
作者提出了很多的对抗损失:
- 在一个domin内的损失有:
- Discriminator损失,分辨src-real和src-fake;
- Discriminator损失,分辨tgt-real和tgt-fake;
- Generator损失,让fake source可以被discriminator判断成src-real的损失;
- 在不同domain的损失:
- F网络的损失,可以让fake source的输入被判断为real target;
- F网络的损失,可以让fake target的输入被判断为real source;
除了上面说到的对抗损失外,还有下面的分割损失:
- (L_{seg}):在标准分割网络C中的pixel-wise的交叉熵损失;
- (L_{aux}):D网络也会输出一个分割结果,交叉熵损失;
- (L_{rec}):原始图像和重建图像之间的L1损失。
4 训练过程
在每一个iteration中,一个随机的三元组被输入到模型中:({X^s,Y^s,X^t}),然后网络按照下面的顺序进行更新参数:
- 先更新参数D,更新策略如下:
- 对于source input,用(L_{aux})和(L^s_{adv,D});
- 对于target input,用(L^t_{adv,D})
- 然后更新G,更新策略如下:
- 愚弄discriminator的两个loss,(L^s_{adv,G})和(L^t_{adv,G});
- 重建损失,(L^s_{rec})和(L^t_{rec});
- F网络的更新策略如下:
- F网络的更新是最关键的!(论文中说的)
- 更新F网络是为了实现domain adaptive,$L^s_{adv,F}$是为了混淆fake source 和real target;
- 类似于G-D之间的min-max game,这里是F和D之间的竞争,只不过前者是为了混淆fake和real,后者是为了混淆source domain和target domain;
5 D的设计动机
我们可以发现,这里面的D其实不是传统的GAN中的D,输出不再是单独的一个scalar,表示图片是fake or real的概率
最近有一篇GAN里面提到了,patch discriminator(这个论文恰好之前读过),这个是让D输出的也是一个二位的量,每一个值表示对应patch的fake or real的概率,这个措施极大的提高了G重建的图片的质量,这里继承延伸了patch discriminator的思想,输出的图片是一个pixel-wise的类似分割的结果,每一个像素有四个类别:fake-src,real-src,fake-tgt,real-tgt;
GAN一般是比较难训练的,尤其是针对大尺度的真实图片数据,一种稳定的方法来训练生成模型的架构是Auxiliary Classifier GAN(ACGAN)(真好,这个论文我之前也看过),简单的说通过增加一个辅助分类损失,可以训练一个更稳定的G,因此这也是为什么D中还会有一个分割损失(L_{aux})
6 总结
作者提高,每一个组件都提供了关键的信息,不多说了,假期回实验室我要开始用章法组合拳来解决问题了。