Если вы просто выполните шаги, упомянутые @JP Kim, вы получите видео только с вашими ярлыками, однако оно также выведет другие объекты в качестве одной из ваших ярлыков.
В репозитории darkflow есть специальный раздел, в котором точно указано, что нужно сделайте, если хотите получить другой результат. TL; DR - вам следует переобучить вашу модель. Они показывают это на примере трех классов.
Но позвольте мне все же провести вас через процесс. Предположим, у вас есть видео, и вам просто нужно отслеживать всех людей в нем. Итак, нам нужно отслеживать только 1 тип объекта - «человек».
Делаем копию tiny-yolo-voc.cfg
файла в cfg
директорию. Давайте следовать их соглашению и назовем это tiny-yolo-voc-1c.cfg
, где суффикс 1c
обозначает количество классов. Причина выбора tiny-yolo-voc
, а не какой-либо другой конфигурации в качестве нашей базовой модели, заключается в том, что это меньшая сеть, которую можно обучить на небольших графических процессорах. Из того, что я наблюдал, для других конфигураций требуется 10 ГБ + графической памяти, и они заставляли мою машину выходить из памяти.
Внесем необходимые изменения в tiny-yolo-voc-1c.cfg
файл:
- edit
classes
variable to classes=1
- В последнем разделе
convolutional
непосредственно перед region
мы изменим переменную filter
на 5 * (num_class + 5) = 5 * (1+5) = 30
. Итак, установите filters=30
Мы отредактируем файл labels.txt
в исходном каталоге darkflow, и в нем будет только одна строка, в которой написано person
, поскольку нам нужен только 1 тип метки.
Теперь нам нужно обучить нашу модель. Однако для обучения нам сначала нужен набор данных.
Теперь, если ваша метка является одной из существующих меток набора данных VOC или набора данных CoCo, вы можете просто загрузить один из наборов данных VOC / Coco. В нашем случае person
- это тип объекта, который нам нужно отслеживать, и это уже тип объекта в наборе данных VOC. Итак, мы будем использовать набор данных VOC.
Однако, если вы хотите использовать YOLO для классификации и отслеживания нового типа объекта, вам необходимо подготовить собственный набор данных и аннотации. Для этого настраиваемого объекта вы можете следить за частью 5-8 этой серии видео на YouTube . Эти видео демонстрируют пример того, как использовать YOLO для отслеживания и классификации fidget_spinner
.
Загрузите VOC Dataset, потому что он содержит достаточно данных и аннотаций для нашего типа объекта person
# Download the Pascal VOC dataset:
curl -O https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar
Мы не собираемся тренироваться с нуля. Итак, на самом деле мы собираемся загрузить веса для tiny-yolo-voc
модели и начать повторное обучение оттуда для нашего конкретного варианта использования (просто person
класс). Для этого у нас должны быть загружены веса для tiny-yolo-voc
. Вы можете найти веса здесь для YOLO v2. Мы загрузим веса для Tiny YOLO for VOC dataset. После загрузки переместите файл в каталог /darkflow/bin/
.
После того, как мы загрузили это, необходимо, чтобы файл конфигурации базовой модели и файл веса имели то же имя. Поскольку переименование конфигурации не является хорошей идеей, мы переименуем загруженные веса с yolov2-tiny-voc.weights
на tiny-yolo-voc.weights
. Это необходимо, потому что при обучении мы предоставили файл весов, и darkflow пытается выбрать соответствующий файл конфигурации в качестве эталона для обучения новой модели.
Это также упоминается на странице репозитория darkflow:
Когда darkflow видит, что вы загружаете tiny-yolo-voice.weights, он будет искать tiny-yolo-voice.cfg в вашей папке cfg / и сравнивать этот файл конфигурации с новым, который вы установили с помощью --model cfg / tiny-yolo -voc-1c.cfg. В этом случае каждый слой будет иметь одинаковое точное количество весов, за исключением последних двух, поэтому он загрузит веса во все слои до последних двух, потому что теперь они содержат разное количество весов.
Теперь мы можем обучить нашу модель. Вы можете удалить --gpu 0.9
часть, если у вас нет графического процессора для ее обучения.
# Train the net on the Pascal dataset:
flow --model cfg/tiny-yolo-voc-1c.cfg --load bin/tiny-yolo-voc.weights --train --dataset "~/VOCdevkit/VOC2007/JPEGImages" --annotation "~/VOCdevkit/VOC2007/Annotations" --gpu 0.9
Нажмите Ctrl + C, чтобы завершить тренировку, когда вы думаете, что потери больше не уменьшаются. Обычно хороший проигрыш / средний проигрыш равен 1 или меньше 1.
Вы бы заметили, что через каждые 250 шагов darkflow будет сохранять контрольные точки в каталоге ckpt/
. После прекращения обучения вы можете использовать любую из этих контрольных точек для проверки своей модели.
Мы запустим его на видео с людьми и позволим ему сохранить новое видео с предсказаниями ограничивающей рамки. Давайте для этого примера воспользуемся 1500-й ступенчатой контрольной точкой.
flow --model cfg/tiny-yolo-voc-1c.cfg --load 1500 --demo video-input.mp4 --gpu 0.9 --saveVideo
Когда вы запустите это, он покажет FPS, при котором модель может работать с вашим видео. Это может варьироваться в зависимости от вашей машины. В зависимости от FPS и продолжительности видео это может занять некоторое время. Когда процесс будет завершен, у вас будет video.avi
, созданный в darkflow/
каталоге.
В видео должно быть обнаружено только person
типа объектов.
Если результат невысокий, вы можете продолжить обучение своей модели и / или изменить пороговые значения или другие параметры, чтобы получить лучшие результаты.
Надеюсь это поможет.
person
Bhavul
schedule
19.05.2018