如何使用GPU运行已训练的Yolov3模型以提升实时检测帧率
OpenCV DNN调用GPU运行YOLOv3提速方案
前置依赖检查
- 确保你有NVIDIA显卡,且已经安装好与显卡驱动匹配的CUDA、cuDNN环境
- OpenCV版本≥4.2,低于该版本没有内置CUDA后端支持
- 你当前安装的OpenCV必须带CUDA支持:默认pip安装的
opencv-python、opencv-contrib-python均不包含CUDA支持,你可以选择:- 自行编译对应CUDA版本的OpenCV
- 通过conda安装带CUDA支持的OpenCV包,命令为
conda install -c conda-forge opencv cudatoolkit - 使用第三方预编译的带CUDA支持的OpenCV pip包
核心代码修改
你只需要在读取模型的代码行之后,添加两行设置DNN后端和计算设备的代码即可,修改后的代码段如下:
net = cv2.dnn.readNet('yolov3_training_last.weights', 'yolov3_testing.cfg') # 新增以下两行开启GPU加速 net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
如果你的显卡支持FP16半精度推理,还可以把第二行改为net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA_FP16),推理速度会进一步提升,精度损失极小。
额外提速建议
- 可以将
blobFromImage中的输入尺寸从(416,416)调整为(320,320),推理速度会明显提升,仅会损失少量检测精度 - 调高置信度阈值,可以减少后处理的计算量
- 如果不需要对检测框做模糊处理,去掉对应的后处理代码也能提升帧率
生效验证
运行代码后查看任务管理器(Windows)或者nvidia-smi命令(Linux)的GPU利用率,CUDA占用率如果达到30%以上即说明GPU加速已生效,正常情况下帧率可以提升到20FPS以上,具体数值取决于你的显卡性能。
内容的提问来源于stack exchange,提问作者Yapay Zeka
相关产品推荐
相关产品推荐

