OpenCV Python CUDA版在MX130上帧率低GPU利用率低如何优化
从你提供的编译信息来看,OpenCV 4.4.0已经正确编译了CUDA 10.1、cuDNN 7.6.5支持,CUDA设备检测也正常,跑DNN慢、GPU利用率低可通过以下方案优化:
- 切换为FP16推理模式
MX130显卡算力为5.0,支持FP16计算,你当前使用的是默认FP32推理,可将目标设备修改为FP16模式,可直接提升推理速度、降低显存占用:
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA_FP16)
- 减少CPU-GPU数据传输开销
当前GPU利用率低的核心原因大概率是大量时间浪费在CPU和GPU之间的数据拷贝上:- 把图像预处理(缩放、颜色空间转换、归一化、减均值等操作)全部迁移到
cv2.cuda模块的GPU接口实现,不要在CPU上处理完再往GPU传 - 如果是视频流场景,使用
cv2.cudacodec接口做GPU硬解码,解码后的帧直接留在GPU显存中做后续推理,完全绕开CPU内存传输
- 把图像预处理(缩放、颜色空间转换、归一化、减均值等操作)全部迁移到
- 调整模型输入尺寸
MX130为入门级移动显卡,仅384个CUDA核心,算力有限,可适当降低模型输入分辨率,比如将640640输入降低为416416,可直接降低计算量,提升推理速度。 - 采用批处理推理
单帧推理的计算量太小,GPU还没跑满就完成了计算,导致利用率低。如果业务场景允许延迟,可攒2~4帧组成批次后一次性喂给网络推理,可大幅提升GPU利用率和整体帧率。 - 升级OpenCV版本
OpenCV 4.4版本的CUDA DNN模块还有不少算子未实现CUDA版本,推理时遇到不支持的算子会自动回退到CPU计算,导致速度慢、GPU利用率低。可尝试重新编译4.6及以上版本的OpenCV,新版对CUDA DNN的算子支持和性能优化都有明显提升。
内容的提问来源于stack exchange,提问作者Kamruzzaman Tauhid
相关产品推荐
相关产品推荐

