论文笔记——ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation

        作者提出了一种基于残差连接和深度可分离卷积的语义分割网络,旨在不降低准确率的同时提高处理的帧数,可以满足自动驾驶中对于实时性的要求。一句话就是,我全都要!


单元组成

        简单地说,网络中主要使用了残差连接,这种捷径可以使得低维的特征可以往后流动而不是被网络完全转化,同时也在训练时减少了梯度消失等情况。另外使用了深度可分离卷积,可以减少网络中的参数数量,提高训练效率和实际推算的速度。

       残差层可以用函数表示为

y=F(x, {W_{i}})+W_{s}x

上式中的F(x,W_{i})表示的就是残差网络,后者就是捷径所传递的信息,一般不是直接把 x 传过来而是再加上一个参数矩阵简单处理。残差连接的好处就是在堆叠式网络结构中加速特征学习以及消除梯度消失的现象。    

论文笔记——ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation_第1张图片

        论文中列举比较了如上三种残差连接网络中的单元,第一种是 non-bottleneck,是最经典/旧的单元,由两个卷积层组成,在计算的过程中深度不变,都保持为 w,考虑有 bias 的情况参数数量是

2*(w*(3*3*w+1))=18w^{2}+2w

       第二种是 bottleneck,这样子叫的原因我想是因为卷积核的大小变化,1-3-1,就像一个中间大两头小的瓶子,参数数量是

w/4*(1*1*w+1)+w/4*(3*3*w/4+1)+w*(1*1*w/4+1)=\frac{17}{16}w^{2}+\frac{3}{2}w

       文献里面说,Both versions have similar number of parameters and almost equivalent accuracy,说第一和第二的参数量是一样的?不过我计算出来显然第二种是少于第一种单元的,这个不知道作者的意思。参数量显著减少的原因是因为有一个 1*1 的 projection 压缩了特征的维度,后续再 expansion。不过可以确定的是后者肯定在计算速度上要更有一些,而且可以拓展了深度,即非线性化的relu层从一个变到两个。

However, it has been reported that non-bottleneck ResNets gain more accuracy from increased depth than the bottleneck versions, which indicates that they are not entirely equivalent and that the bottleneck design still suffers from the degradation problem

但是作者补充了说,在多个单元堆叠起来的时候,还是第一种使用 non-bottleneck 的残差卷积网络可以获得更高的准确率。

       第三种是目前更先进的一维卷积,也就是将二维卷积拆分成两个,作者把这种单元叫做 non-bottleneck-1D。好处也是显而易见,增加非线性化的层数,以及在整体上减少参数数量。替换之后,可以保持相同的参数数量,扩大卷积的尺寸,也就是 width,增强感受的能力。


架构设计

论文笔记——ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation_第2张图片

       作者设计了一个类似 SegNet 和 ENet 的序列式网络结构,包含有编码器和解码器。如上图,1 到 16 是属于解码器, 17  到 23 属于编码器。

       编码器中主要包括了上文提到的 non-bottleneck-1D 也就是图片中的 Non-bt-1D,以及降采样层 Downsampler block。降采样层的缺点是对特征尺寸宽度的压缩会降低结果的像素分割的准确率,但优点是使得更深的层可以获得更多的信息,提高在分类上的准确率(这个地方不会有点矛盾吗??)。考虑到上述原因,所以在第1、2、8选择作为降采样层,具体的内容是受 ENet 的 initial  block 启发的,将输入分别进行 3*3 的卷积运算和最大值池化,然后把两个结果 concat 到一起。在 ENet 中,只是在 initial block 中这样子做,其他的降采样单元不是这种方式,不过作者选择把这种方式应用到架构中的所有降采样层。

论文笔记——ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation_第3张图片

       另外作者还在所有的 Non-bt-1D 中使用了空洞卷积 dilate convolution,增大感受野,提高结果的准确率,比单纯是扩大卷积核的尺寸要更好。然后也是所有的 Non-bt-1D 都包含了 dropout 层,概率提高为 0.3(相对于 ENet 的 0.1 和 0.01),抑制过拟合提高准确率。

       解码器主要的作用是将小尺寸的特征图恢复到原图的大小,在 SegNet 中编码器和解码器是对称的,但是从 ENet 中学到不对成的架构方式,小的解码器并不会有负面的影响。不过作者并不沿用 SegNet 和 ENet 中的 max unpooling 的上采样算法,而是使用步长为 2 的转置卷积,2 就是可以长宽扩大两倍,优点就在于不用再传递编码器中的 pooling indexes,简化了数据存储和运算,而在准确率上并没有损失甚至有 slightly improve。


其他

All experiments are conducted using the Torch7 framework with CUDA and CuDNN backends. Our model is trained using the Adam optimization of stochastic gradient descent. Training is performed with a batch size of 12, momentum of 0 . 9 , weight decay of 2 e-4 , and we start with a learning rate of 5 e-4 that we divide by a factor of 2 every time that the training error becomes stagnant, in order to accelerate convergence. The code for training and evaluation is publicly available at https://github.com/Eromera/erfnet .
        一般来说后半部分就是作者在训练时在数据集上的表现,然后和一些同类模型的对比。总的来说,运算速度和准确率的权衡,使得网络符合自动驾驶等场景的实时性要求。
 

论文笔记——ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation_第4张图片

        在语义分割模型中,一般都是使用 IoU ,Intersection-of-Union 来描述网络的准确率,具体的计算公式为

IoU=\frac{TP}{TP+FP+FN}

其中的 TP是 true positive,正确判断为正例的数量,也就是原本确实是正例;FP 是 false positive,错误判别为正例的数量,也就是原本不是正例是反例;FN 是 false negative,错误判断为反例的数量,原本应该为正例的。以下图为例,假设左图蓝色区域是正例,然后我模型给出的结果是一个红色区域,重叠的部分改涂为绿色。那么 TP 也就是绿色区域的面积,是正确被判断为正例的;然后蓝色区域,也就是错误判断为反例的,是 FN;最后是红色区域,错误判断为正例的,用 FP表示。显然如果 TP 占三者之和越大,也就说明拟合的结果越好,并且这种计算方法防止了简单粗暴用红色把整个蓝色包裹了起来的拟合趋势,因为那样子模型的 IoU 会因为 FP 的过大而降低,总的来说这是一个非常有用的指标!

论文笔记——ERFNet: Efficient Residual Factorized ConvNet for Real-time Semantic Segmentation_第5张图片

 
 
 
 
 
 
 
 
 

你可能感兴趣的:(深度学习:CV和NLP)