Ubuntu22.04部署OpenPcDet:从环境适配到KITTI与nuScenes-mini数据集实战训练
2026/6/4 4:38:52 网站建设 项目流程

1. 环境准备:Ubuntu22.04的适配挑战

Ubuntu22.04作为长期支持版本,默认搭载的软件栈较新,这在带来性能提升的同时也埋了不少坑。我最近在RTX 3090显卡上部署OpenPcDet时就遇到了g++版本冲突、CUDA兼容性等问题。先说显卡驱动,虽然系统自带的驱动管理器能一键安装,但要注意两点:第一,通过nvidia-smi显示的CUDA Version只是驱动支持的最高版本,不代表已安装CUDA;第二,Ubuntu22.04默认的g++-11会导致后续编译失败。

降级g++的操作需要特别注意顺序:

sudo apt-get install gcc-7 g++-7 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 9 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 9

执行后务必用gcc --version确认当前版本。我在三台不同配置的机器上测试发现,如果漏掉优先级设置(最后的数字9),系统仍可能默认使用g++-11。

CUDA 11.3的安装包从NVIDIA官网下载经常断连,这里分享个实测可用的国内镜像:

wget http://mirrors.ustc.edu.cn/nvidia-cuda/ubuntu2204/x86_64/cuda-repo-ubuntu2204_11.3.0-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2204_11.3.0-1_amd64.deb

安装时务必取消勾选Driver选项!环境变量配置有个易错点:如果同时存在多个CUDA版本,建议在.bashrc里用绝对路径指定:

export PATH="/usr/local/cuda-11.3/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH"

2. OpenPcDet的依赖迷宫

创建conda环境时python版本选择很关键。虽然OpenPcDet官方支持3.6-3.8,但在Ubuntu22.04上实测3.8最稳定。有个隐蔽的坑是requirements.txt里的torch版本问题,直接安装会导致CUDA 11.3不兼容。我的解决方案是:

  1. 先删除requirements.txt里的torch相关行
  2. 用官方命令安装指定版本:
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113

spconv的安装堪称最大拦路虎。官方推荐的spconv-cu113在某些环境下会报THC/THC.h错误,这时需要手动编译:

git clone https://github.com/traveller59/spconv.git cd spconv && git checkout v2.1.21 python setup.py bdist_wheel

编译过程可能遇到ninja报错,在setup.py中找到BuildExtension,添加参数use_ninja=False即可。

可视化工具mayavi的安装也有讲究,正确的顺序应该是:

pip install vtk==9.0.1 pip install mayavi==4.7.3

新版本会导致渲染异常,这个组合在Ubuntu22.04上亲测可用。

3. KITTI数据集实战

数据集目录结构最容易出错。正确的组织方式应该是:

OpenPCDet ├── data │ ├── kitti │ │ ├── ImageSets │ │ ├── training │ │ │ ├── calib │ │ │ ├── velodyne │ │ │ ├── label_2 │ │ ├── testing │ │ │ ├── calib │ │ │ ├── velodyne

常见错误是漏掉ImageSets文件夹,或者velodyne数据未解压。数据处理阶段有个关键命令:

python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml

如果报numpy.bool错误,需要修改代码中的np.boolbool。训练时建议先用小批量测试:

python train.py --cfg_file ./cfgs/kitti_models/pointpillar.yaml --batch_size 2 --epochs 5

等确认能跑通后再加大batch_size。我在RTX 3090上实测pointpillar模型的合适batch_size是6。

可视化环节要注意demo.py的路径处理:

points = np.fromfile(bin_path, dtype=np.float32).reshape(-1,4) # KITTI用4

4. nuScenes-mini的差异化处理

nuScenes-mini虽然数据量小,但预处理流程更复杂。目录结构要注意版本后缀:

OpenPCDet ├── data │ ├── nuscenes │ │ ├── v1.0-mini │ │ │ ├── samples │ │ │ ├── sweeps │ │ │ ├── maps │ │ │ ├── v1.0-mini

数据处理命令与KITTI不同:

python -m pcdet.datasets.nuscenes.nuscenes_dataset --func create_nuscenes_infos \ --cfg_file tools/cfgs/dataset_configs/nuscenes_dataset.yaml \ --version v1.0-mini

这个过程可能耗时30分钟以上,建议用tmux后台运行。配置文件需要手动修改两处:

  1. VERSION: 'v1.0-trainval'改为v1.0-mini
  2. DATA_PATH要指向正确的绝对路径

训练时遇到的最大坑是显存溢出。即使使用mini数据集,batch_size也不宜超过2:

python train.py --cfg_file ./cfgs/nuscenes_models/cbgs_pp_multihead.yaml --batch_size 2

多卡训练需要特别注意分布式参数:

CUDA_VISIBLE_DEVICES=0,1 python -m torch.distributed.launch --nproc_per_node=2 train.py \ --cfg_file ./cfgs/nuscenes_models/cbgs_pp_multihead.yaml --launcher pytorch

5. 避坑指南与性能优化

环境变量冲突是常见问题。如果遇到libcudart.so找不到,可以尝试:

sudo ldconfig /usr/local/cuda-11.3/lib64

训练过程中的内存泄漏往往来自spconv,监控GPU内存使用很关键:

watch -n 1 nvidia-smi

对于KITTI数据集,数据增强策略很关键。在pointpillar.yaml中建议修改:

DATA_AUGMENTOR: DISABLE_AUG_LIST: ['placeholder'] AUG_CONFIG_LIST: - NAME: gt_sampling USE_ROAD_PLANE: True DB_INFO_PATH: - kitti_dbinfos_train.pkl PREPARE: { filter_by_min_points: ['Car:5', 'Pedestrian:5', 'Cyclist:5'], filter_by_difficulty: [-1], }

nuScenes的评估指标需要特别注意。在验证集上测试时,修改配置文件的TEST部分:

TEST: EVAL_METRICS: ['car_ap', 'pedestrian_ap', 'bicycle_ap'] MAP_POINTS_CLOUD_RANGE: [-50, -50, -5, 50, 50, 3]

最后提醒一个隐蔽的版本陷阱:PyTorch 1.12+会导致spconv的SparseModule报错,必须回退到1.11.0。如果已经误升级,可以尝试:

pip install --force-reinstall torch==1.11.0+cu113

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询