FBOCC [终止随版本演进]

目录

简介

模型介绍

FBOCC基于FB-BEV,是英伟达和南京大学提出的前沿占用预测模型。FB-BEV是一种基于摄像头的鸟瞰图感知算法,采用前向-后向投影技术。在此基础上,FBOCC针对3D占用预测任务提出了一些新颖设计和优化方法,包括深度语义联合预训练、联合体素-鸟瞰图表示、模型扩展以及有效的后处理策略等。FBOCC在nuScenes数据集上获得了最先进的性能,也因此成为CVPR2023端到端自动驾驶研讨会和视觉中心自动驾驶研讨会联合举办的3D占用预测挑战赛中获胜的解决方案。

支持任务列表

本仓已经支持以下模型任务类型

模型 任务列表 是否支持
FBOCC 训练

本仓已经支持以下模型

Backbone Method 训练方式
resnet50 FBOCC Mixed-precision Training

代码实现

  • 参考实现:

    url=https://github.com/NVlabs/FB-BEV
    commit_id=6e25469256d98e7fcb52cc43efe812dc2fd2b446
    
  • 适配昇腾 AI 处理器的实现:

    url=https://gitcode.com/Ascend/DrivingSDK.git
    code_path=model_examples/FBOCC
    

准备训练环境

安装昇腾环境

请参考昇腾社区中《Pytorch框架训练环境准备》文档搭建昇腾环境,本仓已支持表1中软件版本。

表 1 昇腾软件版本支持表

软件类型 首次支持版本
FrameworkPTAdapter 7.2.0
CANN 8.3.RC1

安装模型环境

当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。

表 2 版本支持表

