1简介
通过更好的模型架构、训练和推理方法的结合,目标检测系统的速度-精度Pareto曲线得到了改进。在本文中系统地评估了各种各样的技术,以理解现代检测系统的大多数改进来自哪里。
本文用RetinaNet和RCNN检测器在普通的ResNet-FPN backbone上对这些改进进行benchamrk测试。普通检测器的准确率提高了7.7%,速度提高了30%。
作者进一步提供了简单的scale策略来生成形成两条Pareto曲线的模型族,分别命名为RetinaNet-RS和Cascade RCNN-RS。这些简单的rescale检测器探索了one-stage RetinaNet检测器和two-stage RCNN检测器之间的速度-精度权衡。
最大的Cascade RCNN-RS模型使用ResNet152-FPN backbone实现了52.9%的AP,使用SpineNet143L backbone实现了53.6%。最后,展示了ResNet架构作为目标检测和实例分割系统的backbone,通过3个微小的架构变化后,其性能优于EfficientNet。
本文主要贡献:
- 确定了关键的架构变化、训练方法和推理方法,显著提高了目标检测和实例分割系统的速度和准确性;
- 强调了关键的实现细节,并为RetinaNet和Cascade RCNN模型建立了新的baseline;
- 提供了2个目标检测模型家族作为未来研究的新baseline,RetineNetRS和Cascade RCNN-RS;
- 探索了one-stage RetinaNet和two-stage RCNN模型之间的速度-精度权衡。
2主要改进方法
2.1 修改ResNet架构
这部分作者从3方面改进了标准的ResNet体系结构,以在较小的计算代价下提高其性能。Bello等人证明了SE Block和ResNet-D对于分类模型都是有效的。最近的检测方向也显示了像Sigmoid线性单元激活这样的非线性激活函数对提高检测性能也是有效的。
Squeeze-and-Excitation
作者将SE模块应用于ResNet体系结构中的所有残差块中。接下来,在最后的1×1卷积层之后放置一个注意力模块,但在将残差部分与shortcut连接合并之前。所有实验都采用0.25的squeeze ratio。
ResNet-D stem
作者将原始的ResNet stem修改为ResNet-D stem。综上所述,作者将3个特征维数为64的7×7卷积层替换为特征维数分别为32、32、64的3×3卷积层。第1个3×3卷积的stride=2。同时在每个卷积层之后应用批处理归一化和激活层。
Sigmoid Linear Unit activation
计算的单元(SiLU)作为ReLU的替代可以得到良好的效果。在本研究中,作者将模型架构中的所有ReLU(backbone、FPN和检测头)替换为SiLU。
2.2 训练和推理方法
训练方法
Strong data augmentation
作者应用了水平翻转和图像比例抖动,随机比例在[0.1,2.0]是主要的数据扩充策略。例如,如果输出图像的大小是640×640,首先将图像的大小调整为随机在64×64和1280×1280,然后填充或裁剪调整后的图像到640×640。
Strong regularization
应用4e-5权重衰减和初始dropout rate为0.2的随机深度进行模型正则化。根据network block在网络中的深度设置network block的dropout rate。一个block的最终dropout rate是通过将初始dropout rate乘以block的顺序除以总block数来计算的。
Longer training schedule
强数据增强和正则化方法与较长的训练计划相结合,以充分训练模型收敛。在不同的数据集上,不断增加训练的epoch,直到找到最佳schedule。
推理方法
对于推理,作者使用与训练相同的正方形图像大小。调整图像的较长边到目标尺寸,并填充0以保持宽高比。在batchsize为1的Tesla V100 GPU上测量推理速度,设置仅包括模型前向传递时间和前向传递加上后处理(例如,NMS)时间。作者报告了用float16精度和float32精度测量的延迟。进一步的推理时间加速可以通过TensorRT优化,这在本工作中没有使用。
2.3 Model Scaling Method
作者提出了一种简单而有效的缩放方法,用于one-stage RetinaNet和two-stage RCNN检测器。EfficientDet中的复合缩放规则将输入分辨率与模型深度和所有模型组件(包括backbone、FPN和检测头)的特征维度一起进行缩放。
作者发现,在速度精度Pareto曲线的大多数阶段中,仅在输入分辨率和backbone深度上扩大模型是相当有效的,同时也非常简单。作者通过经验控制图像分辨率和backbone模型,然后进行如表1所示的网格搜索来确定Pareto曲线。
对于RetinaNet,将输入分辨率从512提高到768,ResNet backbone深度从50到152。把RetinaNet作为一阶段目标检测,作者发现大的缩放输入分辨率会带来大分辨率的特征图,因此更多的锚点处理。这将导致更高密度的预测Head和复杂的NMS计算。RetinaNet的输入分辨率为768×768。缩放方法如表2所示。作者将重新缩放的RetinaNet模型命名为RetinaNet-RS。
对于RCNN模型,提高输入分辨率比单阶段检测器更有效。RCNN采用两阶段目标检测机制。
第一阶段是区域建议阶段通常是轻量级和类无关的,因此输入解析不会在第一个阶段造成太多的开销。
第二阶段总是处理从第一阶段产生的固定数量的预选框。作者设计了新的缩放方法,将输入分辨率从512扩展到1280,将ResNet backbone深度从50扩展到200。RCNN模型的缩放方法如表3所示,重新缩放的模型族称为RCNN-RS。
3检测框架
3.1 RetinaNet-RS
检测Head
遵循标准的RetinaNet head设计。简而言之,在最终的预测层之前使用4个3×3特征维数为256的卷积层和分类子网。每个卷积层之后是一个BN层和一个SiLU。
卷积层在检测头的所有特征层中共享,而BN层不共享。作者设置anchor的长宽比为[1.0;2.0;0.5],并将基准anchor大小设置为3.0。focal loss参数α和γ分别设置为0.25和1.5。
特征提取
3.2 Cascade RCNN-RS
RPN Head
对于Cascade RCNN-RS,作者通常Cascade RCNN的实现。对于RPN head,作者在特征维数256处使用2个3×3卷积层,同时设计与RetinaNet相同的锚定框设置。作者用500个proposals进行训练,用1000个proposals进行推理。
Box回归Head
作者对box regression head使用2种设置,一种用于常规尺寸模型,另一种用于大尺寸模型。
对于常规尺寸的模型,作者实现了2个级联head,增加IoU阈值0.6和0.7。在最终的预测层之前,每个head在特征维度256处有4个3×3卷积层,在特征维度1024处有一个全连接层。
需要注意的是,为了获得良好的性能改进,必须使用与类无关的边界框回归。对于box regression head这里只预测了4个bounding box coordinates,而不是4个(类的数量)。
Instance segmentation head
在Instance segmentation head的最终预测层之前,作者在特征维度256处使用了4个3×3卷积层和1个3×3 stride=2反卷积层。
特征提取
作者首先使用常规大小的Cascade RCNN框架研究了ResNet-50/101/152/200模型族和EfficientNet B1到B7模型族的性能。
为了扩大基于ResNet的模型,作者使用表3中描述的缩放方法。扩大基于EfficientNet的模型。在ResNet和EfficientNet backbone上附加一个标准的FPN来提取P3到P7多尺度特征。
为了获得最好的性能,作者采用了SpineNet-143/143L backbone。SpineNet-143L backbone将SpineNet-143中所有卷积层的特征维度均匀地扩大了1.5倍。
4实验
4.1 速度与精度实验
4.2 输入分辨率的影响
4.3 后处理速度对比
4.4 SOTA实验
5参考
[1].Simple Training Strategies and Model Scaling for Object Detection