CenterPoint实战:从零搭建3D目标检测环境与避坑指南
1. 为什么选择CenterPoint做3D目标检测第一次接触3D目标检测时我被各种基于anchor的检测方法搞得头大。直到遇到CenterPoint才发现原来检测旋转物体可以这么优雅。传统的3D检测方法需要预设大量不同角度的anchor box就像在停车场里画满各种斜着的车位线不仅计算量大效果还不好。而CenterPoint的思路特别聪明——它先找到物体的中心点就像先确定车头的位置再慢慢把整个车的轮廓画出来。我在自动驾驶项目里实测过多种算法CenterPoint在nuScenes数据集上的表现让我印象深刻。相比其他二阶段检测器它的推理速度快了将近30%而且对小物体的检测精度提升明显。这主要得益于它的两阶段设计第一阶段用关键点检测找出物体中心第二阶段再细化边界框。这种设计避免了直接预测旋转角度带来的复杂度特别适合处理点云数据中方向各异的物体。2. 环境配置前的准备工作2.1 硬件与系统要求去年在给团队搭建测试环境时我深刻体会到硬件匹配的重要性。CenterPoint虽然对显卡要求不算苛刻但建议至少使用RTX 2060以上的显卡。我遇到过有人在GTX 1660上跑模型结果训练速度慢得像在看幻灯片。显存方面8GB是底线处理nuScenes这种大型数据集时12GB显存会更从容。操作系统强烈推荐Ubuntu 18.04或20.04这两个版本对NVIDIA驱动支持最友好。有次我在Ubuntu 22.04上折腾了整整两天都没搞定CUDA最后重装系统才解决。记得先通过nvidia-smi命令确认驱动版本建议安装470以上的驱动版本不然后面装CUDA时会有各种幺蛾子。2.2 软件依赖清单这是我在多个项目验证过的黄金组合Python 3.7千万别用3.9很多包还不兼容PyTorch 1.8.0 CUDA 11.1spconv 2.1.22APEX最新master分支cmake 3.18特别注意CUDA、PyTorch和spconv的版本三角恋关系。有次我手快装了CUDA 11.6结果发现spconv没有对应版本只能重头再来。建议先用nvcc --version确认CUDA版本再去找匹配的PyTorch。3. 基础环境搭建实战3.1 Conda环境配置创建环境时我习惯加个--no-default-packages参数避免包冲突conda create --name centerpoint python3.7 --no-default-packages conda activate centerpoint安装PyTorch时官网给的命令可能不适合你的CUDA版本。我整理了这个对照表CUDA版本推荐PyTorch版本安装命令10.21.8.0conda install pytorch1.8.0 torchvision0.9.0 cudatoolkit10.2 -c pytorch11.11.8.0cu111pip install torch1.8.0cu111 torchvision0.9.0cu111 -f https://download.pytorch.org/whl/torch_stable.html3.2 源码获取与依赖安装克隆代码库时建议加上--recursive参数不然可能漏掉子模块git clone --recursive https://github.com/tianweiy/CenterPoint.git cd CenterPoint安装requirements.txt前有个小技巧先把numpy版本锁定避免自动安装最新版导致冲突pip install numpy1.19.5 pip install -r requirements.txt4. 高阶组件安装指南4.1 spconv安装避坑指南spconv绝对是环境搭建的最大拦路虎。经过多次踩坑我总结出这些经验先安装系统依赖sudo apt-get install libboost-all-dev libgoogle-glog-dev如果CUDA是11.x版本试试这个神奇的组合pip install spconv-cu1132.1.22 --no-deps pip install cumm-cu113安装后验证是否成功import spconv print(spconv.__version__) # 应该输出2.1.224.2 APEX混合精度安装APEX的安装要注意两点一是确保gcc版本≥7.0二是禁用C扩展的版本检查git clone https://github.com/NVIDIA/apex cd apex pip install -v --disable-pip-version-check --no-cache-dir --global-option--cpp_ext --global-option--cuda_ext ./遇到RuntimeError: Cuda extensions are being compiled with a version of Cuda that does not match错误时修改apex/setup.py中的version_checkFalse即可。5. 环境验证与测试5.1 数据集准备技巧nuScenes数据集下载后建议用软链接放到data目录下节省空间mkdir -p data/nuscenes ln -s /path/to/v1.0-trainval data/nuscenes/v1.0-trainval处理数据时如果报错KeyError: cam_intrinsic试试这个修复# 在nuscenes-devkit/python-sdk/nuscenes/utils/data_classes.py中 # 找到LidarPointCloud类在__init__方法开头添加 if points.shape[0] 0: points np.zeros((3, 0))5.2 训练脚本调优官方训练脚本可能不适合所有显卡我修改的这些参数很实用train: batch_size: 4 # 8GB显存建议改为2 workers: 4 # 根据CPU核心数调整 optimizer: lr: 0.001 # 小batch_size时适当提高启动训练时建议先跑一个epoch验证环境python train.py --cfg_file ./configs/nuscenes_models/cbgs_pp_multihead.yaml --epochs 16. 常见报错解决方案6.1 CUDA版本冲突报错undefined symbol: _ZN6caffe26detail37_typeMetaDataInstance_preallocated_7E通常是因为PyTorch和CUDA版本不匹配。最快的解决方法是重建conda环境并严格按版本表安装。6.2 内存不足问题遇到RuntimeError: CUDA out of memory时除了减小batch_size还可以在代码中添加torch.backends.cudnn.benchmark True torch.backends.cudnn.enabled True6.3 点云数据加载异常如果出现ValueError: need at least one array to concatenate检查数据路径是否正确并确保nuscenes-devkit版本是v1.1.9以上。7. 性能优化技巧经过多次实验我发现这些调整能提升20%以上的训练速度在DataLoader中设置pin_memoryTrue使用AMP混合精度训练将部分预处理移到GPU上执行推理阶段可以启用TensorRT加速。我测试过RTX 3090上的推理速度从原来的45ms降到28ms效果非常明显。具体实现可以参考官方提供的trt_optimize.py脚本。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419405.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!