FlashOCC for PyTorch [终止随版本演进]
目录
简介
模型介绍
FlashOCC是一种高效且轻量化的占用预测框架,专为自动驾驶系统中的3D场景理解设计。与现有体素级别方法不同,FlashOCC在BEV(鸟瞰图)空间中保留特征,利用高效的2D卷积进行特征提取,并通过通道到高度的变换将BEV输出提升至3D空间。这一设计显著降低了内存和计算开销,同时保持了高精度。
支持任务列表
本仓已经支持以下模型任务类型
| 模型 | 任务列表 | 是否支持 |
|---|---|---|
| FlashOCC | 训练 | ✔ |
代码实现
-
参考实现:
url=https://github.com/Yzichen/FlashOCC commit_id=4084861d8d605bb01df55fcbc8072036055aa625
FlashOCC
准备训练环境
安装昇腾环境
请参考昇腾社区中《Pytorch框架训练环境准备》文档搭建昇腾环境,本仓已支持表1中软件版本。
表 1 昇腾软件版本支持表
| 软件类型 | 首次支持版本 |
|---|---|
| FrameworkPTAdapter | 7.0.RC1 |
| CANN | 8.1.RC1 |
安装模型环境
表 2 三方库版本支持表
| 三方库 | 支持版本 |
|---|---|
| PyTorch | 2.1.0 |
-
激活 CANN 环境(例如:
source /usr/local/Ascend/ascend-toolkit/set_env.sh) -
准备模型源码及安装基础依赖
在当前目录下,克隆并准备 FlashOCC 源码
git clone https://github.com/Yzichen/FlashOCC.git cp flashocc.patch FlashOCC cp -r test/ FlashOCC/ cd FlashOCC git checkout 4084861d8d605bb01df55fcbc8072036055aa625 git apply --reject --whitespace=fix flashocc.patch pip install -r requirements/runtime.txt cd ../ -
源码编译安装 mmcv
克隆 mmcv 仓,并进入 mmcv 目录编译安装
git clone -b 1.x https://github.com/open-mmlab/mmcv cp mmcv.patch mmcv cd mmcv git apply --reject mmcv.patch MMCV_WITH_OPS=1 MAX_JOBS=8 FORCE_NPU=1 python setup.py build_ext MMCV_WITH_OPS=1 FORCE_NPU=1 python setup.py develop cd ../ -
安装 mmdet
克隆 mmdet 仓,并进入 mmdet 目录编译安装
git clone -b v2.25.0 https://github.com/open-mmlab/mmdetection.git cp mmdet.patch mmdetection cd mmdetection git apply --reject mmdet.patch pip install -e . cd ../ -
安装 mmdet3d
克隆 mmdet3d 仓,并进入 mmdet3d 目录编译安装
cd FlashOCC git clone -b v1.0.0rc4 https://github.com/open-mmlab/mmdetection3d.git cp ../mmdet3d.patch mmdetection3d cd mmdetection3d git apply --reject mmdet3d.patch pip install -v -e . cd ../ -
安装 Driving SDK 加速库
安装方法参考原仓
准备数据集
-
根据原仓Environment Setup 在模型源码根目录下准备数据集,参考数据集结构如下:
└── Path_to_FlashOcc/ └── data └── nuscenes ├── v1.0-trainval ├── maps ├── panoptic ├── lidarseg ├── sweeps ├── samples ├── gts ├── bevdetv2-nuscenes_infos_train.pkl (经数据预处理后生成) └── bevdetv2-nuscenes_infos_val.pkl (经数据预处理后生成) -
在模型源码根目录下进行数据预处理
python tools/create_data_bevdet.py
准备预训练权重
在模型源码根目录下创建 ckpts 文件夹,将预训练权重 bevdet-r50-cbgs.pth 放入其中
ckpts/
├── bevdet-r50-cbgs.pth
快速开始
训练任务
本任务主要提供单机的8卡训练脚本。
开始训练
-
在模型源码根目录下,运行训练脚本。
运行脚本支持命令行参数:
- '--num-npu':NPU卡数,默认为8;
- '--batch-size': 每卡batch-size大小,默认为24;
- 单机8卡性能训练
bash test/train_8p_flashocc_r50_perf.sh (option) bash test/train_8p_flashocc_r50_perf.sh --num-npu 8 --batch-size 24 # 8卡性能- 单机8卡精度训练
bash test/train_8p_flashocc_r50_full.sh (option) bash test/train_8p_flashocc_r50_full.sh --num-npu 8 --batch-size 24 # 8卡精度- 单机8卡backbone FP16性能训练
bash test/train_8p_flashocc_r50_fp16_backbone_perf.sh (option) bash test/train_8p_flashocc_r50_fp16_backbone_perf.sh --num-npu 8 --batch-size 24- 单机8卡backbone FP16精度训练
bash test/train_8p_flashocc_r50_fp16_backbone_full.sh (option) bash test/train_8p_flashocc_r50_fp16_backbone_full.sh --num-npu 8 --batch-size 24
训练结果
| 芯片 | 卡数 | global batch size | Precision | epoch | mIoU | 性能-单步迭代耗时(s) | FPS |
|---|---|---|---|---|---|---|---|
| 竞品A | 8p | 192 | fp32 | 24 | 30.14 | 2.83 | 67.98 |
| Atlas 800T A2 | 8p | 192 | fp32 | 24 | 30.27 | 1.83 | 104.85 |
backbone FP16训练结果
| 芯片 | 卡数 | global batch size | Precision | epoch | mIoU | 性能-单步迭代耗时(s) | FPS |
|---|---|---|---|---|---|---|---|
| Atlas 800T A2 | 8p | 192 | backbone fp16 | 24 | 30.15 | 1.34 | 143.17 |
变更说明
2025.3.13:首次发布。
2025.4.28:性能优化。
2025.7.23:优化fps计算方式,添加backbone fp16混合精度训练。
2025.8.20:增大num worker,更新fp16性能。
2025.8.25:优化训练脚本,增加入参。
FAQ
训练时报错ImportError: cannot import name 'gcd' from 'fractions'
报错原因为networkx版本低,使用pip install networkx==3.1升级依赖版本即可。
训练时报错libGL.so.1文件不存在
使用opencv-python时,需配套安装相同版本的opencv-python-headless,使用opencv-contrib-python时,需配套安装相同版本的opencv-contrib-python-headless依赖。