ref: https://zhuanlan.zhihu.com/p/80993033
流程:
使用PointRCNN的目标检测结果来跟踪;
使用卡尔曼滤波器跟踪;
使用匈牙利算法匹配前后帧的对象。
特点:
使用了3D的卡尔曼滤波器
优点:
简单快速效果好
使用的特征和状态转移模型?
10-dimensional vector T = (x, y, z, θ, l, w, h, vx, vy, vz) ,没有使用角速度,加入后效果不好;
状态转移方程是恒定速率模型
论文的结果表显示使用2D的卡尔曼效果也还挺好,MOTA 仅仅降低了一个百分点左右;
匈牙利匹配的cost matrix 是什么?
是跟踪器预测的3D box 和 检测的3D box的 3dIOU矩阵;
怎么创建跟踪器跟踪器的? 怎么销毁的?
至少3帧发现同一个物体,才会创建跟踪器(Fmin)
丢失物体的跟踪器,还会继续检测2帧(age)
为什么有一个把x,y,z,alpha,l,w,h 的顺序调换的步骤,后续又换回来了?
这里 pointRCNN 给出的结果顺序是反的,代码里面只是把它重新调整回来而已。
状态转移矩阵为什么要加3个1,恒速率模型怎么得到它的?
因为 下一时刻距离=上一时刻距离+速度,所以三个方向的速度要加1,但是实际上这里有个问题,每个时刻的间隔不一定是1秒,这样算会带来误差。
使用数据集
kitti MOT 数据集;
这么快的原因?
使用了numba 加速
Total Tracking took: 98.099 for 8008 frames or 81.6 FPS
没有使用 numba 加速
Total Tracking took: 145.496 for 8008 frames or 55.0 FPS
可以得出,不使用 numba 加速的话,速度降低了 32%;
匈牙利算法和NN、 GNN方法有什么区别?
没有很大的差别,都是用于求解指派问题的方法,NN是局部最优,GNN和匈牙利是全局最优;
可以做的改进:
1 把 KF 改为 UKF、EKF效果应该更好吧;
2 使用循环计算 3D IOU 应该是比较慢的,这里其实可以使用2D IOU,并且可以使用 cython 的计算过程来进一步加速。