[semantic segmentation] using Adversarial Networks 论文学习

论文地址:
Semantic Segmentation using Adversarial Networks NIPS 2016
https://arxiv.org/abs/1611.08408


1. 网络结构

这篇论文是首次将GAN思想用于semantic segmentation.

在GAN中,有生成器和判别器,生成器生成fake样本然后判别器进行鉴别,随着训练的进行,生成器的fake样本越接近与数据真实分布,判别器也越难分辨真伪。

将GAN用于分割,实际上,基本的分割网络(FCN, DeepLab, PSPNet……)就是GAN中的生成器。换句话说,GAN用于分割不需要另外再构造一个生成网络,传统分割网络就是生成网络。然后在生成网络之后加一个判别网络结构,如图所示:

[semantic segmentation] using Adversarial Networks 论文学习

左边Segmentor就是传统的CNN-based分割网络,Convnet中可以看到有convolution和deconvolution过程;右边Adversarial network是GAN中的判别器,最后用sigmoid activation进行二分类。

Segmentor这个部分会有两种训练图片输入到右边的Adversarial network中:
组合1:原始训练图片+ground truth, 这时候判别器判别为 1 标签;
组合2:原始训练图片+Segmentor分割结果, 这时候判别器判别为0标签。

然后训练过程就是经典的博弈思想,相互提高网络的ability, 提高分割精度,提高鉴别能力。


2. 对抗训练

论文提出了混合损失函数,讲cross entropy和GAN的损失结合起来了

[semantic segmentation] using Adversarial Networks 论文学习

对抗训练分成两个步骤迭代,训练思想与EM算法有点像,需要找到两个参数最优相互调整,先固定一个参数,调整另一个参数,再循环迭代。

步骤1:训练对抗模型
相当于训练GAN辨别真伪的能力
[semantic segmentation] using Adversarial Networks 论文学习

步骤2:训练分割模型
这时候,(2)式是(1)总loss中的对抗网络部分,所以在训练分割模型的时候必须加上每个pixel的相互熵损失,也就是(1)中第一项,但是同时分割模型需要对抗网络的反馈,需要朝哪个方向训练作为训练方向
[semantic segmentation] using Adversarial Networks 论文学习
可以看到(3)式中的正则化项就是来自于(2)中的第二项,这也是论文中提到的参数共享的思想。


3. 实验结果分析

论文用了 Stanford background 和 Pascal VOC 2012 数据集
在Stanford的实验结果比较好,可能是因为数据集也小,但在Pascal的效果不明显,精度和原模型差异不大~

Stanford结构

[semantic segmentation] using Adversarial Networks 论文学习

[semantic segmentation] using Adversarial Networks 论文学习

Pascal结构

[semantic segmentation] using Adversarial Networks 论文学习


参考资源链接:

[1]博客1:http://blog.csdn.net/diligent_321/article/details/55224631
[2]知乎:https://zhuanlan.zhihu.com/p/25201511