CenterNet实战:从零搭建到模型测试的完整环境配置指南
1. 环境准备从零搭建CenterNet开发环境第一次接触CenterNet时最头疼的就是环境配置。记得我当初在Ubuntu 18.04上折腾了整整两天现在把踩过的坑和经验都总结给你。首先明确几个关键组件Python 3.6官方推荐3.6PyTorch 1.4注意CUDA版本匹配CUDA 10.1实测兼容性最佳DCNv2编译支持1.1 创建Python虚拟环境强烈建议使用conda管理环境避免包冲突。执行以下命令创建名为CenterNet的独立环境conda create --name CenterNet python3.6 -y conda activate CenterNet如果没安装conda可以用pyenvvirtualenv组合pyenv install 3.6.15 python -m venv ~/venv/CenterNet source ~/venv/CenterNet/bin/activate1.2 安装PyTorch和CUDA工具包根据显卡驱动版本选择CUDA版本。使用nvidia-smi查看驱动版本然后到 NVIDIA官网 查兼容性。对于RTX 2080 Ti驱动版本450推荐组合conda install pytorch1.4.0 torchvision0.5.0 cudatoolkit10.1 -c pytorch验证安装是否成功import torch print(torch.__version__) # 应输出1.4.0 print(torch.cuda.is_available()) # 应输出True2. 关键组件编译DCNv2与NMS2.1 编译DCNv2的曲折经历官方源码中的DCNv2不支持PyTorch 1.0需要替换为改进版。按步骤操作删除原DCNv2目录rm -rf src/lib/models/networks/DCNv2克隆新版DCNv2git clone https://github.com/CharlesShang/DCNv2.git src/lib/models/networks/DCNv2修改编译配置关键步骤 打开src/lib/models/networks/DCNv2/src/cuda/dcn_v2_cuda.cu在头部添加#define THC_API_PER_THREAD_ALLOCATION执行编译cd src/lib/models/networks/DCNv2 ./make.sh常见错误解决方案error: identifier THCudaMalloc is undefined添加上述宏定义nvcc not found检查CUDA路径是否加入PATH2.2 NMS编译的隐藏技巧进入external目录修改编译选项cd src/lib/external编辑setup.py找到约第10行取消注释extra_compile_args[-Wno-cpp, -Wno-unused-function]然后执行编译python setup.py build_ext --inplace3. 模型测试从静态图像到实时摄像头3.1 预训练模型选择官方提供多个预训练模型新手推荐ctdet_coco_dla_2x平衡精度与速度AP 37.4%/52FPSctdet_pascal_resdcn18轻量级模型AP 72.6%/7ms下载模型到指定目录mkdir -p models wget https://cloud.tsinghua.edu.cn/f/5c0b8f1a1e3445089d3c/?dl1 -O models/ctdet_coco_dla_2x.pth3.2 图像测试实战测试单张图像示例图片在images目录python demo.py ctdet --demo ../images/16004479832_a748d55f21_k.jpg --load_model ../models/ctdet_coco_dla_2x.pth你会看到终端输出检测结果并在demo_results/目录生成带标注的图像。如果遇到KeyError: dla34需要修改pose_dla_dcn.py# 注释掉pretrained加载部分 def dla34(pretrainedFalse, **kwargs): model DLA([1,1,1,2,2,1], [16,32,64,128,256,512], blockBasicBlock, **kwargs) # if pretrained: # model.load_pretrained_model(dataimagenet, namedla34, hashba72cf86) return model3.3 实时摄像头部署连接USB摄像头后运行python demo.py ctdet --demo webcam --load_model ../models/ctdet_coco_dla_2x.pth调试技巧添加--debug 2参数可视化热力图使用--flip_test启用翻转测试提升精度调整--vis_thresh参数默认0.3控制检测灵敏度4. 常见问题排坑指南4.1 CUDA内存不足问题现象RuntimeError: CUDA out of memory解决方案减小测试图像尺寸python demo.py ctdet --demo ../images/test.jpg --load_model ../models/ctdet_coco_dla_2x.pth --input_h 512 --input_w 512限制GPU使用数量CUDA_VISIBLE_DEVICES0 python demo.py ...4.2 模型加载异常现象KeyError: base.base...这是PyTorch版本不匹配导致修改模型加载方式# 在demo.py中找到load_model函数修改为 def load_model(model, model_path): checkpoint torch.load(model_path, map_locationlambda storage, loc: storage) state_dict {k.replace(module., ): v for k,v in checkpoint[state_dict].items()} model.load_state_dict(state_dict, strictFalse) return model4.3 摄像头帧率低优化方案使用轻量模型wget https://cloud.tsinghua.edu.cn/f/2d9011f5c8a14c3e8f3a/?dl1 -O models/ctdet_pascal_resdcn18.pth python demo.py ctdet --demo webcam --load_model ../models/ctdet_pascal_resdcn18.pth启用Half精度推理需GPU支持 修改src/lib/opts.py添加group.add_argument(--half, actionstore_true, helpuse half precision inference)