【阅读笔记】《ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation》

本文记录了博主阅读论文《ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation》的笔记,代码。更新于2019.05.23。

Abstract

本文提出了用于语义分割的ReSeg结构,该结构是基于此前提出的用于图像分类的ReNet所产生的。每个ReNet层由4个RNN组成(水平、竖直扫描图像),将activations或图块编码并生成相应的全局信息。同时,ReNet层堆叠在预训练的卷积层上,有利于生成generic local features(一般局部特征)。随后,应用上采样层恢复最终估计中原始图像的分辨率。

所提出的ReSeg结构高效、灵活,并适用于多种语义分割任务。

Introduction

训练空间RNN在计算量巨大。本文提出了一个高效RNN处理图像上下文信息。

Related Work

Model Description

所提出的ReSeg模型是在ReNet基础上的,将其拓展使其能够适应分割任务。模型流程包括多个阶段。

首先,输入图像经过第一阶段的VGG-16网络的层(在ImageNet上预训练,没有fine-tune,设定图像分辨率不会变得过小)。得到的特征图随后送入一个或多个ReNet层,在图像上滑动。最后,一个或多个上采样层用于对最后的特征图进行分辨率恢复,使其与输入分辨率相同,再应用softmax非线性得到每个像素点对应的类别概率分布。

循环层是这个结构的核心,由多个RNN(可以是初级的tanh RNN层)、一个Gated Recurrent Unit(GRU)层或一个LSTM层组成。根据ReNet不需要过多的回归单元,这里选择用GRU模块,因为其能够很好地平衡计算力和内存只用两者之间的关系。

下面是详细介绍。

Recurrent layer

如下图所示,每个回归层都由4个组合在一起的RNNs组成,从而获取输入数据的局部和全局空间结构。
在这里插入图片描述
在这里插入图片描述
具体而言,给定一个图像输入(或者是前层得到的特征图) X \bf X X,其中元素为 x ∈ R H × W × C x\in\mathbb R^{H\times W\times C} xRH×W×C H H H W W W C C C分别是输入的高、宽和通道数。这里将其分解为 I × J I\times J I×J个图块, p i , j ∈ R H p × W p × C p_{i,j}\in\mathbb R^{H_p\times W_p \times C} pi,jRHp×Wp×C。随后,用两个RNNs f ↓ f^{\downarrow} f f ↑ f^\uparrow f(每个有 U U U个回归单元)在竖直方向上扫描第一次,方向分别是自上而下和自下而上。注意,每列的处理是独立的,因此可以并行。

在每个单位时间内,RNN都读取下一个不从跌的图块 p i , j p_{i,j} pi,j,同时在前一阶段的基础上,放出一个投影 o i , j ⋆ o^\star_{i,j} oi,j并更新装在 z i , j ⋆ z^\star_{i,j} zi,j

o i , j ↓ = f ↓ ( z i − 1 , j ↓ , p i , j ) , for  i = 1 , … , I o^\downarrow_{i,j}=f^\downarrow(z^\downarrow_{i-1,j},p_{i,j}),\quad \text{for} \ i = 1,\dots,I oi,j=f(zi1,j,pi,j),for i=1,,I
o i , j ↑ = f ↑ ( z i − 1 , j ↑ , p i , j ) , for  i = I , … , 1 o^\uparrow_{i,j}=f^\uparrow(z^\uparrow_{i-1,j},p_{i,j}),\quad \text{for} \ i = I,\dots,1 oi,j=f(zi1,j,pi,j),for i=I,,1

强调一下,这里决定读取不重叠的图块是一种模型选择,用在增加图像的扫描速递并降低内存使用,但是这不是对于结构的一个限制。

当头两个竖直RNNs处理完整幅图像 X X X后,将映射 o i , j ↓ o^\downarrow_{i,j} oi,j o i , j ↑ o^\uparrow_{i,j} oi,j级联起来,获得一个合成特征图 O ↕ \mathbf{O}^\updownarrow O。用两个新的RNN f → f^\rightarrow f f ← f^\leftarrow f扫描其每一行。这里选择不将 O ↕ \mathbf{O}^\updownarrow O拆成图块,从而使得回归子层与第一个具有相同的间隔尺寸(granularity)。这同样不是一个模型的限制,其他结构也可以进行尝试。

用与前文描述相似的过程(但是镜像),在每个步长内处理一个元素 o i , j ↕ o^\updownarrow_{i,j} oi,j,得到级联的特征图 O ↔ = { h i , j ↔ } i = 1 , … , I j = 1 , … , J \mathbf O^\leftrightarrow = \left\{h^\leftrightarrow_{i,j}\right\}^{j = 1,\dots,J}_{i=1,\dots,I} O={hi,j}i=1,,Ij=1,,J,其中元素为 o i , j ↔ ∈ R 2 U o^\leftrightarrow_{i,j}\in\mathbb R^{2U} oi,jR2U。这个水平回归子层内的每个元素KaTeX parse error: Expected 'EOF', got '}' at position 24: …ightarrow_{i,j}}̲都代表一个输入图像图块 p i , j p_{i,j} pi,j的特征。

一个需要注意的小点:这种做法是可以一层一层连起来得到 O ( 1 , ⋯   , L ) \bf O^{(1,\cdots,L)} O(1,,L)的,随后用任何优化算法实现梯度下降,因为这个模型的分解是平滑、连续的函数。

Upsampling layer

由于在设计上要求每个回归层处理不重叠的图块,因此,只要图块尺寸大于1,最后的复合特征图的尺寸都是要比原始输入 X \mathbf X X小的。为了能够计算得到一个与真值尺寸相同的分割mask,估计必须在应用softmax non-linearity之前将分辨率扩展回来。

为了实现这个目的,可以用几种不同的方法,比如全连接层、全卷积层和转置卷积(transposed convolution)。在这个领域内,第一种方法不太好,因为其没有考虑输入的拓扑关系(对于分割任务至关重要);第二种也不是最优的,因为其需要大尺寸的核和步长来上采样得到需要的倍数。转置卷积在计算量和内存上都高效,因此对于解决这个问题是最有效的。

转置卷积(也称为fractionally strided convolutions,其实就是反卷积)在很多网络结构中都有用到。这种方法是基于一种观测,即直接卷积可以用平铺输入(flattened input)和一个稀疏矩阵的点积的形式描述,该稀疏矩阵中的非零元素是卷积核的元素。

反卷积对输入应用变换矩阵的转置,使得输入和输出形状根据原始卷积的方向转化。
在这里插入图片描述
注:参考文献【13】为《A guide to convolution arithmetic for deep learning》

Experiments

Datasets

在多个数据集下评估ReSeg:首先在Weizmann Horse和Oxford Flowers数据及下测试,之后关注更具挑战性的Camvid数据集。下面具体介绍这几个数据集。

Weizmann Horse

Weizmann Horse数据集(论文)是一个图像分割数据集,包括329中不同尺寸的图像(RGB和灰度形式),匹配有尺寸相同的真值分割图像。真值分割图像包括马的前景/背景mask,以0到255内的实数(real-value)编码。为了将其转换成二进制mask,对真值应用了阈值处理:阈值在范围中间,小于阈值的置0,大于阈值的置1。

Oxford Flowers 17

Oxford Flowers 17 类别数据集(论文)包括1363中不同尺寸的RGB图像,有848个图像分割maps(RGB图像的子集)。有8中不同的分割类别,包括flower, sky, grass。为了构建一个前景/背景mask,在给定了原始的分割图后,设置不属于class
38(flower类别)的为0,属于flower类别的像素为1。这种在Oxford Flowers 17数据集上的二进制分割任务在这里有更详细的的介绍。

CamVid Dataset

Cambridge-driving labeled video database(CamVid)(论文)数据库是一个真值数据库,其中的图像由内置相机的车记录,每帧分辨率为960x720 RGB像素,帧率30帧每秒。录制10分钟,手工标注,32个类别。一小部分像素点在原始数据集中被标注为空(不属于那32个类别,在评估中是忽略的)。这里用与【2】相同的11个子集来训练。将图像2倍下采样至分辨率480x360。

Experimental settings

这个模型的潜在超参数数量庞大,比如对每个ReNet层,各种可能的不同实现(原始RNN、GRU或LSTM),每个都有其特定的参数。为了使得实验可行,这里固定了部分超参数。

所有反卷积层都跟着ReLU非线性,初始化用【18】中介绍的fan-in plus和fan-out初始化机制。不同于前面的正交初始化,循环权重矩阵则用【38】中的初始化机制。这里也限制了上采样的反卷积机制用于适应其他滤波器的尺寸。

在分割任务中,没个训练图像都包含其所有像素的分类信息。与分类任务不同,小的batch size能够给模型提供更多不同的信息,从而帮助提高网络的泛化能力。论文作者尝试了多种batch size,最后发现即使batch size为1,其效果也没有受到影响。在实验中,为了权衡训练速度和内存消耗,使用了固定batch size为5。在实验中,用了L2归一化(也被称为权重下降),设置为0.001以避免训练后期的不稳定性。用Adadelta优化算法训练所有模型,因为其不需要调整任何超参数。由于在RNNs中的有效性没有被证明,因此这里决定不用batch normalization。

在实验中,改变了ReNet层和上采样转置卷积层的个数,每个版本由特征数 d RE ( l ) d_{\text{RE}}(l) dRE(l) d UP ( l ) d_{\text{UP}}(l) dUP(l)定义,输入图块的尺寸(等同于滤波器)由 p s RE ( l ) ps_\text{RE}(l) psRE(l) f s UP ( l ) fs_\text{UP}(l) fsUP(l)定义。

Results

下表是在Weizmann Horses数据库下的结果。这个数据库下验证了VGG-16预训练卷积层的加入能够使得训练过程更容易。但是这里只用了前7层来获取低级特征,而把学习高级特征的任务留给了ReNet层。
在这里插入图片描述
下表是在Oxford Flowers数据集下的结果,用了整个ReSeg结构(包括VGG卷积层)。
在这里插入图片描述
下表是在CamVid数据库下用完整ReSeg结构的结果。
在这里插入图片描述

Discussion

在这里插入图片描述

Conclusion

在这里插入图片描述
在这里插入图片描述
更多内容,欢迎加入星球讨论。
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值