Caffe 模型部署实战:Ubuntu 20.04 环境 5 步完成 ResNet-50 推理
在深度学习领域,Caffe 作为一个轻量级且高效的框架,至今仍在许多生产环境中发挥着重要作用。特别是在计算机视觉任务中,ResNet-50 作为经典的卷积神经网络模型,其部署需求依然广泛。本文将带你在 Ubuntu 20.04 系统上,用最简洁的步骤完成从环境配置到性能测试的全流程部署。
1. 环境准备与依赖安装
部署 Caffe 模型的第一步是搭建合适的环境。Ubuntu 20.04 作为长期支持版本,提供了稳定的基础。以下是必须安装的核心组件:
sudo apt update sudo apt install -y build-essential cmake git libatlas-base-dev libboost-all-dev libgflags-dev libgoogle-glog-dev libhdf5-serial-dev libleveldb-dev liblmdb-dev libopencv-dev libprotobuf-dev libsnappy-dev protobuf-compiler python3-dev python3-pip提示:如果使用 GPU 加速,还需安装对应版本的 CUDA 和 cuDNN。本文以 CPU 模式为例,但会在关键步骤注明 GPU 配置差异。
Python 环境建议使用 virtualenv 隔离:
python3 -m pip install virtualenv python3 -m virtualenv caffe_env source caffe_env/bin/activate关键 Python 包安装:
pip install numpy scipy matplotlib opencv-python protobuf2. Caffe 框架编译与安装
从官方仓库获取最新代码并编译:
git clone https://github.com/BVLC/caffe.git cd caffe cp Makefile.config.example Makefile.config对于 CPU-only 环境,需修改 Makefile.config:
# CPU_ONLY := 1 取消注释 CPU_ONLY := 1编译命令:
make all -j$(nproc) make pycaffe make test make runtest验证安装:
python3 -c "import caffe; print(caffe.__version__)"3. ResNet-50 模型准备与转换
从 Model Zoo 获取预训练模型:
wget http://dl.caffe.berkeleyvision.org/resnet50-19c8e357.caffemodel -P models/resnet50/ wget https://raw.githubusercontent.com/KaimingHe/deep-residual-networks/master/prototxt/ResNet-50-deploy.prototxt -P models/resnet50/模型测试脚本示例(resnet_inference.py):
import numpy as np import caffe import cv2 # 初始化网络 net = caffe.Net('models/resnet50/ResNet-50-deploy.prototxt', 'models/resnet50/resnet50-19c8e357.caffemodel', caffe.TEST) # 输入预处理 transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2,0,1)) transformer.set_mean('data', np.array([104, 117, 123])) transformer.set_raw_scale('data', 255) # 加载测试图像 im = caffe.io.load_image('test.jpg', color=False) net.blobs['data'].data[...] = transformer.preprocess('data', im) # 执行推理 output = net.forward() prob = output['prob'][0] print('Predicted class:', prob.argmax())4. 性能优化技巧
提升推理速度的关键配置:
| 优化方法 | CPU 配置 | GPU 配置 | 效果提升 |
|---|---|---|---|
| 线程数 | export OMP_NUM_THREADS=4 | CUDA 流并行 | 30-50% |
| 内存分配 | caffe.set_mode_cpu() | caffe.set_mode_gpu() | 2-5x |
| 模型量化 | convert_to_quantized.py | TensorRT 加速 | 2-3x |
| 批处理 | net.blobs['data'].reshape(8,3,224,224) | 相同 | 3-8x |
内存优化技巧:
# 释放不必要的中间结果 net.blobs['conv1'].data.fill(0) net.blobs['pool1'].data.fill(0)5. 完整部署脚本与基准测试
自动化部署脚本(deploy_resnet.sh):
#!/bin/bash # 自动部署 ResNet-50 的完整流程 # 1. 安装依赖 echo "[1/5] 安装系统依赖..." sudo apt update && sudo apt install -y $(cat requirements.txt) # 2. 编译 Caffe echo "[2/5] 编译 Caffe..." cd caffe && make all -j$(nproc) && make pycaffe # 3. 下载模型 echo "[3/5] 下载预训练模型..." mkdir -p models/resnet50 wget -nc http://dl.caffe.berkeleyvision.org/resnet50-19c8e357.caffemodel -P models/resnet50/ wget -nc https://raw.githubusercontent.com/KaimingHe/deep-residual-networks/master/prototxt/ResNet-50-deploy.prototxt -P models/resnet50/ # 4. 测试推理 echo "[4/5] 运行测试推理..." python3 resnet_inference.py # 5. 性能测试 echo "[5/5] 执行基准测试..." python3 -c " import caffe, time net = caffe.Net('models/resnet50/ResNet-50-deploy.prototxt', 'models/resnet50/resnet50-19c8e357.caffemodel', caffe.TEST) net.forward() # 预热 start = time.time() for _ in range(100): net.forward() print(f'平均推理时间: {(time.time()-start)/100:.3f}s') "基准测试结果示例:
CPU: Intel Xeon E5-2680 v4 @ 2.40GHz (14核) 平均推理时间: 0.842s (batch=1) 内存占用: 1.2GB GPU: NVIDIA Tesla T4 平均推理时间: 0.078s (batch=1) 内存占用: 1.5GB