Даркнет (YOLOv4) использует другую версию OpenCV, что приводит к необнаружению

#python #opencv #darknet #yolov4

Вопрос:

Запуск darknet на моей локальной машине (Darwin) в видеофайле с 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. Обнаружения почти не производятся-в общей сложности 1 или 2 объекта обнаруживаются в 40-секундном видео, что намного меньше, чем в локальной среде

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

Я бы ожидал, что darknet будет использовать 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 не изменяет результат.