地平线机器人Waymo Open Dataset Challenge中2D目标检测赛道第二名方案解析-程序员宅基地

点击上方“AI算法修炼营”,选择“星标”公众号

精选作品,第一时间送达

这是地平线机器人在CVPR 2020 Waymo Open Dataset Challenge比赛中的在2D目标检测项目中的刷榜文章,里面有很多技巧可以参考学习,例如将单阶段目标检测和两阶段目标检测结果自动融合方法。

论文地址:https://arxiv.org/pdf/2006.15507.pdf

在自动驾驶系统中,通常需要对车辆和行人进行可靠、准确的检测。在本报告中,介绍了用于自动驾驶场景的最新2D目标检测系统。具体来说,首先,将流行的两阶段检测器和一阶段检测器以Anchor free的方式集成在一起,以产生可靠的检测结果。此外,训练了多个专家模型并设计了自动Ensemble方案的Greedy版本,该方案会自动合并来自不同模型的检测结果。值得注意的是,整体检测系统在Waymo开放数据集v1.2上达到了70.28 L2 mAP,在Waymo开放数据集挑战赛的2D检测赛道中排名第二。

简介

Waymo开放数据集挑战吸引了计算机视觉和自动驾驶领域的许多参与者。比赛中使用的Waymo Open Dataset提供了在真实自动驾驶场景中由多个LiDAR和摄像头传感器收集的高质量数据。在2D检测赛道中,在摄像机图像中采用2D边界框对车辆,行人和骑自行车者三类目标进行标注。在自动驾驶应用中准确而可靠地检测车辆、骑自行车的人和行人至关重要。为了实现这一目标,本文在这一挑战中开发了最先进的2D目标检测系统。

本文方法

1.  Base Detectors

为了充分利用不同的检测框架,本文采用了最先进的两阶段检测器Cascade R-CNN 和一阶段Anchor-free检测器CenterNet 。Cascade R-CNN采用级联结构对候选目标进行分类和框回归,这有利于精确定位目标实例。与Cascade R-CNN相比,CenterNet是Anchor-free的,将目标视为具有属性的点,可能更适合于检测小对象和拥挤场景中的目标。本文认为这两种不同的机制在检测上具有同等的多样性,因此结果可以互补,于是,分别使用这两个框架进行检测,然后将其融合为最终检测结果。

1.1 Cascade R-CNN

Cascade是一种经典的体系结构,被证明可以有效地完成各种任务。在目标检测中,Cascade R-CNN基于Faster R-CNN 建立了一个级联头,以逐步完善检测。由于候选框由多个box regression head优化,因此Cascade R-CNN擅长精确定位目标实例。在本文中,将Cascade R-CNN用作两阶段检测器。

在得到一个RoI后,Faster RCNN通过RoI与标签的IoU值来判断该RoI是正样本还是负样本,默认的IoU阈值为0.5,这个阈值是一个超参数,对于检测的精度有较大影响。如何选择合适的阈值是一个矛盾的问题。一方面,阈值越高,选出的RoI会更接近真实物体,检测器的定位会更加准确,但此时符合条件的RoI会变少,正、负样本会更加不均衡,容易导致训练过拟合;另一方面,阈值越低,正样本会更多,有利于模型训练,但这时误检也会增多,从而增大了分类的误差。

对于阈值的问题,通过实验可以发现两个现象:1、一个检测器如果采用某个阈值界定正负样本时,那么当输入Proposal的IoU在这个阈值附近时,检测效果要比基于其他阈值时好,也就是很难让一个在指定阈值界定正、负样本的检测模型对所有IoU的输入Proposal检测效果都最佳。2、经过回归之后的候选框与标签之间的IoU会有所提升。、

基于以上结果,2018年CVPR上的Cascade RCNN算法通过级联多个检测器来不断优化结果,每个检测器都基于不同的IoU阈值来界定正负样本,前一个检测器的输出作为后一个检测器的输入,并且检测器越靠后,IoU的阈值越高。

Cascade R-CNN的每一个检测器的边框输出作为下一个检测器的输入,并且检测器的IoU阈值是逐渐提升的,因此这种方法可以逐步过滤掉一些误检框,并且提升边框的定位精度。

1.2 CenterNet

