论文笔记-ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation

paper: ENet: A Deep Neural Network Architecture for Real-Time

code: caffe

Abstract

  1. ENet是16年初的一篇工作了,能够达到实时的语义分割,包括在嵌入式设备NVIDIA TX1,同时还能够保证网络的效果。整体结构是Encode-Decode的形式,但是其Encode部分和Decode部分是有链接的,类似于UNet,将Encode中的某一层执行deconv,然后和Decode过程中相同大小的层融合到一起(element-wise)。
  2. ENet的基础模块包括如下图中的两部分
    • 图a,是网络的初始化阶段的结构,并行的conv和pool
    • 图b,是网络的后续结构的基本组成单元,相对于也是ResNet的变种,左侧虚框包围的maxpooling和padding两层,是代表不是每一个单元skip connection时都加入这个层了
  3. 整体的网络结构如下表格所示:
    • initial阶段就是上面说的图a
    • stage1是5个普通的bottleneck结构;stage2中,加入了dilated conv,同时有两个bottleneck结构中把\(3\times\)conv改成非对称的\(5\times1\)和\(1\times5\)的conv;stage3和stage一致,只是不会进行降采样
    • stage4和stage5是decode的组成部分

Details

如下的细节分析,根据论文中讲述的细节进行讨论

  1. feature map resolution
    • 大的feature map对精度提升有帮助,但同样需要较大的内存。最终,用dilated conv保证大的感受野和小的内存占用
  2. early downsample
    • 作者认为,encode模块应该更关注于提取更加鲁棒的特征,而不用关注分类的效果。因此,ENet在前面两个bottleneck结构就把input size降到很低来,同时使用较少的kernel个数。(作者在Cityscape数据上测试将前几层的kernel个数从16改为32,并没有很明显提升精度)
  3. decode size
    • 作者认为,decode模块主要功能是finetuning一些细节,所以不需要将decode模块像SegNet一样和Encode模块完全的对称。最终的ENet结构,encode模块较大,decode模块较小
  4. nonlinear operation
    • ENet用PReLU代替ReLu,个人没太理解作者的分析
  5. information-preversing dimensionality changes
    • 将串行的conv和pooling改成并行的形式,如论文所述,这种方式能够将initial block的前向过程提速10倍左右,非常amazing
    • ResNet的bottleneck模块的第一个conv是\(1 \times 1\)的,为了能够把更多的信息带入进来,ENet的bottleneck模块的第一部分,都是采用的\(2 \times 2\)的conv
  6. factorizing filters
    • 使用非对称卷积降低参数,同时还能提速
  7. dilated conv && regularization
    • dilated conv增大感受野,不多说了
    • regularization,ENet在执行element-wise操作前使用了Spatial Dropout
  8. 结果
    • ENet的速度比SegNet快了很多,同时模型的参数量也降低了很多很多
    • 速度比较
    • 参数量比较

写在后面

  1. ENet对嵌入式设备很友好的,保证精度的同时,提升速度,同时模型的参数量也很小
posted @ 2020-05-22 16:49  StoneclutterX  阅读(459)  评论(0编辑  收藏  举报