• Anchor-Based:Anchor-Free你很会打吗?Waymo实时目标检测新SOTA!


    点击下方卡片,关注“自动驾驶之心”公众号

    ADAS巨卷干货,即可获取

    点击进入→自动驾驶之心技术交流群

    后台回复【ECCV2022】获取ECCV2022所有自动驾驶方向论文!

    论文链接:https://arxiv.org/pdf/2208.06062.pdf

    1摘要

    本文概述了自动驾驶场景中anchor-based检测器常用的模型改进和推理时间优化方法。在针对普通目标检测场景设计的高性能RCNN-RS和RetinaNet-RS检测框架的基础上,我们研究了一组框架改进,使检测器能够更好地检测密集场景中的小目标。然后,我们提出了一种模型缩放策略,通过缩放输入分辨率和模型大小来获得更好的速度-精度权衡曲线。我们在Waymo开放数据集(WOD)[24]的实时2D目标检测赛道上评估我们的模型family。在V100 GPU上70ms/帧的延迟限制下,最大的Cascade RCNN-RS模型获得了76.9%的AP/L1和70.1%的AP/L2,实现了WOD实时2D检测的新SOTA。我们最快的RetinaNet-RS模型在保持50.7% AP/L1的合理检测精度的同时,达到6.3 ms/帧和42.9% AP/L2。

    5a7e329a1344e8039c78153cf99bfcab.png

    2介绍

    自动驾驶场景中的目标框检测是计算机视觉领域中最受欢迎但也最具挑战性的任务之一。与普通的目标检测场景不同,自动驾驶场景通常专注于街道驾驶视角,其中感兴趣的目标尺寸较小,且类别较少。自动驾驶场景的典型目标包括汽车、行人、骑自行车的人、骑摩托车的人、街景标志等。

    从2015年开始,COCO[17]已经成为评估目标检测器性能的基准。因此,大多数流行的目标检测器[3-11 ,15 ,16 , 18 ,19 ,21 ,25]在模型的设计、训练技巧、后处理方法、推理时间优化、模型缩放策略等方面都为COCO量身定制。在本项工作中,我们的目标是优化自动驾驶中常用的目标检测器。我们采用RCNN-RS和RetinaNet-RS[7]框架作为我们的强基线,并且仔细研究自动驾驶场景中常用COCO检测设置在模型改进和推理时间优化中的有效性。接下来,我们发现了一个通过输入分辨率和backbone缩放来对模型进行调整的更好的策略,并提出了一个更好的速度-精度权衡的模型family。

    我们的模型family在Waymo开放数据集的实时2D检测赛道上进行评估。我们采用RCNN-RS模型作为最好精度的模型,采用RetinaNet-RS模型作为最快的速度的模型。在V100 GPU上的70帧/ms延迟约束下,我们的Cascade RCNN-RS模型实现了76.9%的AP/L1,运行速度为68.8帧/毫秒,在实时2D检测排行榜[1]上实现了新SOTA。为了进一步推动最高精度和最快速度,我们最大的Cascade RCNN-RS模型达到78.9%的AP/L1,运行速度为103.9 ms/帧,我们最小的RetinaNet-RS达到6.3 ms/帧,同时保持合理的AP/L1为50.7%。

    3方法

    改进RCNN-RS

    结构上的改进

    RCNN-RS方法使用现有的一些训练策略,提升了普通场景的目标检测效果,这些训练策略包括:随机缩放增强、随机深度正则化、更长的训练时间以及SiLU激活函数。

    为了提升其在自动驾驶场景的检测效果,我们做了以下改进。

    Cascaded head: 原生的Cascade RCNN-RS中采用两个级联、两个iou阈值(0.6、0.7)的head,得到了较好的精度,这里我们采用了三个级联head,前景IoU阈值越来越大,分别为{0.5,0.6,0.7}。

    轻量级头部:我们去除head和RPN中的所有卷积层,只保留最终的全连接层进行框回归和分类。轻量级的head设计显著提高了模型的速度,同时达到了与原始head设计相似的精度,该设计由4个卷积层和一个全连接层组成。

    L2-L6特征金字塔:多尺度特征金字塔上检测目标可以获得好的性能[15]。通常COCO检测设计选择是构建L3-L7特征金字塔[5,6,8,16,26]。为了更好的定位和识别小目标,我们增加了L2,去除了L7特征层。

    推理时间上的改进

    推理时间框架设计:我们给Cascade RCNN-RS检测器的第二阶段提供了512个proposals,而不是1000个,用于推理和训练。在ROI生成和最终检测生成过程中,NMS阈值由0.5提高到0.7,提升重叠目标的检测效果。

    改进:进一步采用NVIDIA TensorRT,使用float16精度优化模型推断速度。

    改进RetinaNet-RS

    主要也是更改了包括使用L2-L6层特征、更大的NMS阈值、TensorRT和float16精度推理。

    WOD上进行模型缩放

    我们通过缩放输入分辨率和缩放backbone尺寸来探索WOD上的模型缩放。在一定计算成本范围内选择性能最好的模型,形成较好的速度-精度权衡曲线。对于输入分辨率,我们将输入图像的高度从384逐渐增加到1536,宽度从640逐渐增加到2688。对于backbone,我们采用了5种不同规模的架构:ResNet-RS18×0.251包含5.3M参数的(RN18×0.25); SpineNet-49×0.25(SN49×0.25),包含5.6M参数;包含30.3M参数的SpineNet-49(SN49);包含37.6M参数的SpineNet-96(SN96);包含49.7M参数的SpineNet-143(SN143)。

    4实验

    我们在WOD训练集上使用同步BN、0.9动量的SGD、batch_size=256,20000次迭代,分别训练所有模型[14]。采用初始学习率为0.32的cosine学习率更新策略。前1000步采用线性学习率预热。为了获得更好的结果,我们遵循[7]的训练实践,在COCO[17]数据集上预训练我们的模型。

    从Faster RCNN-RS模型开始,再增加两个级联头,AP/L1提高+1.3%。将L2层特征加入多尺度特征金字塔,去掉L7层,AP/L1再上升1.2%。去除RPN头部和检测头部中的3×3卷积层使模型速度提高25%,同时精度变化不大。通过将第二阶段的proposals数量从1000减少到512,模型快了9%,将NMS阈值从0.5提高到0.7,进一步提高了AP/L1 +1.2%。最后,使用TensorRT优化模型,并将推理模型精度从float32更改为float16,可以显著降低推理时间(53%)。

    具体如下表所示:

    f7038162833d96a5204e430edfd2e4a5.png

    输入分辨率和backbone缩放,通过实验发现,在合理的输入分辨率范围内(高度从512到1280),使用更大的backbone比使用更小的backbone更有效。为了进一步推动更高的精度或更快的速度,在保持输入分辨率的同时缩放主干尺寸成为一个更有效的策略。

    48c70f1561afbc17eba55eaca493670f.png 01d8b8ffa6568155b2ed7cc7cc0d5e5a.png

    RCNN vs. RetinaNet,在实验中,同样推理时间条件下,Cascade RCNN-RS相比 RetinaNet-RS高了4.1%AP/L1,而RetinaNet-RS可以达到更快的速度(比如512输入的条件下,达到6.3ms/frame)。如下图所示:

    8fe07c47e00ecf5869a9c0f50e52d30f.png ca1e05ff6f7f42044df5fd9fd12a4cbb.png

    最终在实时2D目标检测排行榜,与其他模型进行的对比:

    fb2dd685dd6dd4c6892c051247ab6ae1.png

    5总结

    本项工作中,我们从架构优化和推理时间优化改进了自动驾驶场景的强两阶段RCNN-RS检测器。我们研究了缩放输入分辨率和模型大小对WOD实时2D检测任务的影响,并提出了一系列适用于不同延迟条件的模型。我们希望这项研究可以帮助研究工作者更好地设计自动驾驶目标检测器,并将优化转移到更多的检测框架和检测场景。

    6参考

    [1] Optimizing Anchor-based Detectors for Autonomous Driving Scenes

    自动驾驶之心】全栈技术交流群

    自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D感知、多传感器融合、SLAM、高精地图、规划控制、AI模型部署落地等方向;

    加入我们:自动驾驶之心技术交流群汇总!

    自动驾驶之心【知识星球】

    想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D感知、多传感器融合、目标跟踪)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!

    6295b067a03069e2f208d5c0ff33371b.jpeg

  • 相关阅读:
    python ==True和is True有什么区别?(python单例对象True、False、None)(is和==和is)
    php://input、php://output 区别及用法
    计算机毕设(附源码)JAVA-SSM基于的校园卡管理系统
    redis-操作数据库
    ROG玩家国度主板支持内存的部分型号牌子介绍
    推荐系统全流程落地实施方案
    微前端一:技术选型
    微博-指定话题当日数据爬取
    当前主流开发语言有哪些:了解其特性、应用与示例
    嵌入式开发:RTOS调试——处理计时问题
  • 原文地址:https://blog.csdn.net/CV_Autobot/article/details/126434482