ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation

论文地址:https://arxiv.org/abs/1511.07053
代码地址:https://github.com/Wizaron/reseg-pytorch

1.Introduction

  FCN方法都没有考虑到局部和全局的上下文依赖,那对语义分割非常有用。RNN在文献中检索全局空间依赖关系。进一步提高语义分割。本文用RNN去检索上下文信息,ReNet层可以通过水平扫描图像来有效地捕获图像的上下文依赖关系,然后垂直扫描隐藏状态的输出。因此,ReNet层的输出在每个像素位置隐式地对每个像素位置的局部特征进行编码,从而提供相关的全局信息。此外,为了充分利用局部和全局像素的依赖,在FCN的输出的顶部堆叠ReNet层。

2. Model Description

  首先,输入图片被VGG16(在ImageNet预训练过的)的第一层处理,不设置图片分辨率太小。这个得到的feature map输入到一个或者多个ReNet layers,扫描整个图片,最后,一个或者多个上采样层得到和原图大小一样的图片,一个softmax非线性函数用于去预测这个每个像素的分布概率。
  这个 recurrent layer是这个结构的核心,由多个RNN组成,本文中选择使用GRU单元,因为它们在内存使用和计算能力之间取得了良好的平衡。

2.1 Recurrent layer

  每个循环层由4个RNNs组合在一起,以捕获输入数据的局部和全局空间结构。将X

划分为I x J patches,

然后第一次地垂直地扫描用两个RNN从上到下和从下到上,每一列是独立的可以并行操作。在每一个步骤中,每个RNN都将读取下一个非重叠的patch p_i,j,并基于它之前的状态,发出一个投影o_i,j并更新它的状态z _i,j:
读取非重叠patch的决定是一种建模选择,以增加图像扫描速度并降低内存使用,但并不是模型的限制。

前两个垂直RNN处理整个输入X,连接

他们的投影,获得一个复合特征图,它的元素可以看成是feature检测器在位置(i,j)的激活是所有patches在输入的第j列,称它为垂直循环子层。
  获得这个feature map后,
然后扫描每一行,水平循环子层的每一个元素表示的是输入patch(i,j)(patch具有图片的上下文信息)图片的特征。

2.2 Upsampling layer

  由于每个循环层处理不重叠的patch,所以最后一个复合特征图的大小将小于初始输入X的大小,所以需要上采样。有几种不同的方法,完全连通的层,完全的卷积和转置卷积。第一个在这个领域不是一个好的候选者,因为它没有考虑到输入的拓扑结构,这对于这个任务来说是非常重要的;第二种方法也不是最优的,因为它需要较大的内核,并根据需要的因素对其进行扩展。转置卷积是一种有效的存储和计算方法,是解决这一问题的理想方法。


ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation_第1张图片
image.png

3. Experimental settings

  所有的转置卷积上采样层后面都有一个ReLU非线性,使用fan-in + fan-out初始化方案中初始化。循环的权重矩阵被初始化为标准正交。们还限制了向上采样的转置卷积层的步幅与它们的过滤器大小相关联。
  batch_size:5,L2正则化,权重衰减为0.001,使用Adadelta优化。在实验中,使用不同的数量ReNet层和upsampling转置卷积层,每个分别由features d_re(l)和d_up(l)的数量定义,输入补丁的大小等于过滤器)

4.Dataset imbalanced

  本文使用中值频率平衡,它通过类的中位数(在训练集上计算)和每个类的频率之间的比值来重新加权类的预测。这就增加了低频率类的分数,这是一个更有噪声的分割掩码的代价,因为被低估的类的概率被高估了,并且可能导致在输出分割掩码中错误分类的像素增加。

你可能感兴趣的:(ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation)