Press "Enter" to skip to content

【图像分割模型】用BRNN做分割—ReSeg

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

在这里,我们将共同探索解决分割问题的主流网络结构和设计思想。

 

尽管许多人都知道RNN在处理上下文上多优于CNN,但如何将RNN用于分割任务还是值得讨论一下。本文我们就来聊聊用BRNN做分割的ReSeg。

 

作者 | 孙叔桥  编辑 | 言有三

 

本期论文

 

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

 

1 简单说说BRNN

 

(1) 什幺是循环神经网络

 

不同于卷积神经网络(CNN,Convolutional Neural Network)通常以图块(patches)为输入,循环神经网络(RNN,Recurrent Neural Network)的输入是序列形式的。即使在处理图像时,通常也需要对图像矩阵进行展开(flatten)操作,再应用RNN。 输入序列数据后,RNN在序列的演进方向递归所有节点,并将其定向链式连接。

 

下图是一个简单的RNN单元示意图:

 

 

(2) 为什幺要用RNN

 

尽管CNN在处理多维数据(如图像)时的表现相当不错,但是其需要依赖人工指定的核函数来完成计算,因此在处理上下文信息的时候受到了限制。 相反,RNN本身拓扑结构的设计,使得其能够利用内部记忆处理任意时序的输入序列,从而在长短时间间隔序列的处理上比CNN更具优势。

 

(3) 什幺是BRNN

 

BRNN是双向循环神经网络(Bi-directional RNN)的缩写,属于循环神经网络的一种。基础RNN只能依据之前时刻的时序信息来预测下一时刻的输出,但是有些问题中需要联系上之前和未来状态,共同进行预测。BRNN由两个方向不同的RNN堆叠而成,同时处理过去和未来信息。下图是BRNN的示意图:

 

 

2 ReSeg:用BRNN做分割

 

ReSeg是基于图像分割模型ReNet提出的。因此,我们首先来看一下ReNet。下图是ReNet的运算示意图:

 

 

如图所示,ReNet由两层顺序排列的RNN构成。在给定输入图像(或前层)特征后,ReNet对展开结果分别按列、按行扫描。每个扫描过程由两个相反方向的RNN运算单元实现。具体公式如下:

 

 

其中f代表RNN,I为图像子块行数(图像被分割成IxJ块),o是结果,z为之前的状态,p为子图块内的像素点。

 

给定输入图像后,ReSeg首先用预训练好的VGG-16提取图像的特征,随后开始应用基于SeNet的网络结构进行分割任务。具体网络结构如下图所示:

 

 

从网络结构可以看出,ReSeg应用了3次串联的完整ReNet模块,空间分辨率在这个过程中逐渐减小。这幺做的目的是,将VGG-16提取的特征进行进一步的处理,从而得到对输入图像更复杂的特征描述。

 

特征提取结束后,特征图对输入图像的空间分辨率下降为1/8,因此需要恢复空间分辨率以得到稠密的分割结果。因此,在所有ReNet模块结束后,ReSeg应用了若干层由反卷积组成的上采样层,将特征图的空间分辨率恢复成原始输入图像的空间分辨率。

 

最后,简单应用softmax实现分割。

 

3 实验结果

 

ReSeg的实验用到了三个数据库,分别是Weizmann Horses、Oxford Flowers和CamVid。其中,前两个数据库比CamVid要容易一些,因此这里只讨论CamVid下ReSeg的表现,感兴趣的读者可以移步原文看ReSeg在其他数据库下的实验结果。

 

下表是ReSeg在CamVid数据库下对不同类别的分割结果以及与其他算法的效果比较。

 

 

下图是ReSeg在CamVid下的分割结果图:

 

 

从左到右:、真值、ReSeg结果、带类别平衡的ReSeg结果

 

本专栏作者维护的深度学习图像分割星球上线了,欢迎大家参与学习与讨论

 

 

总结

 

尽管ReNet和ReSeg的提出时间较早,分割效果相比较state-of-the-art算法也略有不足。但是,其提供的模型设计与卷积操作上的思路是非常新颖的,同时也巧妙地用GRU解决了RNN梯度消失问题,因此对于分割任务的网络设计具有一定的启发性作用。

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注