UniAD 加入 Lidar 模态

简介: 解决2:检测和跟踪需要分开训练。uniad 原作者使用的是 bevformer 预训练的检测权重。因此,先要写一个检测代码,作单帧检测任务。然后将训练好的检测权重 load 到跟踪的代码中。

UniAD 加入 Lidar 模态
UniAD 加入 Lidar 模态相当于是在 BEVFormer 中加入 Lidar 模态。问题是如何加入?

读取历史帧数据
如何读取多帧图片数据?

使用的是 nuscenes_e2e_dataset - > prepare_train_data 方法,里面有个 for i in prev_indexs_list 循环。

处理点云数据
读取图片的时候,当前帧和历史帧都是 (6, c, h, w),读 4 帧历史帧,可以和当前帧拼接成 (5, 6, c, h, w)。最终会形成 (bs, 5, 6, c, h, w)

点云数据不同,每帧点云点的个数不相同,(32692, 5), (32867, 5), ... 那么无法将多个历史帧拼接起来。

方法1
统一每一帧为 32768 个点,若当前帧点数不够,则补点: (0, 0, 0, 0, 0)。在 train_pipeline 中执行。若当前帧点数太多,则随机删除一些点。

方法2
使用 mmdet3d 框架的 Pointsample 类,在 train_pipeline 中加入 dict(type='PointSample', num_points=32768)。

在 BEVFormer 中加入点云数据
使用 BEVFormer 加入激光
方法参考 github 代码相关 tag: v1.0, v2.0

使用 BEVFusion 方法
问题1:bevfusion 使用 bev_pool 算子,这个算子在 uniad 使用的 mmdet3d 代码中没有。

解决1:在 bevfusion 代码中,复制 bev_pool 这个算子(整个文件夹),到 mmdet3d 的 ops 中。再复制 setup.py 相关代码。重新编译 mmdet3d 即可。

问题2:训练 track 的时候 loss 很大。

解决2:检测和跟踪需要分开训练。uniad 原作者使用的是 bevformer 预训练的检测权重。因此,先要写一个检测代码,作单帧检测任务。然后将训练好的检测权重 load 到跟踪的代码中。

问题3:第 0 帧的 bbox_loss 很正常,是 0.4 左右,从第 1 帧开始的 bbox_loss 非常大,大约为 10。
image.png

解决3:第 i 帧的位置 = 第 i-1 帧的(位置+速度x时间)所得,即 pos[i]= pos[i-1] + v[i-1] * (t[i] - t[i-1])。然后与当前帧的检测结果进行滤波得到。但是 uniad 中有 bug,time_delta 并没使用微妙。因此,time_delta 除以 1e6,得以解决。
image.png

日期
2024/01/30:时间辍问题
2023/12/14:记录 BEVFusion 方法问题
2023/11/10:完成历史帧的读取和点云数据的预处理

相关文章
|
编解码 算法 数据可视化
源码解读 | 单目相机实现3D目标检测—CaDDN
源码解读 | 单目相机实现3D目标检测—CaDDN
694 0
|
传感器 并行计算 算法
多传感器感知原理解读 | BEVFusion解读(一)
多传感器感知原理解读 | BEVFusion解读(一)
1103 0
|
数据采集 机器学习/深度学习 编解码
MMdetection框架速成系列 第02部分:整体算法流程+模型搭建流程+detection训练与测试核心组件+训练部分与测试部分的核心算法
众所周知,目标检测算法比较复杂,细节比较多,难以复现,而我们推出的 MMDetection 开源框架则希望解决上述问题。目前 MMdetection 已经复现了大部分主流和前沿模型,例如 Faster R-CNN 系列、Mask R-CNN 系列、YOLO 系列和比较新的 DETR 等等,模型库非常丰富,star 接近 13k,在学术研究和工业落地中应用非常广泛。
2469 0
|
机器学习/深度学习 Web App开发 数据可视化
过节福利 | MMCV Hook 超全使用方法(下)
在训练过程中,通常有十个关键位点,如下图所示,从训练开始到结束,所有关键位点已用红色标出,共有 10 个。我们可以在这十个位点插入各种逻辑,例如加载模型权重、保存模型权重。而我们将同一类型的逻辑组织成一个 Hook。因此,MMCV 中 Hook 的作用就是训练和验证模型时,在不改变其他代码的前提下,灵活地在不同位点插入定制化的逻辑。
2428 0
过节福利 | MMCV Hook 超全使用方法(下)
|
机器学习/深度学习 PyTorch 算法框架/工具
【Transformer系列(5)】Transformer代码超详细解读(Pytorch)
【Transformer系列(5)】Transformer代码超详细解读(Pytorch)
2137 1
【Transformer系列(5)】Transformer代码超详细解读(Pytorch)
|
供应链 监控 数据可视化
精益生产是什么,如何将精益生产应用于项目管理?
本文介绍了精益生产的基本概念、历史发展及其在项目管理中的应用,强调了精益生产通过消除浪费、提高效率和质量来降低成本、增强企业竞争力的作用。文章还特别介绍了板栗看板作为精益生产工具在项目管理中的具体应用,包括项目进度管理、任务分配、问题跟踪及团队协作等方面,展示了其可视化、实时性和灵活性的特点。
精益生产是什么,如何将精益生产应用于项目管理?
|
消息中间件 Java Kafka
如何在Kafka分布式环境中保证消息的顺序消费?深入剖析Kafka机制,带你一探究竟!
【8月更文挑战第24天】Apache Kafka是一款专为实时数据管道和流处理设计的分布式平台,以其高效的消息发布与订阅功能著称。在分布式环境中确保消息按序消费颇具挑战。本文首先介绍了Kafka通过Topic分区实现消息排序的基本机制,随后详细阐述了几种保证消息顺序性的策略,包括使用单分区Topic、消费者组搭配单分区消费、幂等性生产者以及事务支持等技术手段。最后,通过一个Java示例演示了如何利用Kafka消费者确保消息按序消费的具体实现过程。
781 3
|
机器学习/深度学习 算法 计算机视觉
BEV新SOTA | Sparse4D v3用实例去噪+质量估计+解耦注意力全面提升BEV检测性能
BEV新SOTA | Sparse4D v3用实例去噪+质量估计+解耦注意力全面提升BEV检测性能
619 0
|
机器学习/深度学习 缓存 自然语言处理
PyTorch使用Tricks:梯度裁剪-防止梯度爆炸或梯度消失 !!
PyTorch使用Tricks:梯度裁剪-防止梯度爆炸或梯度消失 !!
1290 0
|
C++
C++ 重载操作符<<实现cout定位输出以及设置颜色:cout<<Goto(x,y)<<setC(color)<<123<<cr;
C++ 重载操作符<<实现cout定位输出以及设置颜色:cout<<Goto(x,y)<<setC(color)<<123<<cr;
439 0