python - 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 不会改变结果。
解决方案
推荐阅读
- android - 将apk构建到phonegap时出现问题
- python - 将列表与元组列表进行比较?
- composer-php - 使用 Composer 安装 mailparser,为什么我得到一个错误,即 allow_url_fopen 已经启用时必须启用它?
- python - 谷歌 BigQuery WRITE_TRUNCATE 删除所有数据
- c - SDL_BlitSurface 总是模糊的。我究竟做错了什么?
- ruby - Phusion 乘客正在覆盖我的数据库配置
- algorithm - 每日编码问题,1.4:解决方案中给出的运行时间不正确?
- react-native - 如何在 componentDidMount 中使用 if/else 和 responseJson?
- scikit-learn - 为什么 scikit 中的 KNN 算法没有按预期工作?
- shell - 有没有一种快速的方法来读取 dd 中的备用字节