CenterNet实战:从零搭建到模型测试的完整环境配置指南
📅 2026/7/5 2:05:14
👁️ 阅读次数
📝 编程学习
1. 环境准备:从零搭建CenterNet开发环境
第一次接触CenterNet时,最头疼的就是环境配置。记得我当初在Ubuntu 18.04上折腾了整整两天,现在把踩过的坑和经验都总结给你。首先明确几个关键组件:
- Python 3.6+(官方推荐3.6)
- PyTorch 1.4+(注意CUDA版本匹配)
- CUDA 10.1(实测兼容性最佳)
- DCNv2编译支持
1.1 创建Python虚拟环境
强烈建议使用conda管理环境,避免包冲突。执行以下命令创建名为CenterNet的独立环境:
conda create --name CenterNet python=3.6 -y conda activate CenterNet如果没安装conda,可以用pyenv+virtualenv组合:
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 pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch验证安装是否成功:
import torch print(torch.__version__) # 应输出1.4.0 print(torch.cuda.is_available()) # 应输出True2. 关键组件编译:DCNv2与NMS
2.1 编译DCNv2的曲折经历
官方源码中的DCNv2不支持PyTorch 1.0+,需要替换为改进版。按步骤操作:
- 删除原DCNv2目录
rm -rf src/lib/models/networks/DCNv2- 克隆新版DCNv2
git 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路径是否加入PATH
2.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%/52FPS)
- ctdet_pascal_resdcn18:轻量级模型(AP 72.6%/7ms)
下载模型到指定目录:
mkdir -p models wget https://cloud.tsinghua.edu.cn/f/5c0b8f1a1e3445089d3c/?dl=1 -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(pretrained=False, **kwargs): model = DLA([1,1,1,2,2,1], [16,32,64,128,256,512], block=BasicBlock, **kwargs) # if pretrained: # model.load_pretrained_model(data='imagenet', name='dla34', hash='ba72cf86') 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_DEVICES=0 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_location=lambda storage, loc: storage) state_dict = {k.replace('module.', ''): v for k,v in checkpoint['state_dict'].items()} model.load_state_dict(state_dict, strict=False) return model4.3 摄像头帧率低
优化方案:
- 使用轻量模型:
wget https://cloud.tsinghua.edu.cn/f/2d9011f5c8a14c3e8f3a/?dl=1 -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', action='store_true', help='use half precision inference')
编程学习
技术分享
实战经验