爱笑的小姐姐 · 2021年07月14日

详细解读 | Google与Waymo教你如何更好的训练目标检测模型!!!(附论文)

image.png

1简介

通过更好的模型架构、训练和推理方法的结合,目标检测系统的速度-精度Pareto曲线得到了改进。在本文中系统地评估了各种各样的技术,以理解现代检测系统的大多数改进来自哪里。

本文用RetinaNet和RCNN检测器在普通的ResNet-FPN backbone上对这些改进进行benchamrk测试。普通检测器的准确率提高了7.7%,速度提高了30%。

image.png

作者进一步提供了简单的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,RetineNetRSCascade 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和检测头)的特征维度一起进行缩放。
image.png

作者发现,在速度精度Pareto曲线的大多数阶段中,仅在输入分辨率和backbone深度上扩大模型是相当有效的,同时也非常简单。作者通过经验控制图像分辨率和backbone模型,然后进行如表1所示的网格搜索来确定Pareto曲线。

对于RetinaNet,将输入分辨率从512提高到768,ResNet backbone深度从50到152。把RetinaNet作为一阶段目标检测,作者发现大的缩放输入分辨率会带来大分辨率的特征图,因此更多的锚点处理。这将导致更高密度的预测Head和复杂的NMS计算。RetinaNet的输入分辨率为768×768。缩放方法如表2所示。作者将重新缩放的RetinaNet模型命名为RetinaNet-RS

image.png

对于RCNN模型,提高输入分辨率比单阶段检测器更有效。RCNN采用两阶段目标检测机制。

第一阶段是区域建议阶段通常是轻量级和类无关的,因此输入解析不会在第一个阶段造成太多的开销。

第二阶段总是处理从第一阶段产生的固定数量的预选框。作者设计了新的缩放方法,将输入分辨率从512扩展到1280,将ResNet backbone深度从50扩展到200。RCNN模型的缩放方法如表3所示,重新缩放的模型族称为RCNN-RS

image.png

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。

特征提取

image.png

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 速度与精度实验

image.png
image.png

4.2 输入分辨率的影响

image.png

4.3 后处理速度对比

image.png

4.4 SOTA实验

image.png

5参考

[1].Simple Training Strategies and Model Scaling for Object Detection

原文:集智书童
作者:ChaucerG

关注我不迷路,目前只是一些入门级的小文章,后面会有AI系列文章推送。

[[https://github.com/yazone/ai\\\_learning\\\_path\](https://github.com/yazone/ai\_learning\_path)](https://github.com/yazone/ai\_learning\_path](https://github.com/yazone/ai_learning_path))
更多嵌入式AI技术相关内容请关注嵌入式AI专栏。
推荐阅读
关注数
16328
内容数
1218
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息