多目标跟踪的作用是获取目标在整个图像/LiDAR序列上的完整轨迹和状态,这两年在SLAM、导航、规划任务上应用很多。多目标跟踪的基本框架就是预测+关联,很多MOT使用学习方法进行预测,但是计算量很大。实时方法一般使用卡尔曼滤波进行状态更新,但会受限于选择的是匀速模型还是匀加速模型。
笔者最近阅读了IROS 2023的开源方案Poly-MOT,来源于哈工大机器人国重实验室。这个方案也是基于EKF进行更新,但是为不同目标建立了不同的物理模型,实现了nuScenues上的跟踪SOTA效果。因为没有使用学习方案,也就不需要GPU,降低了硬件要求。
今天笔者将为大家分享这项工作,当然笔者水平有限,如果有理解不当的地方欢迎大家一起讨论~
1、效果展示
Poly-MOT跟踪效果的直接对比,也体现了文章的核心思想,就是为不同类别建立不同的运动模型。汽车使用他们设计的CTRA模型,摩托车使用他们设计的Bicycle模型,CA表示匀速模型。可以发现引入专用模型后的跟踪轨迹明显变好了。
Poly-MOT和CBMOT的跟踪性能对比,Poly-MOT对于小目标和密集目标的跟踪鲁棒性更高。CBMOT是2021 IROS提出的相机-雷达融合方案,同时使用了CenterPoint和CenterTrack两个检测器。
代码已经开源了,感兴趣的小伙伴可以实际运行一下。
2、导读
三维多目标跟踪(MOT)通过提供周围物体的运动轨迹,使移动机器人能够完成明智的运动规划和导航任务。然而,现有的3D MOT方法通常采用单个相似性度量和物理模型来对所有对象执行数据关联和状态估计。在大规模现代数据集和真实场景中,有各种各样的对象类别,它们通常表现出独特的几何属性和运动模式。这样,这种区分将使各种物体类别在同一标准下表现不同,导致轨迹和探测之间的错误匹配,并危及下游任务(导航等)的可靠性。为此,我们提出了Poly-MOT,一种基于检测跟踪框架的高效3D MOT方法,使跟踪器能够为每个对象类别选择最合适的跟踪标准。具体来说,Poly-MOT利用各种对象类别的不同运动模型来准确描述不同类型的运动。我们还将物体刚性结构的约束引入到具体的运动模型中,以准确描述物体的高度非线性运动。此外,我们引入了一个两阶段的数据关联策略,以确保对象可以从三个自定义度量中找到其类别的最佳相似性度量,并减少丢失的匹配。在nuScenes数据集上,我们提出的方法达到了75.4% AMOTA的最高性能。
3、算法解析
重新梳理一下问题:
给定每帧LiDAR的3D目标检测结果,跟踪多个目标在整个序列上的轨迹和状态。
现有方法是怎么做的?
现有框架基本就是预测+关联,基于匀速或者匀加速模型,使用卡尔曼滤波预测当前帧目标在下一帧的位置和状态,然后和下一帧目标检测结果计算IoU,如果超过阈值则认为匹配成功,重复这个过程实现整个序列的关联。
这么做有什么问题?
现有方法是对所有目标类别都建立相同的预测和关联模型,但显然不同目标的运动规律是不一样的,通用模型肯定会降低精度。
如何解决?
Poly-MOT将不同目标分为CTRA和Bicycle两类,依据物理规律建立两个不同的预测模型,并建立多个度量函数来进行重复性数据关联。
具体原理是啥?
Poly-MOT的pipeline包括四个部分:预处理模块、多类别轨迹运动模块、多类别数据关联模块和轨迹管理模块。
(1)、预处理
这部分主要是做目标检测的NMS,为了降低计算量在NMS之前还加了一步分数阈值处理(SF),直接过滤掉低置信度的检测结果。后面也证明了SF不仅可以提高速度,也可以提高精度。感觉如果能用GPU来算NMS会再快一些。
Poly-MOT主要在nuScenes上跑,因此得到的3D目标检测结果是[x, y, z, w, l, h, θ, vx, vy],xyz表示box中心坐标,wlh表示box的宽长高,θ是航向角,vx和vy是物体速度,注意有些数据集是没有速度真值的。
(2)、多类别轨迹运动建模
这部分是文章的主要创新点,放弃了恒速或恒加速模型,将目标分为CTRA和Bicycle 两类模型,并引入刚体结构约束来建模目标的非线性。
CTRA(汽车和人):角速度ω和加速度a视为常量,航向角θ、速度v和加速度a的方向共线。CTRA类的目标状态为10维向量[x, y, z, v, a, θ, ω, w, l, h]。
Bicycle(摩托车、自行车等类似物体):速度方向和航向角可变,转向角和速度不变。Bicycle类的目标状态也是10维向量[x′, y′, z, v, a, θ, δ, w, l, h],x′和y′表示重心坐标,δ为转向角。注意两类模型都假设加速度a、坐标z和box尺寸wlh不变。
目标状态更新使用的是扩展卡尔曼滤波:
其中T表示目标状态,P表示协方差矩阵,F表示雅可比矩阵,Q表示噪声,f表示状态转移方程。x和y的转移方程为:
其中η表示速度和x轴的夹角,其转移方程为:
β表示速度和航向夹角,其转移方程为:
其中γ表示物体轴距和车体长度的比值,lr表示物体重心到后轮的距离,β也是CTRA和Bicycle的最主要区别,物理意义是自行车模型的瞬心不在物体主体上。
速度、航向角、角速度的转移方程依次为:
这也就是完整的状态更新模型。
(3)、多类别数据关联
Poly-MOT数据关联部分的核心思想是,为不同类别设计不同的度量来降低假阳性匹配,并设计两阶段关联减少假阴性匹配。两阶段关联维护了两个大的代价矩阵,主要是为了使用不同的度量来进行重复关联。
B表示预测或者检测的状态,第一级关联包括并集上的3d广义IoU、并集上的BEV广义IoU以及欧氏距离:
第二级关联是给所有类别的目标再计算一次BEV的gIoU。进行两阶段匹配之后,获得的是匹配对、当前检测中的未关联目标、当前预测中的未关联目标。
(4)、轨迹管理
这部分包括轨迹更新、轨迹初始化、轨迹删除和输出文件,轨迹更新就是对匹配对应用EKF更新状态,轨迹初始化就是连续跟踪帧数超过阈值就认为是活跃轨迹,同理轨迹删除。
4、实验结果
实验是在nuScenes数据集进行,主要使用AMOTA来评估。Poly-MOT运行设备是Intel 9940X,没有使用深度学习也就不需要GPU。运行速度是3 FPS,看起来不快,如果能设计CUDA加速在GPU上应该会跑的很快,而且已经超过了同类方案SimpleTrack(0.51 FPS)、Minkowski Tracker(1.7 FPS)。
在nuScenes测试集上的定量对比结果,截止今天,还是以75.4%的性能实现了nuScenes多目标跟踪的第一!注意Poly-MOT只使用了LiDAR数据,而第二的CAMO-MOT是多模态的MOT方案。
在nuScenes测试集上的定量对比结果,同样实现SOTA。
Pipeline各部分的消融实验,Os是原始状态,Pre是预处理模块,Mo是轨迹运动模块,Ass是数据关联模块。特别注意Os和Os+Pre之间的差距,说明预处理模块很重要。
预处理模块中阈值处理和NMS的消融实验,验证预处理模块不仅可以提高精度,还可以提高运行速度,因为低置信度的box都被滤掉了。
最后一个消融实验,验证对于不同目标,建模合适的运动规律可以很大程度提高跟踪性能。不知道为啥两个测试对象都是Bicycle类。
5、总结
今天笔者为大家分享了Poly-MOT跟踪方案,不需要GPU就可以实现SOTA精度,文章写得很好,各种实验做得也很全。更有意义的是提出了一种新的设计思想,而不是单纯的堆砌模块。感兴趣的小伙伴可以运行一下代码~
全部0条评论
快来发表一下你的评论吧 !