BEV+Transformer

在自动驾驶系统中,BEV(Bird’s Eye View)+ Transformer 主要应用于 感知与环境建图(Perception & Scene Understanding) 环节,尤其是在 多传感器融合、目标检测、语义分割、轨迹预测 等任务中。

🚗 在自动驾驶中的关键应用场景

应用环节BEV+Transformer 的作用
感知(Perception)多摄像头图像融合成BEV视角,进行目标检测、语义分割
预测(Prediction)基于BEV表示预测其他交通参与者的未来轨迹
规划(Planning)利用BEV地图进行路径规划和决策
多传感器融合将图像、雷达、IMU等数据统一到BEV空间中,Transformer进行融合建模

🧠 BEV + Transformer 的核心作用

1. BEV(鸟瞰图)表示
  • 定义:将来自摄像头、激光雷达等传感器的数据转换为从上帝视角(俯视图)观察的空间表示。
  • 优势
    • 消除透视畸变,更适合空间理解。
    • 统一不同传感器的数据格式,便于融合。
    • 更容易进行路径规划和目标跟踪。
2. Transformer 架构
  • 定义:一种基于注意力机制的深度学习模型,擅长处理序列和空间关系。
  • 优势
    • 强大的全局建模能力,适合理解复杂场景中的空间关系。
    • 可扩展性强,适用于多模态输入(如图像+雷达+地图)。
    • 在处理稀疏数据(如点云)时表现优异。

✅ 为什么业界高度认可?

  1. 性能优越:如 Tesla 的 Occupancy Network、Waymo 的 Perception Stack、NVIDIA 的 BEVFormer 等都采用 BEV+Transformer 架构,在公开数据集上表现领先。
  2. 可扩展性强:适用于不同数量和类型的传感器,适配不同自动驾驶系统。
  3. 端到端能力:支持从原始传感器数据到高层语义理解的端到端训练。
  4. 统一表示:BEV提供了一个统一的空间表示,便于后续模块(如预测和规划)使用。

一些代表性的模型,比如:

  • BEVFormer
  • PETR / PETRv2
  • SurroundOcc
  • Tesla Occupancy Network

BEVFormer 是一款在自动驾驶感知领域广受关注的模型,首次发表于 ECCV 2022,核心思想是将多摄像头图像通过 时空 Transformer 融合为统一的 BEV(Bird’s Eye View)表示,以支持 3D 目标检测、语义分割等任务。

🧱 模型架构概览

BEVFormer 的整体架构由三个关键模块组成:

1. BEV Queries 构建

  • 将 BEV 空间划分为固定网格(如 200×200),每个网格位置初始化一个 learnable 的查询向量(query)。
  • 这些查询向量代表车辆周围空间的感知需求,是整个模型的核心表示。

2. 空间交叉注意力(Spatial Cross-Attention)

  • 将 BEV 查询点投影到各个摄像头图像平面,采样相关区域的图像特征。
  • 使用 可变形注意力机制(Deformable Attention),只关注与 BEV 查询相关的图像区域,显著降低计算量。

3. 时间自注意力(Temporal Self-Attention)

  • 利用历史帧的 BEV 表征,通过自注意力机制与当前帧对齐,增强时序建模能力。
  • 引入车辆自身运动补偿(ego-motion alignment)以对齐历史 BEV 特征。

🧪 训练方式与性能

  • 数据集:主要使用 nuScenes 数据集,包含 6 个摄像头、雷达、IMU 等多模态数据。
  • 训练资源需求
    • BEVFormer-Base 版本需约 28GB 显存,单卡训练需约 14 天,8 卡并行可缩短至 2 天。
  • 性能指标
    • 在 nuScenes 上达到 56.9% NDS(camera-only),超过当时所有纯视觉方法。
    • 在 Waymo Camera-Only Track 上也取得冠军成绩。
  • 开源地址:官方 GitHub 地址:BEVFormer GitHub

🏭 应用与产业落地

BEVFormer 及其变体已被广泛应用于学术研究和工业界:

  • 学术界:作为多个 BEV 感知任务的 baseline,被用于目标检测、语义分割、轨迹预测等任务。
  • 工业界
    • 特斯拉:其 Occupancy Network 也采用 BEV 表示 + Transformer 架构。
    • 小鹏、蔚来、百度 Apollo 等国内厂商也在研究 BEV 表征的感知系统。
    • 幻方 AI 等平台优化了 BEVFormer 的多卡训练效率,实现 3 小时内完成全精度训练

📌 总结亮点

