【自动驾驶】《Sparse4Dv3》代码学习笔记
这里时间比较有限,优先看Sparse4Dv3方法里面相对以前改动的地方。
0.参考
代码v1/v2/v3:https://github.com/HorizonRobotics/Sparse4D
跑起来:https://github.com/HorizonRobotics/Sparse4D/blob/v3.0/docs/quick_start.md
1.方法
(1)时序实例去噪(3D)
代码解析:在head的InstanceBank模块中,两组kmeans提前初始化好的均匀分布锚点:nuscenes_kmeans900.npy,然后另外一组锚点,通过SparseBox3DKeyPointsGenerator模块进行forward噪声生成,然后通过二分图匹配(在哪?)。通过时间差,补偿锚点的中心点、尺寸、yaw、速度等。
(2)质量估计 (Quality Estimation)
代码解析:下面三张图,由配置文件,可以知道是用到了质量估计这个模块的。
代码解析:下面三张图,由配置文件,可以知道中心点的使用的交叉熵损失函数,而yaw角度的优化,使用的高斯focal loss损失函数进行优化。看起来跟论文中的是正好反过来的!!!
(3)解耦注意力 (Decoupled Attention)
将锚点独立的高维特征编码 (independently conduct high-dimensional feature encoding),随后将它们拼接 (concatenate) 起来。将与原始 Sparse4D 相比,这种方法带来了更低的计算量和参数开销 (lower computational and parameter overhead)。然后E 和 F 分别代表锚点嵌入 (anchor embedding) 和实例特征 (instance feature)也拼接起来。
代码解析:我们可以看到将a这个独立高维特征编码后进行add或者concatenate操作,其中是进行add还是cat操作通过self.mode这个参数进行配置的。head中anchor_encoder中type=“SparseBox3DEncoder”对应 mode=“cat”。
(4)扩展到追踪 (Extend to Tracking)
代码解析:Sparse4DHead中forward,通过调用instance_back.get返回instance_feature与anchor 作为R;
代码解析:Sparse4DHead中forward,通过调用instance_back.cache,将topk的instance_feature存在cache中;
代码解析:Sparse4DHead中forward,通过调用instance_back.get_instance_id,如果id为空或置信度>threshold,给赋新的id(self.pred_id基础上+i);
2.结果
v3增加了track的任务,帧率上降低并不多。mAP提升了2.5个点,对于IDS可能还需要做一些优化。