卷积神经网络分析与总结(ENet图像分割)

ENet语义分割网络是一个比较常用的分割网络,它拥有简单的网络结构,快速的运行时间和不多的变量,能够被应用于实时图像分割和移动端设备.相较于其他常规的语义分割网络,例如FCN,SegNet等运行时间与内存分别缩小了数十倍.

1.ENet与常规语义分割网络

语义分割网络应用于图像的像素级分类,即对每一个像素点确定他所属的类别,这就注定了语义分割任务相比于分类识别和目标检测任务要用更长的运行时间和更高的内存空间.
  在FCN语义分割网络中,提出了语义分割任务的整体框架,即深度卷积提取语义特征,上采样还原细节信息,并且使用全卷积代替全连接层,可以输入不同尺寸的图片,并且当图像较大时明显的减少计算量.在SegNet网络中提出了一种解码编码结构,逐层还原特征图,并融合低层次特征图信息.另外提出了一种基于索引的上池化,即记录编码模块池化层取得池化结果对应的坐标,在解码结构中将用该索引上池化特征图,还原解析度.U-Net网络与FCN非常相似,不同点在于U-Net采用多层上采样.Deeplab系列是这些网络的升级版,采用空洞卷积解决其他语义分割网络中的池化导致特征图解析度缩小边缘信息丢失的缺点.
  本文中的ENet网络重点在于缩短网络训练与测试推理时间,减少网络的参数量,减少内存占用.

2.ENet网络模型

在ENet之前,FCN和SegNet等都是采用的VGG16作为基本的特征提取网络,本文中ENet使用类似于ResNet的网络结构,相较于VGG16拥有更少的参数量和更高的精度.
  ENet总体的网络结构包括七个阶段,每个阶段由类似于ResNet的bottleneck模块组成.首先是初始阶段,初始是一个2倍的下采样的过程,从外部输入图像后进入两个分支,一个是3X3步长为2的卷积下采样,另一个是常见的最大池化下采样.中间阶段的每个bottleneck与ResNet中的相似,也是有两个分支,其中主分支用于短接跨层链接,另一个分支则是常规的卷积.这个分支首先经过一个1X1的卷积减小输入特征的通道维数,然后经过一个卷积,之后还有一个1X1的卷积用于恢复原来的维数.在每两个卷机之间都有一个BN层和一个PReLU激活函数,并且在最后一个1X1的卷积之后添加一个Regularizer正则化,这里采用dropout.整个网络中不同的bottleneck中的卷积也可能是不同的,在这里使用的有常规卷积,空洞卷积,非对称卷积等.另外当bottleneck用于下采样或上采样时,内部结构细微改变,在主分支上加入最大池化或最大上池化,为了匹配主分支解析度变化,另一个分支中的第一个1X1的卷积被替换为2X2步长为2的下采样卷积.
  整个网络模型包括7个阶段,输入初始化阶段,前面已经说过;第二个阶段用Stage1表示,包括1个下采样bottleneck和4个常规卷积bottleneck;第三个阶段用Stage2表示,包括1个下采样bottleneck和8个卷积bottleneck,分别采用不同的卷及策略;第四个阶段用Stage3表示,与Stage2一致,除了没有下采样bottleneck;第五个阶段用Stage4表示,包括1个上采样bottleneck和2个常规卷积bottleneck;第六个阶段用Stage5表示,包括1个上采样bottleneck和1个常规卷积bottleneck;第七个阶段为fullconv,类似于FCN中的全卷积层,也采用上面的bottleneck结构,并且输出通道数为C类别数.
  这些阶段中1-3属于编码阶段,5-7属于解码阶段,4阶段为中间过渡.
  在整个网络中都没有添加bias,在cuDNN中,卷积过程和添加偏置的过程是分别计算的,因为网络中包含PReLU激活函数和BN层,所以不添加bias对最后的准确率没有什么影响,同时也减少了参数量和计算时间.另外全卷积过程是非常耗时的,所以在这里只使用了一层的全卷积(在FCN中最后包括三层全卷积).

3.模型选择

特征图解析度

