首页 > 解决方案 > Darknet (YOLOv4) 使用不同版本的 OpenCV,导致无法检测

问题描述

在我的本地机器(达尔文)上对 OpenCV=1 的视频文件运行暗网按预期工作——检测非常好。

使用的命令:

./darknet detector demo cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights test_vid.mov -thresh 0.75 -ext_output -dont_show -out_filename test_output.mp4
# Local environment
import cv2
print(cv2.__version__) //4.5.3

终端输出。请注意OpenCV 版本 4.5.3,正如预期的那样

 GPU isn't used 
 OpenCV version: 4.5.3
Demo
mini_batch = 1, batch = 1, time_steps = 1, train = 0 
   layer   filters  size/strd(dil)      input                output
   0 conv     32       3 x 3/ 2    416 x 416 x   3 ->  208 x 208 x  32 0.075 BF
   1 conv     64       3 x 3/ 2    208 x 208 x  32 ->  104 x 104 x  64 0.399 BF
...

问题是当我在 Jupyter 环境中运行相同的命令时。几乎没有检测到——在 40 秒的视频中总共检测到 1 或 2 个物体,远远少于在本地环境中发现的物体

# Jupyter environment
import cv2
print(cv2.__version__) //4.5.1

我希望暗网使用 OpenCV 4.5.1。但是,它会检测并(可能)使用 3.2.0:

CUDA-version: 10000 (11000), cuDNN: 7.5.1, GPU count: 1  
 OpenCV version: 3.2.0
Demo
 0 : compute_capability = 750, cudnn_half = 0, GPU: Tesla T4 
net.optimized_memory = 0 
mini_batch = 1, batch = 1, time_steps = 1, train = 0 
   layer   filters  size/strd(dil)      input                output
   0 Create CUDA-stream - 0 
 Create cudnn-handle 0 
conv     32       3 x 3/ 2    416 x 416 x   3 ->  208 x 208 x  32 0.075 BF
   1 conv     64       3 x 3/ 2    208 x 208 x  32 ->  104 x 104 x  64 0.399 BF
   2 conv     64       3 x 3/ 1    104 x 104 x  64 ->  104 x 104 x  64 0.797 BF
...

Afaik,使用的 OpenCV 版本是唯一的区别,也是导致检测完全退出的原因。此问题尚未在其他任何地方记录。感谢帮助。

注意:在本地环境中,makefile 的 GPU=0、CUDNN=0、OPENCV=1。

在 Jupyter 上,GPU=1,CUDNN=1,OPENCV=1。设置 GPU=0 和 CUDNN=0 不会改变结果。

标签: pythonopencvdarknetyolov4

解决方案


推荐阅读