Fast-BEV 纯视觉 BEV 重新训练与标注工具推荐
1. 项目目标
本文面向以下训练与部署方案:
- 重新训练 Fast-BEV;
- 模型输入为纯视觉图像;
- 当前主要使用前视相机;
- 使用连续多帧图像进行时序融合;
- 车辆安装单束线雷达;
- 单束线雷达不作为 Fast-BEV 主网络输入;
- 训练数据最终转换为 nuScenes 兼容格式;
- 模型部署阶段不依赖多线激光雷达。
推荐总体方案:
采集阶段: 相机 + 车辆位姿 + 可选临时多线 LiDAR + 单束线雷达 标注阶段: CVAT 2D 预标注 ↓ 3D-BAT 公制 3D 框修正 ↓ OpenLABEL 中间格式 ↓ nuScenes 数据格式 ↓ Fast-BEV train/val/test infos PKL 部署阶段: 纯视觉 Fast-BEV + 单束线雷达独立安全测距或后处理融合2. 纯视觉训练与纯视觉标注的区别
纯视觉 Fast-BEV 表示模型输入只有相机图像,但不代表训练真值只能由图像生成。
Fast-BEV 的训练目标通常是 BEV 空间中的三维目标,因此每个目标至少需要:
目标中心位置:x、y、z 目标尺寸:width、length、height 目标朝向:yaw 或四元数 目标类别:car、truck、pedestrian 等 实例编号:track_id 速度:vx、vy,可选 遮挡和截断属性仅标注图像中的二维矩形框,无法直接满足三维 BEV 检测训练要求。
推荐区分:
模型输入:纯视觉 训练真值:可使用 LiDAR、多视图、测量设备或人工 3D 标注辅助生成 部署传感器:只保留相机和单束线雷达这仍属于纯视觉 BEV 模型。
3. 标注工具推荐
3.1 3D-BAT
推荐程度:★★★★★
3D-BAT 适合作为 Fast-BEV 自定义数据集的主要三维标注工具。
可用于:
- 三维包围框标注;
- BEV 视图编辑;
- 前视图、侧视图、俯视图联合调整;
- 多相机图像查看;
- 三维框投影到图像;
- 视频序列标注;
- 目标轨迹管理;
- 时序插值;
- 自动标注结果人工修正;
- OpenLABEL 数据管理。
推荐负责:
目标 BEV 中心位置 目标长、宽、高 目标 yaw 目标类别 track_id 三维框投影复核 时序连续性检查针对当前没有多线点云的项目,建议增加:
- 相机内外参加载;
- 固定地面平面;
- BEV 公制网格;
- 车辆尺寸模板;
- 图像底边接地点;
- 单束雷达射线和测距点;
CAM_FRONT × N 帧联动;- OpenLABEL 和 nuScenes 导出。
3.2 CVAT
推荐程度:★★★★☆
CVAT 适合完成:
- 2D 检测框;
- 实例分割;
- 目标关键点;
- 图像底部接地点;
- 视频轨迹;
- track_id;
- 遮挡、截断和类别属性;
- 自动检测预标注;
- 人工质量审核。
推荐工作内容:
CVAT ├── 2D 紧致框 ├── 实例分割 Mask ├── 目标接地点 ├── 车辆关键点 ├── 类别 ├── 遮挡率 ├── 截断率 └── track_idCVAT 图像中的 Cuboid 不等于真实公制三维框,不能直接可靠产生:
x、y、z width、length、height yaw因此推荐:
CVAT:二维框、分割、关键点、轨迹 3D-BAT:公制三维框、BEV 位置、尺寸和朝向3.3 Scalabel
推荐程度:★★★★☆
适合:
- 二维检测;
- 视频轨迹;
- 多帧数据管理;
- 多相机同步帧组织;
- 自动预标注;
- 标注数据版本管理;
- 中间 JSON 数据格式。
没有多线点云时,它更适合作为二维时序标注和数据管理平台,而不是最终三维标注平台。
3.4 LabelImg3D
推荐程度:★★★☆☆
适合前视单目车辆三维框原型验证,例如:
- 单目三维框方法验证;
- 地面约束验证;
- 车辆尺寸先验验证;
- 小规模前视车辆数据标注。
局限:
- 多类别和多相机支持较弱;
- 时序管理能力有限;
- 团队协作能力有限;
- nuScenes 导出需要自行开发;
- 不适合大规模生产标注。
3.5 Supervisely
推荐程度:★★★★☆
适合:
- 团队任务分配;
- 标注审核;
- 三维包围框;
- 点云序列;
- 图像与三维框联合查看;
- 自动标注;
- 数据版本管理。
但其三维工作流通常仍以点云为主要参考。没有多线点云时,仍需增加地面约束、尺寸先验、多视图深度或离线三维重建结果。
4. 最推荐的工具组合
4.1 开源组合
CVAT ↓ 二维框、实例分割、关键点、接地点、track_id ↓ 几何算法生成初始三维框 ↓ 3D-BAT ↓ 人工修正 BEV 中心、尺寸、高度和 yaw ↓ OpenLABEL ↓ nuScenes 转换脚本 ↓ Fast-BEV 训练 PKL| 模块 | 推荐工具 | 主要任务 |
|---|---|---|
| 二维预标注 | CVAT | 2D 框、Mask、关键点、轨迹 |
| 三维标注 | 3D-BAT | BEV 位置、尺寸、yaw |
| 自动预标注 | YOLO、现有检测模型 | 生成二维候选框 |
| 中间格式 | OpenLABEL | 保存统一对象和传感器信息 |
| 训练格式 | nuScenes | 适配 Fast-BEV |
| 质量检查 | 自定义投影工具 | 三维框到图像投影 |
| 数据转换 | Python 脚本 | OpenLABEL 转 nuScenes 和 PKL |
4.2 数据质量优先组合
推荐在采集和标注阶段临时安装一台多线激光雷达:
相机 + 临时 16/32/64 线 LiDAR + 车辆定位或 SLAM + 单束线雷达工作流:
多线 LiDAR 生成点云 ↓ 自动 3D 检测生成候选框 ↓ 3D-BAT 人工修正 ↓ 三维真值框 ↓ 训练纯视觉 Fast-BEV训练完成后移除多线 LiDAR,最终模型仍为纯视觉 Fast-BEV。
5. 没有多线 LiDAR 时的三维标注方案
5.1 多相机方案
若有两个或多个严格标定且具有重叠视野的相机,可使用:
- 多视图匹配;
- 三角测量;
- 目标关键点匹配;
- 地面约束;
- 目标尺寸先验;
- 时序运动恢复;
- 束调整优化。
流程:
多相机二维目标 ↓ 跨相机目标关联 ↓ 特征点或关键点匹配 ↓ 三角测量 ↓ 地面和尺寸约束 ↓ 初始三维框 ↓ 3D-BAT 人工修正5.2 前视单目方案
只有一个前视相机时,建议在 CVAT 中标注:
2D 紧致框 目标底边接地点 车辆左右轮接地点 车辆朝向关键点 目标类别 遮挡率 截断率 track_id然后利用相机内参、相机到车辆外参、地面方程、目标尺寸先验和连续帧跟踪生成初始三维框。
接地点反投影
若图像接地点为(u, v),对应相机射线:
r_camera = K^-1 [u, v, 1]^T地面平面:
n^T p + d = 0射线:
p = o + λr交点参数:
λ = -(n^T o + d) / (n^T r)求得车辆坐标系中的地面位置后,再结合尺寸模板和朝向生成三维框。
单目方案限制
- 深度歧义;
- 目标真实尺寸不确定;
- 遮挡区域不可见;
- 远距离像素误差放大;
- 坡道路面误差;
- 相机 pitch 变化误差;
- 不同车辆尺寸差异;
- 截断目标中心不准确。
更适合车辆类别、较平坦路面、固定相机和中近距离目标。
6. 单束线雷达在标注中的作用
单束线雷达只能获得沿一条固定射线方向的距离。
单次测量:
p_radar = [d, 0, 0, 1]^T转换到车辆坐标系:
p_ego = T_radar_to_ego · p_radar单束线雷达不能生成:
- 稠密点云;
- 完整目标轮廓;
- 目标宽度和高度;
- 完整三维尺寸;
- 360° 环境点云。
可以用于:
- 校验前方目标距离;
- 修正被射线击中的目标纵向位置;
- 验证单目几何深度;
- 标记近距离障碍物;
- 检查时间同步;
- 提供弱监督距离;
- 发现明显错误的三维框。
与三维框关联
雷达测距点:
p_ego = o_radar + d · v_radar判断该点是否位于三维框内部,或判断雷达射线与哪个三维框最先相交。
推荐保存:
{"timestamp_us":123456789,"range_m":8.42,"status":1,"matched_track_id":"vehicle_0012","match_confidence":0.92}不要将单束距离复制成伪点云,也不要接入 Fast-BEV 的 LiDAR 分支。
7. 标注类别设计
初期建议减少类别数量,例如:
car truck bus pedestrian bicycle motorcycle construction_vehicle other_vehicle数据量较小时,可先合并为:
vehicle pedestrian two_wheeler原则:
- 每个类别应有足够样本;
- 尺寸和运动模式差异大的目标分开;
- 标注规范必须明确;
- 难以区分的类别不要过度细分;
- 训练、验证、测试使用同一类别表。
8. 三维标注字段
建议每个目标保存:
{"sample_token":"sample_000001","instance_token":"vehicle_0012","category":"car","translation_ego":[18.2,-1.4,0.8],"size":[1.85,4.60,1.55],"yaw":0.03,"velocity":[2.4,0.1],"visibility":0.8,"truncation":0.0,"occlusion":0.2,"bbox_2d":[610,350,790,510],"bottom_center_2d":[700,510],"track_id":"vehicle_0012","timestamp_us":123456789,"annotation_source":"manual_refined","quality_level":"A"}nuScenes 三维框尺寸顺序:
[width, length, height]旋转四元数顺序:
[qw, qx, qy, qz]9. 坐标系要求
建议车辆坐标系:
x:车辆前方 y:车辆左方 z:车辆上方OpenCV 相机坐标系通常为:
x:图像右方 y:图像下方 z:镜头前方标注工具和转换脚本必须明确:
camera → ego ego → global三维标注建议优先保存在 ego 坐标系中,再根据车辆位姿转换到 global:
p_global = T_ego_to_global · p_ego10. nuScenes 数据结构
重新训练时需要生成训练标注表,包括:
v1.0-custom/ ├── attribute.json ├── calibrated_sensor.json ├── category.json ├── ego_pose.json ├── instance.json ├── log.json ├── map.json ├── sample.json ├── sample_annotation.json ├── sample_data.json ├── scene.json ├── sensor.json └── visibility.json图像目录:
samples/CAM_FRONT/ sweeps/CAM_FRONT/Fast-BEV 训练侧应生成:
nuscenes_infos_custom_train_4d.pkl nuscenes_infos_custom_val_4d.pkl nuscenes_infos_custom_test_4d.pkl训练样本通常需要:
token timestamp cams lidar2ego ego2global prev next gt_boxes gt_names gt_velocity num_lidar_pts num_radar_pts valid_flag纯视觉训练配置:
input_modality=dict(use_lidar=False,use_camera=True,use_radar=False,)即使关闭 LiDAR 输入,gt_boxes仍必须是公制三维框。
11. 前视单相机训练范围
如果只使用CAM_FRONT,不建议继续使用 360° 检测范围。
示例:
point_cloud_range=[0.0,-20.0,-5.0,60.0,20.0,3.0]实际范围应根据:
- 相机水平视场角;
- 图像分辨率;
- 有效标注距离;
- 目标最小像素尺寸;
- 车道宽度;
- 道路类型;
- 前视相机安装角度;
- 目标类别。
有效标注区域建议满足:
- 目标中心位于前视视锥体内;
- 可见比例达到阈值;
- 距离小于最大可靠距离;
- 三维框投影与二维框一致;
- 严重截断和完全不可见目标被过滤。
12. 多帧时序标注要求
Fast-BEV 使用连续帧进行时序融合,因此需要:
- 精确时间戳;
- 每帧车辆位姿;
- 同一目标一致的 track_id;
- 连续帧类别一致;
- 三维框尺寸稳定;
- yaw 连续;
- 场景内实例不跳号。
自动检查项:
中心位置跳变 目标尺寸跳变 yaw 跳变 类别变化 track_id 变化 速度异常不要简单复制完全相同的三维框到连续帧。
13. 训练数据划分
不要按单帧随机划分,否则同一视频相邻帧会同时进入训练集和验证集,造成数据泄漏。
推荐按完整场景划分:
train:70% val:15% test:15%例如:
scene_001~scene_070 → train scene_071~scene_085 → val scene_086~scene_100 → test同一连续视频、同一路段连续采集和高度相似数据应放在同一个集合中。
14. 自动预标注方案
二维自动预标注
可使用:
- YOLO;
- RT-DETR;
- Grounding DINO;
- SAM/SAM2;
- 已训练道路目标检测模型。
输出二维框、Mask、类别、置信度和 track_id,再导入 CVAT 修正。
三维自动预标注
若临时安装多线 LiDAR,可使用:
- CenterPoint;
- PointPillars;
- PV-RCNN;
- BEVFusion;
- LiDAR 聚类和尺寸拟合。
输出初始三维框,再导入 3D-BAT 修正。
纯视觉三维模型输出只能作为候选框,不能未经人工审核直接作为最终真值。
15. 标注质量等级
A 级
三维框位置准确 尺寸完整 朝向准确 投影一致 时序一致 有 LiDAR 或多视图辅助B 级
位置基本准确 尺寸使用类别先验 投影基本一致 存在轻微遮挡C 级
严重遮挡 单目深度不稳定 尺寸大量依赖猜测 投影误差较大建议:
A 级:全部使用 B 级:可以使用 C 级:降低权重或过滤16. 标注质量检查
三维框投影检查
p_camera = T_ego_to_camera · p_ego p_image ~ K · p_camera检查:
- 投影是否包围目标;
- 框底部是否落在地面;
- 朝向是否正确;
- 是否镜像;
- 高度是否异常;
- 远距离框是否漂移。
BEV 检查
- 目标是否位于正确车道;
- 中心位置是否合理;
- 长宽方向是否正确;
- yaw 是否相反;
- 左右坐标是否镜像;
- 轨迹是否连续;
- 单束雷达射线是否穿过对应目标。
时序检查
可设置规则:
相邻帧尺寸变化超过 20% → 告警 yaw 突变超过阈值 → 告警 中心移动速度超过物理上限 → 告警 track_id 短时间重复 → 告警17. 推荐实施方案
17.1 最优方案
采集阶段临时安装多线 LiDAR ↓ 完成相机、LiDAR、车辆联合标定 ↓ CenterPoint 自动生成三维候选框 ↓ 3D-BAT 人工修正 ↓ CVAT 补充二维框、Mask、遮挡和轨迹 ↓ OpenLABEL ↓ nuScenes 格式 ↓ Fast-BEV 纯视觉重新训练 ↓ 部署时移除多线 LiDAR优点:
- 三维标注精度高;
- 人工成本低;
- 远距离目标位置可靠;
- 适合批量标注;
- 最终仍是纯视觉模型。
17.2 当前硬件条件方案
只有前视相机和单束线雷达时:
CVAT 标注二维框、接地点、关键点和轨迹 ↓ 地面约束生成目标初始位置 ↓ 类别尺寸先验生成三维框 ↓ 单束线雷达校验部分目标深度 ↓ 3D-BAT 人工修正 ↓ OpenLABEL ↓ nuScenes ↓ Fast-BEV 训练主要风险:
- 深度误差较大;
- 远距离标注不稳定;
- 高度和长度依赖先验;
- 坡道路面误差明显;
- 单束雷达只覆盖一条射线;
- 标注成本较高。
建议先制作小规模高质量数据验证训练效果,再扩大数据量。
18. 最终推荐
工具选择
二维标注:CVAT 三维标注:3D-BAT 中间格式:ASAM OpenLABEL 训练格式:nuScenes 二维预标注:YOLO / RT-DETR 三维预标注:CenterPoint,需要临时多线 LiDAR训练配置
模型:Fast-BEV 输入:纯视觉图像 时序:CAM_FRONT × 4 帧,或按实际相机数量扩展 LiDAR 输入:关闭 单束线雷达:不进入主网络 三维真值:ego/global 坐标系中的公制三维框工程首选
CVAT + 3D-BAT + OpenLABEL + nuScenes数据质量首选
临时多线 LiDAR 辅助标注 + 纯视觉 Fast-BEV 训练只有前视相机和单束线雷达时
二维框 + 接地点 + 关键点 + 地面约束 + 车辆尺寸先验 + 单束距离校验 + 3D-BAT 人工修正该方案可以实施,但标注精度和效率低于临时多线 LiDAR 辅助方案。