三方库 支持版本
Python 3.8
PyTorch 2.1.0
  1. 激活 CANN 环境(例如:source /usr/local/Ascend/ascend-toolkit/set_env.sh

  2. 下载模型源码,并应用模型patch

    git clone https://github.com/NVlabs/FB-BEV
    cp fbocc.patch FB-BEV
    cp -rf ./test/ FB-BEV
    cp -rf ./tools/ FB-BEV
    cd FB-BEV
    git checkout  6e25469256d98e7fcb52cc43efe812dc2fd2b446
    git apply --reject --whitespace=fix fbocc.patch
    
  3. 安装Driving SDK加速库,具体方法参考原仓

  4. 安装mmcv

    在模型源码目录下,克隆mmcv仓,并进入mmcv目录安装

    git clone -b 1.x https://github.com/open-mmlab/mmcv
    cd mmcv
    pip install opencv-python-headless
    pip install -r requirements/runtime.txt
    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 ..
    
  5. 在模型源码目录下安装mmdet、torchvision等其他必要依赖

    pip install -r requirements_npu.txt
    
  6. 安装mmdet3d

    • 在模型源码目录下,克隆mmdet3d仓,并进入mmdetection3d目录,用原仓的mmdet3d代码进行替换
    git clone -b v1.0.0rc4 https://github.com/open-mmlab/mmdetection3d.git
    cd mmdetection3d
    rm -rf mmdet3d
    mv ../mmdet3d mmdet3d
    
    • 在mmdetection3d目录下,修改requirements/runtime.txt中第3行 numba==0.58.0

    • 安装包

    pip install -v -e .
    cd ..
    
  7. 根据操作系统,安装tcmalloc动态库。

    • OpenEuler系统

    在当前python环境和路径下执行以下命令,安装并使用tcmalloc动态库。

    mkdir gperftools
    cd gperftools
    wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.16/gperftools-2.16.tar.gz
    tar -zvxf gperftools-2.16.tar.gz
    cd gperftools-2.16
    ./configure --prefix=/usr/local/lib --with-tcmalloc-pagesize=64
    make
    make install
    echo '/usr/local/lib/lib/' >> /etc/ld.so.conf
    ldconfig
    export LD_LIBRARY_PATH=/usr/local/lib/lib/:$LD_LIBRARY_PATH
    export PATH=/usr/local/lib/bin:$PATH
    export LD_PRELOAD=/usr/local/lib/lib/libtcmalloc.so.4
    
    • Ubuntu系统

    在当前python环境和路径下执行以下命令,安装并使用tcmalloc动态库。在安装tcmalloc前,需确保环境中含有autoconf和libtool依包。 安装libunwind依赖:

    git clone https://github.com/libunwind/libunwind.git
    cd libunwind
    autoreconf -i
    ./configure --prefix=/usr/local
    make -j128
    make install
    

    安装tcmalloc动态库:

    wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.16/gperftools-2.16.tar.gz
    tar -xf gperftools-2.16.tar.gz && cd gperftools-2.16
    ./configure --prefix=/usr/local/lib --with-tcmalloc-pagesize=64
    make -j128
    make install
    export LD_PRELOAD="$LD_PRELOAD:/usr/local/lib/lib/libtcmalloc.so"
    

准备训练数据集

  • 根据原仓Prepare Dataset章节准备数据集,数据集目录及结构如下:
FB-BEV
├── ckpts/
│   ├──r50_256x705_depth_pretrain.pth
│   ├──resnet50-0676ba61.pth
├── data/
│   ├── nuscenes/
│   │   ├── gts/
│   │   ├── maps/
│   │   ├── samples/
│   │   ├── sweeps/
│   │   ├── lidarseg/
│   │   ├── panoptic/
│   │   ├── v1.0-test/
|   |   ├── v1.0-trainval/
|   |   ├── bevdetv2-nuscenes_infos_val.pkl
|   |   ├── bevdetv2-nuscenes_infos_train.pkl
├── deployment/
├── docs/
├── figs/
├── kernel_meta/
├── mmdetection3d/
├── occupancy_configs/
├── requirements/
├── tools/

说明:

  • 数据集主体为nuScenes V1.0 full数据集,对于体素预测任务,还需要下载额外的标注文件 https://github.com/Tsinghua-MARS-Lab/Occ3D

  • 模型的标注文件与BEVDET的不同,通过执行如下命令生成:

    python tools/create_data_bevdet.py
    

准备预训练权重

  • 在模型源码目录下,执行以下指令下载预训练权重:
mkdir ckpts
cd ckpts
wget https://github.com/zhiqi-li/storage/releases/download/v1.0/r50_256x705_depth_pretrain.pth
wget https://download.pytorch.org/models/resnet50-0676ba61.pth

快速开始

本任务主要提供单机的8卡训练脚本,在模型源码目录下,运行训练脚本。

  • 单机8卡精度训练(20 epochs)
bash test/train_8p_full.sh
  • 单机8卡性能训练(600 steps)
bash test/train_8p_performance.sh

训练结果展示

表 3 训练结果展示表

芯片 卡数 global batch size epoch mIoU 单步耗时(ms) FPS
竞品A 8p 32 20 39.80 952 33.61
Atlas 800T A2 8p 32 20 39.85 1538 20.80

表 4 结果字段说明

字段 说明
卡数 训练使用的昇腾芯片数量
global batch size 每次训练迭代处理的样本总数
epoch 训练的总轮次数
mIoU mean Intersection over Union, 训练结束时的平均交并比指标
单步耗时 模型完成单步迭代的平均耗时
FPS Frames Per Second,平均每秒处理的样本总数

版本说明

变更

2025.11.27:首次发布

FAQ

1.为提升分布式训练性能,当前版本默认配置中同步批归一化(SyncBN)设置为关闭状态('sync_bn = False')。在8卡训练环境下,该配置精度误差较小,但大规模训练场景下的精度影响尚待进一步验证,可能会导致精度劣化。

2.tcmalloc的动态库文件位置可能因环境配置会有所不同,找不到文件时可以进行搜索,一般安装在/usr/lib64或者/usr/local目录下:

find /usr -name libtcmalloc.so*

找到对应路径下的动态库文件,libtcmalloc.so或者libtcmalloc.so.版本号都可以使用。