如何搭建 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 官方网站 下载数据集,您需要先注册一个账号。
注册完成并进入 nuScenes 网站下载页面后,下拉至 Full dataset (v1.0) 以下载完整数据集或其他可用的版本。
下载完成后,将文件解压至 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. 下载预训练模型文件
为了使用预训练模型进行推理或进一步训练,您可以从以下两个途径下载预训练模型文件:
-
作者提供的 Google Drive 链接:
-
通过百度云盘下载:
下载完成后,将模型文件移动至 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 则无需更改。
具体修改内容如下:
- 设置训练集:选择
train_split
,可以选用train
或mini_train
。 - 设置验证集:选择
val_split
,可选值为val
或mini_val
。 - 显存限制调整:将
batch_size
从默认的 32 改为 16,确保不会超出显存限制。 - 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
配置文件,其中:
- 验证集选择:可以根据需要将
val_split
设置为val
或mini_val
。 - 可视化:如果需要可视化测试结果,可以添加
--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
文件:
-
打开
CenterFusion/src/lib/utils/debugger.py
文件。 -
修改第 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 配置的建议。最后,还针对算法训练和测试中的常见问题(如可视化报错)提供了解决方案,帮助用户顺利完成整个项目的配置与运行。
整个过程包括以下关键步骤:
- 国内源加速:通过替换 GitHub 镜像源解决访问缓慢问题。
- 配置 Conda 环境:安装 Python 3.7、CUDA 11.0 和 cuDNN 8.0,并通过 pip 安装 PyTorch 和依赖库。
- 克隆并配置 CenterFusion 项目:克隆项目、安装依赖、编译 DCNv2,确保与 NuScenes DevKit 的版本兼容。
- 解决 CUDA 版本冲突:检查和设置虚拟环境中的 CUDA 版本,确保正确使用。
- 数据集准备与转换:下载 nuScenes 数据集并将其转换为 COCO 格式。
- 下载预训练模型:通过 Google Drive 或百度云盘下载预训练模型,并将其配置到项目中。
- 算法训练与测试:调整
batch_size
和 GPU 配置,优化显存利用,并提供测试阶段的参数配置和常见问题解决方案。
通过本文的指导,您将能够成功搭建并运行 CenterFusion 项目。如遇到问题,欢迎在评论区交流讨论。