搭建 CenterFusion 环境完整流程

如何搭建 CenterFusion 环境:国内用户指南

本文为国内用户提供了详细的 CenterFusion 项目环境搭建指南,针对 GitHub 访问缓慢、NuScenes DevKit 版本兼容问题及 CUDA 版本冲突等常见问题进行了详细的解决方案。指南包括使用国内镜像源加速 GitHub 下载,配置 Conda 虚拟环境,安装 PyTorch、CUDA、cuDNN 等依赖库,并解决可能遇到的 CUDA 版本冲突问题。同时,介绍了如何下载和配置 nuScenes 数据集,转换数据集格式为 COCO 格式,以及下载预训练模型并进行算法训练和测试。此外,文中还提供了优化显存利用的技巧和解决可视化报错的方案,确保用户能够顺利运行 CenterFusion 项目。

1. 国内源加速说明

对于国内用户,如果你在拉取 GitHub 仓库时遇到速度缓慢的问题,可以将 GitHub 链接中的 https://github.com 替换为 https://github.hscsec.cn。这样可以显著加快下载速度。

例如:

git clone https://github.hscsec.cn/mrnabati/CenterFusion.git

2. 配置 Conda 环境

2.1 创建新的 Conda 环境

首先,创建一个新的 Conda 环境,并指定使用 Python 3.7 版本:

conda create --name pytorch17 python=3.7

接着,激活虚拟环境:

source activate pytorch17
2.2 安装 CUDA

使用 Conda 安装 CUDA 11.0,可以选择使用国内清华的镜像源:

conda install cudatoolkit=11.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/
2.3 安装 cuDNN

安装 cuDNN 8.0,同样可以使用清华镜像:

conda install cudnn=8.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/
2.4 安装 PyTorch

通过 pip 安装指定版本的 PyTorch、Torchvision 和 Torchaudio:

pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
2.5 安装 COCO API

为处理 COCO 数据集,安装 cython 和 cocoapi,可以通过 GitHub 官方源下载安装:

pip install cython
pip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'

3. 配置 CenterFusion

3.1 克隆 CenterFusion 的 GitHub 仓库

从 GitHub 克隆 CenterFusion 项目:

cd ~
git clone https://github.com/mrnabati/CenterFusion.git

下载后的项目结构

3.2 安装依赖包

进入项目目录并安装所有所需依赖:

pip3 install scikit-learn==0.21.0 
pip3 install opencv-python==4.0.0.21  
pip3 install Cython==0.29.21  
pip3 install numba==0.49.1      
pip3 install progress==1.5
pip3 install matplotlib==3.3.3
pip3 install easydict==1.9
pip3 install scipy==1.5.4
pip3 install pyquaternion==0.9.9
pip3 install nuscenes-devkit==1.0.5 opencv-python==4.0.0.21 numpy==1.19.4
pip3 install pyyaml==5.3.1
pip3 install motmetrics==1.1.3
pip3 install tensorboardx==2.1
3.3 安装并编译 DCNv2

进入项目目录并下载并编译 DCNv2:

cd $CF_ROOT/src/lib/model/networks
rm -rf DCNv2
git clone https://github.com/lbin/DCNv2.git
cd DCNv2
./make.sh

如果遇到 unsupported gpu architecture 'compute_86' 错误,可以通过在 Conda 虚拟环境中限制显卡算力解决:

conda env config vars set TORCH_CUDA_ARCH_LIST="8.0"
conda deactivate
conda activate pytorch17
./make.sh
3.4 下载并配置 NuScenes DevKit

下载 NuScenes DevKit,记得切换到 1.0.5 版本以避免版本兼容问题:

cd ~/CenterFusion/src/tools
rm -rf nuscenes-devkit/
git clone https://github.com/nutonomy/nuscenes-devkit.git
cd nuscenes-devkit
git checkout 1.0.5

如果未切换到 1.0.5 版本,您可能会遇到如下错误:

