《Semantic Segmentation using Adversarial Networks》论文笔记

论文地址: https://arxiv.org/pdf/1611.08408.pdf
论文地址: pytorch   tensorflow
tensorflow并不是作者提供的源码,网上分享的,据说Discriminator的作用并不明显...跟数据集的分布相关

What:首次将对抗生成网络(gan)应用到语义分割当中来。使用判别器识别真实标签与分割图象,缩小标签与分割图像之间的高次不一致性。结构如下图所示,这个网络由两个部分组成。左边是一个分割器,这个网络就是普通的分割网络,作者根据不同的数据集也选用了不同的结构。对于Stanford Background dataset,作者选用了 mutil-scale segmentation network, 对于Pascal VOC 2012 dataset,作者选用了 Dilated-8 architecture .
《Semantic Segmentation using Adversarial Networks》论文笔记_第1张图片

Why:作者使用对抗生成网络的最要的目的就是解决标签与预测值之间的高次不一致性。作者提出,之前的语义分割的大多模型有一个共同的特性就是像素点的预测是独立的,没有考虑到相互之间的相关性。在之前的模型中考虑到像素相关性的多是使用CRFs,最近的研究工作表明高次一致性可以更有效的考虑像素间的关系。为此,作者引入对抗生成网络,提高标签与预测分割图之间的高次一致性,从而提高分割结果。

How:整个网络的实现过层难点在于对抗网络的搭建。对抗网络的输入以及损失函数的构建及训练是这个网络的重点。
关于对抗网络的输入:网络的输入还是比较复杂的,并不是只是简单的将标签和分割图输入就行了,作者进行了一些了的编码过程。输入的构建如下图所示:

《Semantic Segmentation using Adversarial Networks》论文笔记_第2张图片

对于Stanford Background dataset,作者先做下采样(下采样的倍数取决于取的分割图的大小),然后下采样后图片与输入的分割图(分割图可能是网络训练后分割的图,也可能是标签)做点乘。这样得到3通道数的特征图作为输入。
对于Pascal VOC 2012 dataset,这个就跟复杂了,分成basic,product, scaling三种方式,具体看文中。

关于网络的损失函数的构建及训练:

网路的损失函数是混合两个网络(分割网络与对抗网络)的损失函数。分割网络的损失函数可以是普通的多类分类的softmax.对抗网络是二分类的sigmoid.混合损失函数表示如下:
第一项是分割分类的损失,第二项是对抗网络判别网络的损失。

实际训练中,需要先训练对抗网络,这样才能保证训练分割网络时,对抗网络是有效的。对抗网络的损失函数可以表示为:
当输入与1(标签)很相近时损失较小,当输入与标签差别大时损失较大,这样使得网络能够构建出与标签近可能接近的分割图。

再训练分割网络,分割网络的损失函数可以表示为:
这里加入后面一项,是为了让对抗网络在分割过程中也起作用。但是为了更好的收敛,作者将最小化预测分割图是0,变为最大化预测分割图为1.这样后面一项变为:

对抗网络和分割网络可以轮流训练,得到最终的模型。

Result:    作者给出的训练结果对比图还是能看出明显的效果的,结果如下,可以试试,反正我用了结果不咋地。
《Semantic Segmentation using Adversarial Networks》论文笔记_第3张图片

你可能感兴趣的:(分割,gan)