#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 не изменяет результат.