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
  1. 激活 CANN 环境(例如:source /usr/local/Ascend/ascend-toolkit/set_env.sh

  2. 准备模型源码及安装基础依赖

    在当前目录下,克隆并准备 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 ../
    
  3. 源码编译安装 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 ../
    
  4. 安装 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 ../
    
  5. 安装 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 ../
    
  6. 安装 Driving SDK 加速库

    安装方法参考原仓

准备数据集

  1. 根据原仓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 (经数据预处理后生成)
    
  2. 在模型源码根目录下进行数据预处理

    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依赖。