YOLOv3模型命令行检测正常但Python脚本无结果且OpenCV未用GPU
问题解决方案
一、Python脚本(darknet_images.py/darknet_video.py)无检测结果的排查与修复
- 核对配置文件路径:确保脚本中
cfg_path、data_path、weights_path与命令行使用的完全一致,重点确认训练生成的权重文件(如yolov3_last.weights)、obj.data、obj.names的路径没有相对路径错误,比如命令行用data/obj.data,脚本里不能写成obj.data(若脚本不在主目录)。 - 调整置信度阈值:仓库脚本默认置信度阈值可能高于命令行(命令行默认0.25),导致低置信度检测结果被过滤。找到脚本中
darknet.detect_image或检测函数的thresh参数,将其修改为0.25或与命令行一致的值。 - 验证Python绑定编译:确认编译Darknet时开启了
BUILD_PYTHON=1选项,且脚本使用的Python版本与编译时一致;检查darknet.py和对应的动态库(Windows下darknet.dll、Linux下libdarknet.so)是否在脚本可访问的路径,避免因绑定加载失败导致模型无法正常推理。
二、OpenCV脚本无法利用GPU的提速方案
- 确认OpenCUDA支持:通过
print(cv2.cuda.getCudaEnabledDeviceCount())检查,若返回0说明当前OpenCV未编译CUDA支持。需重新编译OpenCV,编译时开启WITH_CUDA、WITH_CUDNN选项,并配置正确的CUDA、cuDNN路径;也可尝试使用预编译的带CUDA加速的OpenCV包(注意匹配系统和CUDA版本)。 - 切换至GPU推理后端:修改加载模型的代码,强制使用CUDA后端:
net = cv2.dnn.readNetFromDarknet("cfg/yolov3.cfg", "weights/yolov3_last.weights") net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA) net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA) - 匹配版本兼容性:确保CUDA、cuDNN版本与OpenCV、YOLOv3兼容(如CUDA 11.x对应cuDNN 8.x,OpenCV 4.5+支持该组合),避免因版本不匹配导致GPU加速无法启用。
内容的提问来源于stack exchange,提问作者Shantanu Nandan
相关产品推荐
相关产品推荐

