深度学习论文: Rethinking Convolutional Feature Extraction for Small Object Detection及其PyTorch实现
PDF: ​​​https://bmvc2019.org/wp-content/uploads/papers/1057-paper.pdf​​​ PyTorch: ​​https://github.com/shanglianlm0525/PyTorch-Networks​​ PyTorch: ​​https://github.com/shanglianlm0525/CvPytorch​

1 概述

作者分析了RFCN 和 SSD两个算法在COCO数据集上,大中小目标的检测性能,明显可以看出小目标的检测性能比大目标相差甚远。

深度学习论文: Rethinking Convolutional Feature Extraction for Small Object Detection及其PyTorch实现_深度学习


然后对SSD mobilenet v1 进行分析, 尝试了三种不同的改进策略对小目标检测性能的影响

  • Large Image Size: 300 x 300 ----> 512 x 512
  • Early Layer Prediction: 在第六个卷积层的feature map进行预测
  • Small Anchor Boxes: 在10 x 10的feature map 上增加 Anchor

深度学习论文: Rethinking Convolutional Feature Extraction for Small Object Detection及其PyTorch实现_人工智能_02


明显可以看出增加图像输入分辨率,对小目标性能提升很大。

2 Proposed Approach

作者提出对目标检测的backbone网络进行两次修改。
一,作者消除了Strided Convolution和Pooling以扩大 feature map。
二,为了减缓第一步对大目标检测性能的影响,作者使用权重共享的单独路径来检测大型物体。

2-1 Strided Convolution and Pooling Elimination

作者在backbone中消除了几层Strided Convolution,采用了相同的权重居然可以检测小的目标,这表明了现有的权重是可以用于小目标的分类,只需要增加特征图的大小。

深度学习论文: Rethinking Convolutional Feature Extraction for Small Object Detection及其PyTorch实现_深度学习_03


在所有的配置中,都可以看到小对象性能不断提高,但是计算代价也对应增加。因此作者认为小目标检测相对应的语义特征受相邻干扰因素的影响较小,因此可以消除Strided Convolution。同时实验中可以发现,在相同的计算顺序下,早期Strided Convolution显示出最佳结果。

深度学习论文: Rethinking Convolutional Feature Extraction for Small Object Detection及其PyTorch实现_ide_04

2-2 Dual-Path Weight Sharing for Large Object Detection

消除backbone的stride操作对于小目标没有影响,但是却会降低大目标的性能。

  • C,根据比例尺各自对应的图层将比例尺特定的特征图进行级联,例如对于S1L0结构,第13层的特征图为19 x 19,在大目标路径,第11个特征图的大小为19 x 19。因此将小物体路径的第13个特征图和大物体路径的第11个特征图连接起来并提供给预测层, 见下图。但是明显地增加了参数和计算的数量。
  • 深度学习论文: Rethinking Convolutional Feature Extraction for Small Object Detection及其PyTorch实现_机器学习_05

  • S将小目标和大目标的预测器分开。对于SSD Mobilenet v1 S1L0,第一个和第二个预测器仅在小型对象路径特征图(38 x 38和19 x 19)上起作用,而预测器3至6仅在大目标路径特征图(10 x10上)起作用。

3 Experimental

深度学习论文: Rethinking Convolutional Feature Extraction for Small Object Detection及其PyTorch实现_机器学习_06