对图像进行连续的下采样会造成图像解析度的下降,会导致两个缺点:
1.造成空间信息的损失,造成无法分割细节信息
2.与下采样对应,我们需要做连续的上采样,将会增大模型尺寸与计算成本
虽然有上面两个缺点,但是语义分割任务下采样是不得不做的,如果不进行下采样,则每次卷积都在原图大小上进行,这将是非常非常大的计算量,这也是为什么deeplab系列只有部分下采样替换为空洞卷积的原因.既然下采样非做不可,那么我们应该如何减小上面两个缺点的影响呢?
  FCN网络提出了跳跃结构,即不同卷积层次的特征图都用于最后的上采样,结合了深层语义信息和浅层边缘细节信息.SegNet提出了池化索引方法,即每次池化时记录池化结果的位置,在上采样时根据池化结果和池化索引进行上池化操作.在这里对于上采样操作,ENet使用了SegNet的池化索引方法,因为它不需要保存整个池化前特征图,而只需要保存池化索引,可以极大减少计算量.

提前下采样

ENet网络在网络的一开始就采用了两次下采样,这样使得图像的解析度直接下降了4倍,这样极大地减少了计算量,这虽然听起来可能会降低分割准确率,但是我们发现,输入的图像本身就是解析度过高,而分割标签并没有精细到如此高的解析度,所以实际上就算我们保留原图进行分割,根据这个并不精细的标签进行训练,得到的结果也不会好到哪里去,倒不如在刚开始的时候就直接对图像进行下采样,只要下采样后图像的解析度仍然大于等于标签的解析度,理论上就不会产生什么影响.而这里的下采样显然也不能作为低层次特征送给解码网络.

解码尺寸

SegNet的编码与解码结构非常对称,但在ENet中,使用了更大的编码结构和一个更小的解码结构.作者认为编码结构用于提取深度特征,并且用于操作更小的解析度,而解码结构仅仅用于上采样编码的输出,仅用于微调边缘细节,所以并不需要特别深.

非线性操作

在这篇文章中使用PReLU替代ReLU激活函数.PReLU中添加了一个额外的变量,在每一个特征图中使用额外的变量,即负方向梯度变量a.

维数变化信息保留

在网络的前段,作者使用了两层下采样,图像解析度直接下降了4倍,这是非常有必要的,但是这样做也损失了很多信息.在这里,作者并行的使用了2X2的步长为2的卷积和2X2的池化,通过下采样卷积来将大解析度的图像变换为小解析度但是深层的特征图.除此之外,在中间的下采样阶段,作者在卷积分支中也将第一个1X1的卷积替换为2X2的步长为2的卷积.

非对称卷积

每一个nXn的卷积核都可以被分解为nX1和1Xn的两层卷积核,在本文中,作者使用了n=5的非对称卷积,在参数量上,5X5的非对称卷积仅仅比3X3的常规卷积多了一个参数,但是它们的感受野扩大了一倍,并且在网络中增加了函数的多样性,减小过拟合.

空洞卷积

在中间的bottleneck中,作者使用了几层空洞卷积,用于减少下采样次数的同时扩大感受野,所以使用空洞卷积.

正则化

在本文中使用了空间droupout,这种方法不同于普通dropout,普通dropout在于随机地将任意位置的权重置为0,而空间droupout不同,它在于随机地将某一个维度的元素全部置为0,例如将某一个通道上的"高"维度的权值全部置为0,或者将某一个元素对应的所有通道权值都置为0.下图左边为普通dropout,右边为空间dropout.
卷积神经网络分析与总结(ENet图像分割)_第1张图片

4.结果

作者在三个数据集上进行进行训练和测试,CamVid,道路场景的Cityscapes和室内场景的SUN RGB-D数据集.作者将试验的结果与SegNet对比,发现在推断和测试速度方面远快于SegNet网络,作者分别给训练好的网络输入不同解析度大小的图像,发现图像解析度越大,ENet的推测速度强于SegNet越多.并且ENet网络变量所占用的内存远远少于SegNet.
训练过程:作者在训练中使用了Adam优化算法,它使得ENet收敛地非常快,训练仅仅花费3到6个小时.训练过程包括两个阶段:首先仅仅训练编码结构来分类下采样图像(也就是预训练特征提取网络),然后再加入解码结构进行微调.

你可能感兴趣的:(神经网络模型,语义分割)