DiffusionDrive
目录
简介
模型介绍
DiffusionDrive是一种基于截断扩散策略的端到端自动驾驶模型,其核心通过锚定高斯分布重构多模态轨迹生成范式,显著提升了模型的推理效率与决策多样性。模型利用级联扩散解码器深度融合场景感知特征,仅需2步去噪即可生成物理合理的驾驶轨迹,在保证实时性的同时解决了传统扩散模型的计算瓶颈与模式重叠问题
支持任务列表
| 模型 | 任务列表 | 是否支持 |
|---|---|---|
| DiffusionDrive | 训练 | ✔️ |
代码实现
-
参考的官方实现:
url=https://github.com/hustvl/DiffusionDrive/tree/nusc commit_id=ae54fd87b32b3762f20e63ffd0af91d343cade85 -
适配昇腾AI处理器的实现
url=https://gitcode.com/Ascend/DrivingSDK.git code_path=model_examples/DiffusionDrive
准备训练环境
安装昇腾环境
请参考昇腾社区中《Pytorch框架训练环境准备》文档搭建昇腾环境,本仓已支持表1中软件版本。
表 1 昇腾软件版本支持表
| 软件类型 | 首次支持版本 |
|---|---|
| FrameworkPTAdapter | 7.1.0 |
| CANN | 8.2.RC1 |
安装模型环境
当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示, Python版本建议使用Python3.8。
表 2 版本支持表
| 三方库 | 支持版本 |
|---|---|
| PyTorch | 2.1.0 |
| mmcv | 1.x |
| mmdet | 2.28.2 |
(需按照安装以下安装顺序进行安装)
-
安装Driving SDK:请参考昇腾Driving SDK代码仓说明编译安装Driving SDK,在完成README安装步骤后,应当完成了以下包的安装:
- pyyaml
- setuptools
- CANN包
- torch_npu包
- Driving SDK根目录下requirements.txt里列出的依赖
- 源码编译并安装了的drivingsdk包
-
源码安装geos
git clone https://github.com/libgeos/geos.git cd geos mkdir build cd build cmake ../ make DRIVING_ENV_PATH=`pip3 show mx_driving | grep "Location" | awk -F "Location: " '{print $2}' | awk -F "python" '{print $1}'` cp lib/libgeos* ${DRIVING_ENV_PATH} cd ../../ -
克隆模型官方仓
# 仅以克隆至当前目录举例,实际路径选择无影响 git clone https://github.com/hustvl/DiffusionDrive cd DiffusionDrive git checkout ae54fd87b32b3762f20e63ffd0af91d343cade85 -
拷贝迁移昇腾的补丁至已克隆本地的官方仓内
cp -r ../migrate_to_ascend ./ -
安装模型依赖与迁移依赖:一并打包进了
migrate_to_ascend目录下的requirements.txtcd migrate_to_ascend pip install -r requirements.txt cd .. -
源码安装mmcv
git clone -b 1.x https://github.com/open-mmlab/mmcv.git cd mmcv MMCV_WITH_OPS=1 FORCE_NPU=1 python setup.py install cd ..
准备数据集与权重
Nuscenes数据集
用户自行获取nuscenes数据集,在源码目录创建软连接data/nuscenes指向存放数据的具体路径,nuscenes数据目录结构如下:
DiffusionDrive/
├── data/
│ └── nuscenes/ # 主数据集目录
│ ├── can_bus/ # 车辆总线信号数据
│ ├── lidarseg/ # 激光雷达点云语义分割
│ ├── maps/ # 高精地图
│ ├── samples/ # 关键帧传感器数据
│ ├── sweeps/ # 非关键帧连续数据
│ ├── v1.0-test/ # 测试集元数据
│ └── v1.0-trainval/ # 训练验证集元数据
mkdir -p ./data/nuscenes
创建软链接:
ln -s [path/to/nuscenes] ./data/nuscenes
例:
export DATA_PATH=[path/to/nuscenes]
ln -s $DATA_PATH/can_bus ./data/nuscenes/can_bus
ln -s $DATA_PATH/lidarseg ./data/nuscenes/lidarseg
ln -s $DATA_PATH/maps ./data/nuscenes/maps
ln -s $DATA_PATH/samples ./data/nuscenes/samples
ln -s $DATA_PATH/sweeps ./data/nuscenes/sweeps
ln -s $DATA_PATH/v1.0-test ./data/nuscenes/v1.0-test
ln -s $DATA_PATH/v1.0-trainval ./data/nuscenes/v1.0-trainval
数据集预处理
运行数据预处理脚本生成DiffusionDrive模型训练需要的pkl文件与初始锚框(预处理耗时约5h左右)
python ./migrate_to_ascend/preprocess.py
下载权重
mkdir ckpts
cd ./ckpts/
wget https://download.pytorch.org/models/resnet50-19c8e357.pth
wget https://github.com/swc-17/SparseDrive/releases/download/v1.0/sparsedrive_stage1.pth
cd ..
快速开始
训练模型
# 8卡长跑全量epoch,训练结束后打印模型精度
bash migrate_to_ascend/train_8p.sh
验证性能
# 仅跑1000个step后打印8卡训练性能(AvgStepTime、FPS)
bash migrate_to_ascend/train_8p.sh --performance
训练脚本支持的命令行参数
train_8p.sh
--performance:添加该参数,训练脚本仅验证模型性能;未添加时,正常长跑训练完整epochs数--num_npu: 可调整训练使用的npu卡数--batch_size: 可调整每张卡的batch size
训练结果
表 3 训练结果展示表
| 芯片 | 卡数 | global batch size | FPS | 平均step耗时(s) | L2 |
|---|---|---|---|---|---|
| 竞品A | 8p | 48 | 30.53 | 1.572 | 0.5897 |
| Atlas 800T A2 | 8p | 48 | 28.43 | 1.688 | 0.5971 |
版本说明
变更
2025.06.16:首次发布。
2025.07.29: 修复预处理脚本和训练脚本统计step time的bug,更新GPU基线数据,更新 Driving SDK 版本得到性能增益,刷新性能数据。
FAQ
暂无。