特性描述
纯视觉输入不依赖激光雷达,仅用多摄像头图像实现高精度感知
时空融合同时建模空间和时间信息,提升遮挡场景下的鲁棒性
稀疏注意力机制显著降低计算复杂度,适合部署
开源生态完善提供完整代码、模型、文档,便于复现与扩展

🛠️ 如何在本地训练 BEVFormer

主要还是需要带显卡的机器,操作系统Linux的,以下是基于 Ubuntu + Conda 环境的完整训练流程:

📦 1. 克隆代码仓库
git clone https://github.com/fundamentalvision/BEVFormer.git
cd BEVFormer
🐍 2. 创建 Python 环境
conda create -n bev python=3.8 -y
conda activate bev
⚙️ 3. 安装依赖库
pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install -U openmim
pip install mmcv-full==1.4.0
pip install mmdet==2.14.0
pip install mmsegmentation==0.14.1
📁 4. 安装 MMDetection3D
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
git checkout v0.17.1
python setup.py install
📥 5. 下载 nuScenes 数据集(建议先用 mini 版)
  • 官网:https://www.nuscenes.org/download
🧱 6. 数据预处理
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini --canbus ./data
🧪 7. 启动训练(单卡示例)
./tools/dist_train.sh projects/configs/bevformer/bevformer_tiny.py 1
📊 8. 测试模型
./tools/dist_test.sh projects/configs/bevformer/bevformer_tiny.py ckpts/bevformer_tiny_epoch_24.pth 1

模型训练最主要的是吃显卡资源,以下是比较推荐的

  • 显存要求
    • bevformer_tiny:约 6.5GB
    • bevformer_base:约 28GB
  • 推荐使用
    • bevformer_small.py:适中性能与资源消耗
  • 训练时间
    • 单卡训练约需 2~3 天

训练个人数据

在自己的数据集上训练 BEVFormer(或 BEVFormer++)是完全可行的,但需要满足一定的数据格式和采集要求。

✅ 必需的数据类型:

数据类型描述
多摄像头图像通常为 6 个摄像头(前、后、左、右、左前、右前),每帧同步采集
相机内参(intrinsics)每个摄像头的焦距、主点等参数
相机外参(extrinsics)每个摄像头相对于车辆坐标系的位置和姿态
车辆位姿(ego pose)每帧车辆在世界坐标系中的位置和朝向(通常来自 GPS+IMU)
时间戳用于帧间对齐和时序建模

🆗 可选数据类型(增强性能):

  • 雷达或激光雷达数据(可用于辅助监督)
  • CAN bus 数据(车辆速度、加速度等)
  • 语义地图(如车道线、交通标志)

📁 二、数据格式要求(参考 nuScenes)

BEVFormer 使用的数据格式与 nuScenes 数据集类似,建议参考其结构:

data/
└── my_dataset/
    ├── samples/             # 原始图像(按摄像头分类)
    ├── sweeps/              # 历史帧图像(用于时序建模)
    ├── maps/                # 可选语义地图
    ├── annotations/         # 目标检测标注(如 3D box)
    ├── calib/               # 相机内外参
    ├── ego_pose.json        # 每帧车辆位姿
    └── timestamps.json      # 每帧时间戳

🔄 三、数据转换流程

为了让 BEVFormer 识别你的数据,需要将其转换为 MMDetection3D 支持的格式:

步骤如下:

  1. 采集数据:使用多摄像头同步采集系统(如 ROS + 多路摄像头),记录图像和传感器数据。
  2. 标注数据:使用工具如 LabelFusion、Scalabel 或 [SuperAnnotate] 进行 3D box 标注。
  3. 生成元数据:编写脚本生成 ego_pose.jsoncalib.json 等文件。
  4. 转换为标准格式:使用 BEVFormer 提供的 create_data.py 脚本或自定义转换脚本。

🧪 四、在本地训练自己的数据集

修改配置文件:

  • 复制 bevformer_tiny.py,修改以下字段:
    • dataset_type:改为你的数据类名
    • data_root:指向你的数据路径
    • class_names:改为你的目标类别
    • camera_names:改为你的摄像头名称列表

注册数据集:

  • 在 mmdetection3d/datasets 中添加你的数据类(继承 Custom3DDataset
  • 实现 load_annotations() 和 get_data_info() 方法

启动训练:

./tools/dist_train.sh configs/my_bevformer_config.py 1

📷 数据采集方式推荐

方式描述推荐工具
车载采集安装多摄像头系统,同步采集图像和 GPS/IMUROS + Realsense/Daheng/Blackfly
仿真采集使用仿真平台生成数据Carla、LGSVL、AirSim
手动采集单摄像头采集 + 后处理同步OpenCV + GPS Logger

如果其他模型也感兴趣,欢迎大家随时讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值