ENet学习笔记

 

1.简介

    Segnet、FCN都是基于VGG16的,但VGG16本身就是一个很大的网络,参数多,故inference时运行慢,无法运用到实时场景。本文提出ENet分割算法,它在精确率和运行时间上作了权衡,能够运用在移动端的实时分割任务中。
    个人感觉ENet的思想跟GoogLeNe有点类似,就是本质都是为了解决参数过于密集(参数太多),而引入稀疏性,降低参数数量的量级,从而提升inference的速度。那么如何引入稀疏性?主体思想就是:将一个大的卷积操作分解几个卷积/池化的组合,即分解成一个block,作为构建网络的基本模块。
 
 

2.网络结构

 

2.1.initial block

    ENet有两种block,一种是initial block,如图(a)。它是ENet网络的第一个模块,也仅仅出现一次。initial block的主要作用就是先对输入图像进行下采样,以降低后续feature map的size。该模块的输出size为输入图像size的一半,通道数为16,其中Conv路径输入13通道,MaxPooling输出3通道(原来的RGB通道),故总共16通道。可以看出,输入图像首先经过initial block,feature map size就能将为一半,这无疑极大减少了后面的计算量,从而提升inference时的速度。
 

2.2.bottleneck module

    另一种block是bottleneck module,该block是ENet的基本构成单元(如Inception之于GoogLeNet),如图(b)。该模块科充当Conv、DownSampling、UpSampling三个功能。它分为主分支和副分支:主分支是MaxPooling+Padding操作,该分支只有在下采样时才起作用,其他情况下操作为空:副分支为1*1Conv+Conv+1*1Conv,第一个1*1Conv用来降低通道数,第二个Conv是正常的Conv,用于提取特征信息,第三个1*1Conv是用于增加通道数。所以,这三个Conv连用起来的意思无疑很明显了,先通过1*1Conv通道数降低维度,然后再用正常的Conv来提取特征,最后再用1*1Conv拔通道数提升回去,从而能够降低总的参数个数和计算量,故能够提升速度。
    那么如何区别是Conv操作,是DownSampling操作,还是UpSampling操作?
    (1)当是模块作为DownSampling操作时,主分支开启,主分支是一个kernel=2*2,stride=2的MaxPooling。副分支的第一个1*1Conv改为同样的kernel=2*2,stride=2的MaxPooling,这样主副分支才能同样达到二倍下采样的效果(注意,副分支的第二个Conv是需要通过padding保持feature mpa size不变,三种操作都如此)。副分支的第二个Conv应该是空洞卷积吧?
    (2)当模块作为Conv操作时,主分支屏蔽,副分支正常,其中副分支中间的Conv可以是正常Conv、空洞Conv,甚至是5*1Conv+1*5Conv的不对称卷积(asymmetric convolution,这个不懂)。kernel_size可以是3*3或者5*5。但不管如何,都要通过padding维持feature map size不变。
    (3)当模块作为Upsampling操作时,主分支屏蔽,副分支的第二个Conv改为Deconvolution,即反卷积。但论文又提到上采样用的是下采样时的index,就如SegNet那样。那究竟是使用Deconvolution还是使用index?
 

2.3.整体结构

    ENet网络的整体结构如下,可以看出encoder比decoder复杂。
 
 

3.设计选择

3.1.特征图分辨率

    在语义分割中,下采样有两个缺点:(1)空间信息的丢失,如边缘形状。而且强下采样会损害精确率。(2)强下采样就需要强上采样才能回复原来的分辨率,这意味着需要更大的模型复杂度。
    但是,下采样又有一个好处:能够增大感受野。为了能够增大感受野,又不丢失空间信息和增加模型复杂度,下采样通过空洞卷积实现。
 

3.2.早期下采样

    早期下采样是很重要的,因为原始输入图像的size很大,因此计算花费很大。ENET通过initial block大大降低了输入size,输出一小集合特征图。其依据就是:(1)可视化信息在空间上是高度冗余的,因此它们可以被压缩在一个更高效的表示里。(2)前面的层并非直接对分类作出贡献。
 

3.3.Decoder size

    一般而言,在分割网络中:encoder大,decoder小。因为encdoer的作用是从原始图像中提取信息,而decoder只是对encoder的结果进行上采样、微调信息。所以decdoer可以比encoder简单些。
 
3.4.Nonlinear operations
3.5.Information-preserving dimensionality change
3.6.Factorizing filters
3.7.Dilated convolution
3.8.Regularization
 
 

posted on 2020-08-12 22:48  ZhicongHou  阅读(593)  评论(2)    收藏  举报

导航