《Graph-FCN for image semantic segmentation》笔记

Introduction

深度学习的语义分割方法使用卷积神经网络提取特征,这些特征因为下采样的原因损失了局部位置信息,而这些局部位置信息对于语义分割任务来说很重要。为了使特征保留局部位置信息,作者引入了Graph-FCN。作者首先使用语义分割网络的中间层特征层构造一个图网络模型,特征层的每个像素位置作为一个图节点,一个节点与它临近的节点连接。图网络模型传入GCN中,对图网络模型的每个节点进行分类,即把语义分割每个像素的分类问题转成图节点的分类问题。

看完论文后,我觉得奇怪的是,作者引入Graph-FCN的目的是构成额外了训练损失,提升网络的训练效果,Graph-FCN的输出结果在测试的时候并不会作为语义分割的结果。

作者会引入Graph-FCN的原因,首先是因为传统的语义分割方法是把图片当成一个图网络,然后切割图网络来实现语义分割。Graph-FCN有更加灵活的跳跃连接,不像卷积网络中上一层卷积层的一个像素只连接下一层卷积层的n×n个像素,Graph-FCN可以探索到图网络中不同节点间的关系。Graph-FCN的消息传播机制在节点间交换信息,每个节点的感受野变得更大。Graph-FCN的所有节点都不会消失,保证局部位置信息不会丢失。这些就是作者在论文中论述的Graph-FCN优点。

Method

FCN

Graph-FCN是基于FCN的,FCN的结果图如下。FCN输出3个特征层,分别是FCN-8s,FCN-16s,FCN-32s。使用FCN-16s得到的分割结果比使用FCN-8s得到的分割结果只低了0.3平均IoU,而且FCN-8s太大了,因此作者以FCN-16s为基准构造图网络模型。
《Graph-FCN for image semantic segmentation》笔记

Node

图网络模型的节点是由FCN输出的特征层组成的。作者选择FCN-16s和FCN-32s,首先把FCN-32s上采样,使得FCN-16s和FCN-32s宽高一样,接着两个特征层拼接成了一个通道数是S(S=FCN-16s通道数+FCN-32s的通道数)的大feature map。feature map的每个像素位置就是图网络模型的节点,每个节点的特征的长度是S。然后feature map reshape成N×S|N| \times S矩阵N,N|N|表示节点的个数。

节点的构成方式如下图所示
《Graph-FCN for image semantic segmentation》笔记

Edge

在图模型中,边表示为相邻矩阵。作者假设每个节点只和最近的ll个节点相连。节点的特征信息可以通过连接的边在图网络中转移。

下图是一个描述图网络的感受野的例子。这里l=4l=4,中心点只和上下左右4个点连接。考虑到在相关性上距离的影响,作者使用通过高斯核函数生成的权重相邻矩阵。具体是怎么生成的,可能需要参考其论文,我暂时不了解。
《Graph-FCN for image semantic segmentation》笔记

Training

我看不懂图网络的训练过程,以后可能会回来补充完整。

训练的损失函数包括两个部分,分别是FCN的损失Loss1和通过图网络生成的输出的损失Loss2,如下图所示。作者说了,Graph-FCN的作用就是得到Loss2损失。

《Graph-FCN for image semantic segmentation》笔记

Experiments

实验用的是VOC2012的数据集。

《Graph-FCN for image semantic segmentation》笔记
Graph-FCN有略微的提升效果。