Converting nuscenes format... 
Traceback (most recent call last): 
File "tools/nuscenes-devkit/python-sdk/nuscenes/eval/detection/evaluate.py", line 15, in <module> 
from nuscenes.eval.common.loaders import ( 
ImportError: cannot import name 'get_samples_of_custom_split' from 'nuscenes.eval.common.loaders' 

4. 处理 CUDA 版本冲突

4.1 检查 Conda 虚拟环境中的 CUDA 版本

有时系统中可能存在多个 CUDA 版本,导致运行时出现问题。使用以下命令检查虚拟环境中安装的 CUDA 版本:

conda list cudatoolkit

如果没有找到 CUDA 11.0,您可以重新安装:

conda install cudatoolkit=11.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/
4.2 手动设置环境变量

为了确保虚拟环境正确使用 CUDA 11.0 库,需要手动设置环境变量。请确保在此之前查询自己的 CUDA 库位置,确认路径无误后再进行以下操作。一般情况下,您可以通过以下命令查找虚拟环境中的 CUDA 位置:

find /home/ajifang/miniconda3/envs/pytorch17/lib/ | grep libcudart.so

找到 CUDA 位置后,手动设置以下环境变量:

export LD_LIBRARY_PATH=/home/ajifang/miniconda3/envs/pytorch17/lib:$LD_LIBRARY_PATH
export PATH=/home/ajifang/miniconda3/envs/pytorch17/bin:$PATH

执行这两个命令后,当前终端会话将使用 Conda 环境中的 CUDA 11.0。


5. 数据集准备

为了成功运行 CenterFusion,我们需要下载 nuScenes 数据集,并将其转换为 COCO 格式。以下是具体步骤。

5.1 下载数据集

首先,可以从以下两种方式下载 nuScenes 数据集:

注册完成并进入 nuScenes 网站下载页面后,下拉至 Full dataset (v1.0) 以下载完整数据集或其他可用的版本。
nuScenes官网

下载完成后,将文件解压至 CenterFusion/data/nuscenes 目录中。例如,Mini 数据集解压后将得到如下结构:

CenterFusion/
    ├── data/
    │   └── nuscenes/
    │       ├── samples/
    │       ├── sweeps/
    │       ├── v1.0-mini/
    │       └── maps/

在这里插入图片描述

5.2 转换数据集格式为 COCO 格式

在转换数据集格式之前,建议安装 ninja,它可以加速后续的可变形卷积库构建:

pip install ninja

接下来,需要将 nuScenes 数据集转换为 COCO 格式。进入项目的工具目录,并运行转换脚本:

cd CenterFusion/src/tools
python convert_nuScenes.py

数据集转换完成后,您将会在 data/nuscenes 目录下看到生成的 COCO 格式文件。

6. 下载预训练模型文件

为了使用预训练模型进行推理或进一步训练,您可以从以下两个途径下载预训练模型文件:

下载完成后,将模型文件移动至 CenterFusion/models 目录下。目录结构如下:

CenterFusion/
    ├── models/
    │   ├── centerfusion_e60.pth
    │   └── centernet_baseline_e170.pth

这样,您已经成功下载并配置好了预训练模型文件。


7. 算法测试与训练

在这一部分,我们将介绍如何在 CenterFusion 项目中进行算法训练和测试。并针对显存问题和单 GPU 的配置,提供解决方案和优化建议。

7.1 算法训练

在开始训练之前,需要根据硬件配置对 train.sh 脚本进行一些调整。下面是我的实际配置:显卡为 RTX 3090,24GB 显存。

默认情况下,train.sh 中的 batch_size 设置为 32,这对于大多数显卡来说显存需求过高,即使是 24GB 显存的 RTX 3090 也会导致超出最大显存,因此我们需要对其进行优化。经过测试,我将 batch_size 调整为 16,以充分利用显存而不超出限制。

此外,由于我的机器上只配置了一个 GPU,因此需要将 gpu 0,1 修改为 gpu 0,如果您有多个 GPU 则无需更改。

具体修改内容如下:

  1. 设置训练集:选择 train_split,可以选用 trainmini_train
  2. 设置验证集:选择 val_split,可选值为 valmini_val
  3. 显存限制调整:将 batch_size 从默认的 32 改为 16,确保不会超出显存限制。
  4. GPU 配置:将 gpus 参数设为 0(单 GPU),如果使用多 GPU 则保持默认设置。

以下是经过修改的 train.sh 示例代码:

export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=0

cd src

# train
python main.py \
    ddd \
    --exp_id centerfusion \
    --shuffle_train \
    --train_split mini_train \
    --val_split mini_val \
    --val_intervals 1 \
    --run_dataset_eval \
    --nuscenes_att \
    --velocity \
    --batch_size 16 \  # 调整 batch_size 以适应显存
    --lr 2.5e-4 \
    --num_epochs 60 \
    --lr_step 50 \
    --save_point 20,40,50 \
    --gpus 0 \  # 仅使用一个 GPU
    --not_rand_crop \
    --flip 0.5 \
    --shift 0.1 \
    --pointcloud \
    --radar_sweeps 3 \
    --pc_z_offset 0.0 \
    --pillar_dims 1.0,0.2,0.2 \
    --max_pc_dist 60.0 \
    --load_model ../models/centernet_baseline_e170.pth \
    # --freeze_backbone \
    # --resume \

cd ..

执行训练脚本:

cd ~/CenterFusion
bash experiments/train.sh
7.2 算法测试

测试部分同样需要调整参数。以下是我在测试中使用的 test.sh 配置文件,其中:

  1. 验证集选择:可以根据需要将 val_split 设置为 valmini_val
  2. 可视化:如果需要可视化测试结果,可以添加 --debug 4 参数。

在测试阶段,您还需要加载已经训练好的模型文件,并将其路径指定为 --load_model 的参数值。以下是修改后的 test.sh 示例代码:

export CUDA_VISIBLE_DEVICES=0

cd src

## Perform detection and evaluation
python test.py ddd \
    --exp_id centerfusion \
    --dataset nuscenes \
    --val_split mini_val \
    --run_dataset_eval \
    --num_workers 4 \
    --nuscenes_att \
    --velocity \
    --gpus 0 \
    --pointcloud \
    --radar_sweeps 3 \
    --max_pc_dist 60.0 \
    --pc_z_offset -0.0 \
    --load_model ../models/centerfusion_e60.pth \  # 加载训练好的模型
    --flip_test \
    --debug 4 \  # 可选:启用可视化
    # --resume \

运行测试脚本:

cd ~/CenterFusion
bash experiments/test.sh
7.3 可视化问题及解决方案

在测试时,如果启用了 --debug 4 参数进行可视化,可能会出现如下错误:

cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'line'

这是由于 OpenCV 绘图时的参数类型问题。解决方法是修改 debugger.py 文件:

  1. 打开 CenterFusion/src/lib/utils/debugger.py 文件。

  2. 修改第 424 行,将 rect 的参数强制转换为整型:

    cv2.line(bird_view, (int(rect[e[0]][0]), int(rect[e[0]][1])),
            (int(rect[e[1]][0]), int(rect[e[1]][1])), lc, t,
            lineType=cv2.LINE_AA)
    

完成修改后,再次运行测试脚本,即可生成可视化结果。

生成的可视化检测结果将保存在 CenterFusion/exp/ddd/centerfusion/debug 目录中,您可以查看以下视图:


小结

本文为国内用户详细介绍了如何在国内环境下搭建 CenterFusion 项目,解决了 GitHub 访问缓慢、NuScenes DevKit 版本兼容问题以及 CUDA 版本冲突等常见问题。通过使用国内源、配置 Conda 环境、安装依赖以及下载预训练模型,用户能够顺利搭建并测试 CenterFusion 算法。尤其针对显卡显存问题,我们提供了如何调整 batch_size 和 GPU 配置的建议。最后,还针对算法训练和测试中的常见问题(如可视化报错)提供了解决方案,帮助用户顺利完成整个项目的配置与运行。

整个过程包括以下关键步骤:

  1. 国内源加速:通过替换 GitHub 镜像源解决访问缓慢问题。
  2. 配置 Conda 环境:安装 Python 3.7、CUDA 11.0 和 cuDNN 8.0,并通过 pip 安装 PyTorch 和依赖库。
  3. 克隆并配置 CenterFusion 项目:克隆项目、安装依赖、编译 DCNv2,确保与 NuScenes DevKit 的版本兼容。
  4. 解决 CUDA 版本冲突:检查和设置虚拟环境中的 CUDA 版本,确保正确使用。
  5. 数据集准备与转换:下载 nuScenes 数据集并将其转换为 COCO 格式。
  6. 下载预训练模型:通过 Google Drive 或百度云盘下载预训练模型,并将其配置到项目中。
  7. 算法训练与测试:调整 batch_size 和 GPU 配置,优化显存利用,并提供测试阶段的参数配置和常见问题解决方案。

通过本文的指导,您将能够成功搭建并运行 CenterFusion 项目。如遇到问题,欢迎在评论区交流讨论。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值