YOLO (Darknet): Как определить целую директорию изображений?

Руководство Darknet по обнаружению объектов на изображениях с использованием предварительно обученных весов находится здесь: https://pjreddie.com/darknet/yolo/

Команда для запуска:

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

Последний аргумент - это путь к файлу, я пытался изменить его на data/*.jpg, но не получилось.

Как использовать Darknet для обнаружения целого каталога изображений?


person datdinhquoc    schedule 26.02.2020    source источник


Ответы (4)


Согласно приведенной ниже ссылке, можно использовать модуль cv2.dnn.readNetFromDarknet для чтения даркнета, обученных весов и файла конфигурации для создания загруженной модели на python. После загрузки модели можно просто использовать цикл for для прогнозирования. Перейдите по этой ссылке, чтобы дальнейшие разъяснения

person Amey Shahane    schedule 26.02.2020
comment
Как бы вы использовали цикл для предсказания? - person oo92; 12.02.2021

Существует простой способ обнаружения объектов в списке изображений на основе этого репозитория AlexeyAB / darknet.

./darknet detector test cfg/obj.data cfg/yolov3.cfg yolov3.weights < images_files.txt

Вы можете создать список файлов из командной строки (Отправить файлы папки в txt) или с помощью инструмента с графическим интерфейсом, такого как Nautilus в Ubuntu.

Два дополнительных флага -dont_show -save_labels отключат взаимодействие с пользователем и вместо этого сохранят результаты обнаружения в текстовые файлы.

person ZenjieLi    schedule 26.12.2020

Есть трюк, чтобы заставить исполняемый файл Darknet загружать один раз и выводить несколько файлов изображений. Используйте expect, чтобы добиться цели.

Установить expect:

sudo yum install expect -y
#sudo apt install expect -y

Обнаружение объектов на нескольких изображениях:

expect <<"HEREDOC"
  puts "Spawning...";
  spawn ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights;
  set I 0;

  expect {
    "Enter Image Path" {
      set timeout -1;

      if {$I == 0} {
        send "data/dog.jpg\r";
        incr I;
      } elseif {$I == 1} {
        send "data/kite.jpg\r";
        incr I;
      } else {
        exit;
      }

      exp_continue;
    }
  }
HEREDOC
person datdinhquoc    schedule 26.02.2020

Другое решение - загрузка Darknet из Python2 (не 3, Darknet использует Python2).

1a) Клонируйте даркнет, как описано в https://pjreddie.com/darknet/yolo/.

1b) Перейдите в клонированный каталог, загрузите yolov3-tiny.weights и yolov3.weights, как указано в https://pjreddie.com/darknet/yolo/

2) Скопируйте darknet/examples/detector.py в darknet каталог

3) Отредактируйте новый файл Detector.py

  • Измените строку .load_net, чтобы использовать: cfg/yolov3-tiny.cfg и yolov3-tiny.weights
  • Измените строку .load_meta, чтобы использовать: cfg/coco.data

4a) Обнаруживайте объекты на изображениях, добавляя несколько строк dn.dectect в файл Detector.py

4b) Запустите Detector.py

person datdinhquoc    schedule 26.02.2020