CenterNet通过预测物体的中心点位置及对应物体的长与宽(检测中心点+边框回归)来检测目标对象。由于CenterNet不需要NMS作为后处理步骤,因此它可能更适合于拥挤的场景,因为如果阈值设置不当,NMS可能会错误地抑制正框。在本文的方案中,采用CenterNet作为一阶段检测器,其框架如图2所示。与原始的CenterNet相比,本方案使用了《Training-time-friendly network for real-time object detection》(https://arxiv.org/pdf/1909.00700.pdf)文中所提出的高斯核,充分考虑了CenterNet的长宽比,并且通过边界框对训练样本进行编码。

CenterNet的特点是:1、没有使用Anchor作为先验框,而是预测物体的中心点出现位置,因此也就不会存在先验框与标签的匹配,正、负样本的筛选过程。2、每个物体标签仅仅选择一个中心点作为正样本,具体实现是在关键点热图上提取局部的峰值点,因此也就不会存在NMS的过程。3、由于CenterNet专注在关键点的检测,因此其可以使用更大的特征图,而无须使用多个不同大小的特征图。在CenterNet的论文中其使用的网络下采样率为4

CenterNet尝试了串联Hourglass、ResNet等多种网络用来提取特征,生成了特征点的热图。实验结果表明,Hourglass的网络能够提供更精确的检测精度,而更轻量的ResNet的检测速度会更快。

另外,CenterNet网络中没有center pooling操作, 而是把CenterPoint当做关键点来处理, 中心处响应值最高, 让其上下左右四个位置低些, 其余位置为0。

为了提高中心点的定位精度, 同样也会在每个位置上预测两个offset。 box的宽高通过直接回归得到(h, w)。在将点回归到框的过程中, 会选择这个位置上的置信度比其他8个邻域位置置信度都要高的点。

CenterNet参考了CornerNet的思想,网络输出了以下3个预测值:

  • 关键点热图:这里的关键点热图与CornerNet类似,只是这里只预测一个中心点的位置。对于标签的处理,CenterNet将标签进行下采样,然后通过下式的高斯核函数分散到热图上

  • 中心点偏差:CenterNet对每个中心点增加了一个偏移的预测,并且所有类别共享同一个偏移预测值。

  • 宽与高的预测:CenterNet不需要预测Embeddings来处理配对,而是预测了物体的宽与高,这里的预测是原图像素坐标的尺度。

总体上,对于特征图上的一个点,CenterNet会预测C+4个值,其中包括C个类别的中心点得分中心点(x, y)的偏差以及该物体的宽高(w, h)

2、Greedy Auto Ensemble

设计了一个贪婪的自动融合方案,它会根据其检测精度自动合并多组检测结果,如图3所示。注意到一组检测代表了从唯一检测器框架或特定检测器生成的检测结果。借鉴了《1st Place Solutions for OpenImage2019 - Object Detection and Instance Segmentation》文章,将每组检测结果视为二叉树的节点迭代将每对子节点对合并到二叉树的每个层中的一个父节点,直到到达根节点为止,其中根节点用作最终检测结果。不同的是,本方案方法动态并贪心地确定了二叉树的层次关系,从而减少了很多搜索空间。

Adj-NMS


考虑到NMS和soft-NMS的不足,先利用0.5的IOU阈值做了一次NMS,将靠得比较近的候选框过滤掉了,然后再用基于高斯核的soft-NMS做二次过滤。

根据这个公式来看看,假设分类置信度阈值为0.5,候选框分类置信度为1,那么Soft-NMS阶段要想留下,IOU必须小于0.59,而第一次的NMS已经将IOU>0.5的候选框过滤掉了,所以这个理论上可行,但是特别密集拥挤的场景下可能不适用。

3、Expert Model 专家模型

WaymoOpen数据集中的数据分配高度不平衡。例如,在训练集中,车辆和行人类别数量分别有170M和6M,而骑自行车的数量中只有50M。结果,骑自行车的人在训练中可能会被行人或车辆样本所淹没,从而导致骑自行车的人表现不佳。为了解决这个问题,本方案分别针对骑自行车者,行人和车辆类别训练了多个专家模型。由于Waymo Open Dataset还提供了每个图像帧的上下文信息,例如一天中的时间(例如白天和晚上)。因此,本方案还分别仅使用白天和夜间训练图像来训练其他白天和夜间专家模型。

4、Anchor Selection

在Cascade R-CNN中,anchor是手动预定义的。默认情况下,长宽比设置为0.5、1和2。由于观察到某些形状非常细长的车辆,因此为车辆专家模型添加了两个固定长宽比的anchor,分别为0.25和0.75。CenterNet没有anchor选择问题。

5、Label Smoothing

如图4所示,在数据集中存在一些困难的示例标注不正确或缺失,这可能会导致训练出现问题。因此,本方案在训练过程中采用标签平滑处理此问题。

实验与结果

数据集:Waymo Open Dataset v1.2

评价指标:Level 2 Average Precision (AP) 、分别将车辆,骑自行车的人和行人的positive IoU阈值设置为0.7、0.5和0.5

实验细节

1、Cascade R-CNN Detector.对于级联R-CNN检测器,在mmdetection中采用HTC的实现,具有禁用的语义分割和实例分割分支,因为在此挑战中无法使用逐像素标注。使用具有可变形卷积的ResNeXt-101-64×4d作为主干网络。我们分别在微型火车上针对所有三个班级训练一个主要模型,针对车辆,行人和骑自行车的班级分别训练三个专家模型。还使用了多尺度训练,其中长尺寸被调整为1600像素,而短尺寸则是从[600,1000]像素中随机选择的,而不会更改原始宽高比。标签平滑和随机水平翻转也应用于训练中,所有模型的batch大小设置为8。

在推理过程中,将每个图像的长尺寸调整为2400像素,并保持其原始长宽比。除了仅使用水平翻转的车辆专家模型外,所有模型均使用0.8、1.0、1.2的3个比例因子的多尺度测试以及水平翻转。对于每个模型,首先使用具有类感知能力的soft-NMS过滤出重叠的盒子。为了合并由不同模型生成的检测结果,分别对行人和骑自行车的人类别使用Greedy Auto Ensemble,对车辆的类别使用Adj-NMS。

2、CenterNet Detector.对于CenterNet检测器,在训练期间将图像大小设置为768×1152像素,将学习速率设置为1.25e-4。为了节省计算资源,首先在微型训练集上使用COCO预训练权重训练CenterNet检测器,持续25个epoch,并将其用作基础模型。然后,基于以下基础模型微调3个专家模型:夜间专家模型,白天专家模型,pedestrian + cyclist专家模型。推断时,使用水平翻转和比例因子为0.5、0.75、1、1.25、1.5的多比例测试。综上所述,总共训练了8个CenterNet模型,并使用加权框融合(WBF:《 ensembling boxes for object detection models》)将它们的检测结果合并为一组检测结果

3、一阶段检测器和二阶段检测器各自产生一组独立的检测。为了将两组检测结果合并为最终结果,分别将Adj-NMS用于车辆和步行者类别,将WBF用于自行车者类别。

更多实验细节,可以参考原文。



扫描上方微信号,进入学习群。
目标检测、图像分割、自动驾驶、机器人、面试经验。
福利满满,名额已不多…

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_17456165/article/details/107075569

智能推荐

灰色预测原理及实例(附代码)_灰色模型预测实例-程序员宅基地

文章浏览阅读1.3w次,点赞52次,收藏312次。Matlab灰色预测GM(1,1)模型,实例讲解附例题及代码。_灰色模型预测实例

模拟alt+tab切换_如何“ Alt + Tab”在Mac上切换Windows-程序员宅基地

文章浏览阅读1.6k次。模拟alt+tab切换If you’re a Mac user familiar with quickly switching between apps on Windows using Alt+Tab, you might be delighted to learn that there is a built-in way to do something very similar on a Ma..._mac怎么设置alt+tab切换

使用windows命令行能做哪些趣事_windows终端指令能干什么-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏15次。使用windows命令行能做哪些趣事今天我们一起来盘点一下利用windows的命令行通过一行代码可以做哪些有趣的事吧!首先你要会启动命令行,首先通过win+R呼出运行工具,在运行工具中输入CMD就可以打开你的windows命令行工具了。通过windows自带的命令这种方式不需要你安装任何东西就可以运行命令ipconfigipconfig可以帮助你查询你本机的IP地址。..._windows终端指令能干什么

虚发下自己的心情-程序员宅基地

文章浏览阅读203次。自动变速器的挡位 一般来说,自动变速器的挡位分为P、R、N、D、2、1或L等。P(Parking):用作停车之用,它是利用机械装置去锁紧汽车的 转动部分,使汽车不能移动。当汽车需要在一固定位置上停留一段较长时间,或在停靠之后离开车辆前,应该拉好手制动及将拨杆推进“P”的位置上。要注意的是:车辆一定要在完全停止时才可使用P挡,要不然自动变速器的机械部分会受到损坏。另外,自动变速轿车上装置空挡_虚发

dbca.java:184_oracle em不能启动或者配置的解决方法-程序员宅基地

文章浏览阅读203次。很少使用oracle的em,最近突然想感受一下,发现原来配置的好好的em,突然无法启动了,重新配置也不行。报错内容如下:2011-03-16 13:50:28 Thread-69749664 ERROR ssl: nmehlenv_openWallet failed2011-03-16 13:50:28 Thread-69749664 ERROR http: 16: Error initializ..._./emctl status agent

【GIT工作记录二】sourceTree提交代码密钥验证失败(1),2024年最新面试Web前端-程序员宅基地

文章浏览阅读378次,点赞3次,收藏5次。面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!,但一群人才能走的更远。

随便推点

HTMLElement对象_htmlinputelement-程序员宅基地

文章浏览阅读1.2k次。HTMLElement对象任何HTML元素都继承于HTMLElement对象,一些元素直接实现这个接口,而另一些元素通过多层继承来实现它。属性从其父元素Element继承属性,并从DocumentAndElementEventHandlers、ElementCSSInlineStyle、GlobalEventHandlers、HTMLOrForeignElement和TouchEventHandlers实现这些属性。HTMLElement.accessKey: 获取/设置元素访问的快捷键。HTM_htmlinputelement

三国志战略版:S9血刃开荒实录二_开六升七_三国志战略版s9开荒-程序员宅基地

文章浏览阅读224次。一、前言血刃开荒故事会,第二集,开荒第二天。经过昨天一天的耕耘,血刃开荒已成为可行方案。比较尴尬的是,熬夜打五的代价就是直接睡到新手期结束才上线233。体力也浪费了不少,虽然说我开荒比较佛系,但这也太那个了吧,所以咱们先赶紧打几个5开6再说吧。二、开六级地打了几个五之后,周围的五级基本上已经被瓜分干净了,咱们直接8000兵试试最近的一个6级石头。咱们进度落后,体力浪费,先从屯田6级石头上面找补找补吧。第一场效果非常不错,马超输出爆表,不过遗憾的是打完之后,我们C位马超的血量只有110_三国志战略版s9开荒

FFmpeg从入门到精通读书笔记(1)-程序员宅基地

文章浏览阅读540次。笔者才开始学习音视频开发,FFmpeg从入门到精通读书笔记系列主要是基于阅读刘歧、赵文杰编著的《FFmpeg从入门到精通》以及雷霄骅博士博客总结写的入门心得体会。官方文档资料FFmpeg官方文档:https://ffmpeg.org/documentation.htmlFFmpeg官方wiki:http://trac.ffmpeg.org/wiki中文经典资料雷霄骅博士csdn链..._ffmpeg从入门到精通

易语言查找过滤相同重复文本源码_易语言 模块 文本去重复-程序员宅基地

文章浏览阅读4.3k次。我们在把一些文本加入数组或者数据库时,不想加入重复相同的文本,那么我们可以封装一个子程序来过滤一下文本。.版本 2.子程序 查找相同文本.参数 文本数组, 文本型, 数组.参数 输出文本, 文本型, 数组.局部变量 文本数量, 整数型.局部变量 加入文本数量, 整数型.局部变量 是否存在, 逻辑型.计次循环首 (取数组成员数 (文本数组), 文本数量) .计次循环首 (取数组成员数 (输出文本), 加入文本数量) .如果真 (输出文本 [加入文本数量] =.._易语言 模块 文本去重复

【文件包含漏洞-02】文件包含漏洞原理、简单测试实例以及空字符绕过实例_cve-2006-7243-程序员宅基地

文章浏览阅读2.7k次,点赞5次,收藏30次。概述:文件包含漏洞:即file inclusion,意思是文件包含,是指当服务器开启allow_url_include选项时,就可以通过PHP的某些特性函数(include(),require()和include_once(),requir_once())利用URL去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。定义:随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的_cve-2006-7243

python小程序代码_python的多线程实现代码(模拟银行服务操作流程)-程序员宅基地

文章浏览阅读87次。文章内容主要介绍了python模拟银行服务多线程实现代码,非常不错,具有一定的参考借鉴价值!!!1.模拟银行服务完成程序代码目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦。排队叫号软件的具体操作流程为:1.1 顾客取服务序号当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的..._下列程序是模拟银行短信提醒的程序,pythob