Ubuntu18.04 настраивает среду даркнета для достижения обнаружения цели YOLOv4 (2) - обучайте свои собственные данные на основе YOLOv4


  После завершения настройки среды даркнета вы можете выполнить обучение данным по обнаружению целей в рамках инфраструктуры даркнета. В этой статье в качестве примера используются данные VOC.

1. Подготовка данных

1.1 Загрузить данные о ЛОС

  См. Введение на веб-сайт https://pjreddie.com/darknet/yolo/, чтобы загрузить данные о ЛОС.

wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

1.2 Создание меток данных

  Преобразуйте аннотации в xml-файле набора данных VOC в txt-файл, который может анализировать darknet. Формат каждого файла следующий:

<object-class> <x> <y> <width> <height>

  Каждая строка соответствует целевой категории, центральным координатам абсциссы наземного блока истинности, центральным координатам ординаты, ширине наземного блока истинности и высоте наземного блока истинности.

  Используйте scripts/файлы в папке для voc_label.pyпреобразования тегов VOC в теги YOLO, voc_label.pyскопируйте VOCdevkit/файлы в папку и выполните следующую команду:

python voc_label.py

  После завершения операции введите ls, в терминале вы увидите следующее:

2007_test.txt   VOCdevkit
2007_train.txt  voc_label.py
2007_val.txt    VOCtest_06-Nov-2007.tar
2012_train.txt  VOCtrainval_06-Nov-2007.tar
2012_val.txt    VOCtrainval_11-May-2012.tar

  Для обучения VOC требуется четыре набора данных 2007_train, 2007_val, 2012_train и 2012_val для формирования обучающего набора и использования 2007_test в качестве проверочного набора. Введите следующую команду, чтобы объединить соответствующие наборы данных.

cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

  Наконец, измените cfg.dataфайл, настройте путь к данным VOC, и количество классов должно быть правильным .

classes= 20
train  = <path-to-voc>/train.txt
valid  = <path-to-voc>2007_test.txt
names = data/voc.names
backup = backup

1.3 Скачать предварительно обученную модель

1. Начните обучение на основе модели предварительного
  обучения ImageNet . Местоположение загрузки модели предварительного обучения: https://drive.google.com/open?id=1JKF-bdIklxOOVy-2Cr5qdvjgGpmGfcbp . После загрузки модели предварительного обучения , поместите yolov4.conv.137файл в указанное место.

2. Начните обучение на основе модели предварительного обучения COCO.
  Если вы начнете обучение на основе авторской модели предварительного обучения COCO с открытым исходным кодом yolov4.weights, вам необходимо изменить то, что отображается в файле. После изменения вы можете тренироваться на основе предтренировочная модель Модифицированный код выглядит следующим образом.

import numpy as np

# Read weights file
with open('weights/yolov4.weights', 'rb') as f:
    version = np.fromfile(f, dtype=np.int32, count=3)  # (int32) version info: major, minor, revision
    seen = np.fromfile(f, dtype=np.int64, count=1)  # (int64) number of images seen during training
    weights = np.fromfile(f, dtype=np.float32)  # the rest are weights
    seen = np.array([0])

# Write weights file
with open('darknet_yolov4.weights', 'wb') as f:
    version.tofile(f)  # (int32) version info: major, minor, revision
    seen.tofile(f)
    weights.tofile(f)

2. Данные обучения

2.1 Подготовьте файл cfg

  Измените имя файла yolov4-custom.cfg в папке cfg, чтобы yolov4-voc.cfgизменить количество шагов итерации обучения:

max_batches = 50500
policy=steps
steps=40000,45000
scales=.1,.1

  Измените классы 3 слоев йоло на 20, количество фильтров в сверточном слое перед слоем йоло равно 75, (классы + 5) × 3 (классы + 5) \ раз 3( c l a s s e s+5 )×3

[convolutional]
size=1
stride=1
pad=1
filters=75
activation=linear


[yolo]
mask = 6,7,8
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=20
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
scale_x_y = 1.05
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

2.2 Подготовить файл сценария обучения sh

  Введите touch train.shи в терминале gedit train.shотредактируйте файл сценария обучения, введите ./darknet detector train data/voc.data cfg/yolov4-voc.cfg backup/yolov4.conv.137 -mapи выполните, ./train.shчтобы начать обучение. ./darknetВ скомпилированный исполняемый файл, detectorчто реализация задачи обнаружения цели, trainчто осуществление учебных миссий data/voc.data, cfg/yolov4-voc.cfgа также backup/yolov4.conv.137расположение путь к файлу должен быть правильным, -mapпредставляет собой в то же время обучения, оценки точности определения, оценки один раз в четыре эпохи.

2.3 Кривая потерь и MAP

  После завершения обучения вы можете получить следующие изображения в папке даркнета. Изображения показывают, что обучение имеет чрезмерную подгонку. Когда итерация достигает более 10 000 шагов, MAP в наборе данных VOC достигает самого высокого значения. После этого, хотя Loss снижается, но mAP больше не улучшается, а снижается.При обучении на наборе данных VOC требуется дополнительная настройка параметров. После оценки voice_all_map.py , YOLOv4 в наборе данных VOC 0,5: 0,95mAP 52,98; 0,5 может быть достигнуто может быть достигнуто 84,27,0.75mAP 58,64. Этот результат намного выше, чем MAP https://blog.csdn.net/linghu8812/article/details/105708001 Fast_rcnn_R_50_FPN, представленного в этой статье .

chart_yolov4-voice.png
  На приведенном ниже рисунке показан результат обучения на наборе данных VOC с использованием YOLOv3. Видно, что эффект обнаружения YOLOv4 на наборе данных VOC намного лучше, чем у YOLOv3.

Вставьте описание изображения сюда

3. Тестовое изображение

  Введите следующую команду в терминале, ./darknet detector test cfg/voc.data cfg/yolov4-voc.cfg backup/yolov4-voc.weights -thresh 0.25 data/dog.jpgчтобы протестировать отдельное изображение и просмотреть тренировочный эффект. Файл cfg и файл весов можно скачать здесь , код извлечения - ia4x. Результат вывода выглядит следующим образом:

Вставьте описание изображения сюда
  вывод в терминале выглядит следующим образом:

data/dog.jpg: Predicted in 14.562000 milli-seconds.
bicycle: 97%
dog: 94%
car: 99%

рекомендация

отblog.csdn.net/linghu8812/article/details/105785589
рекомендация