[Обучение модели] Ubuntu собирает обучение Darknet и YOLO

искусственный интеллект
[Обучение модели] Ubuntu собирает обучение Darknet и YOLO

欢迎关注我的公众号 [极智视界],回复001获取Google编程规范

O_o>_<  o_OO_o~_~o_O

  Всем привет, я Jizhi Vision, В этой статье рассказывается о методе компиляции обучения даркнету и йоло на ubuntu.

1. Скомпилируйте даркнет

1.1 Скомпилируйте opencv

  Об установке cuda и cudnn говорить особо нечего, для компиляции opencv вы можете обратиться к книге, которую я написал ранее.[Обмен опытом] компиляция среды x86, aarch64, arm32/метод кросс-компиляции opencv", в котором описан метод компиляции opencv на платформах x86, aarch64 и arm32, краткий и эффективный.

1.2 Компиляция даркнета

  клонировать исходный код:

git clone https://github.com/AlexeyAB/darknet.git

cd darknet

  Изменить Makefile, открыть gpu, opencv, openmp:

GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=1
LIBSO=1
ZED_CAMERA=0
ZED_CAMERA_v2_8=0

  Затем приступайте к компиляции, очень просто:

make -j32

  По завершении проверьте, прошла ли установка успешно:

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

  Разумеется, yolov3.weights необходимо скачать и отправить самостоятельно:Семья P Eddie.com/Media/files…

  После успешного запуска он будет в<darknet-path>В каталоге создается очень классическая карта обнаружения Predictions.jpg:

2. Йоло-тренировка

2.1 Создание набора данных VOC

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

  Чтобы узнать, как создавать данные в формате VOC, вы можете обратиться к моей статье: 《[Обмен опытом] Производство набора данных в формате VOC для обнаружения целей, который описан более подробно.

2.2 Йоло-обучение

  После того, как у вас есть набор данных, вы можете начать приятное путешествие по алхимии с файлом структуры модели и предтренировочными весами. На самом деле, в папке cfg имеется множество файлов структуры модели, таких как yolov3.cfg, yolov3-tiny.cfg, yolov4.cfg, yolov4-tiny.cfg и т.д. тренировочные веса, такие как:

  Далее, давайте возьмем yolov4 в качестве примера, чтобы начать наше счастливое тренировочное путешествие.

  У меня здесь не настольная среда, поэтому я добавил-dont_showПередать параметры.

./darknet detector train cfg/voc.data cfg/yolov4.cfg yolov4.conv.137 -dont_show

  Глядя на приведенную выше команду,./darknet detector trainисправлено, другое:

  • cfg/voc.data: передача обучающих данных;
  • cfg/yolov4.cfg: передать структуру обучающей модели;
  • yolov4.conv.137: пройти предтренировочные веса

  Приведенная выше команда для выполнения обучения очень понятна, давайте посмотрим на voc.data:

classes= 20                                        # 目标检测类别数
train  = /home/pjreddie/data/voc/train.txt         # 训练数据集
valid  = /home/pjreddie/data/voc/test.txt          # 测试数据集
names = data/voc.names                             # 类别名称
backup = /home/pjreddie/backup/                    # 训练过程中间权重备份目录

  В .cfg мы также можем внести некоторые изменения для нашей собственной тренировочной ситуации, в основном некоторые параметры в [net]:

[net]
batch=64                  # batch 设置
subdivisions=32           # 每次传进 batch/subdivision 的数据,若gpu显存不够用,把这个参增大
# Training
width=608                 # 图片宽
height=608                # 图片高
channels=3                # 通道数
momentum=0.949            # 动量,影响梯度下降到最优值得速度
decay=0.0005              # 权重衰减正则项,用于防止过拟合
angle=0                   # 通过旋转角度增多训练样本
saturation = 1.5          # 通过调整图片饱和度来增多训练样本
exposure = 1.5            # 通过调整曝光度来增多训练样本
hue=.1                    # 通过调整色调来增多训练样本

learning_rate=0.0013      # 学习率,这个参数比较重要,决定训练收敛快慢及是否能达到好的效果
burn_in=1000              # 学习率设置相关,当小于该参时更新有一种方式,大于该参时采用policy更新方式
max_batches = 500500      # 训练批次到这个参的时候停止训练
policy=steps              # 学习率调整策略
steps=400000,450000       # step和scales是配合使用,这里的意思到400000和450000的时候学习率分别衰减10倍,因为后面慢慢收敛了
scales=.1,.1

#cutmix=1                 # cutmix变换,是数据增强的一种方式
mosaic=1                  # mosaic变换,是数据增强的一种方式

  В дополнение к этому, если вы тренируете свой собственный набор данных, количество обнаруженных категорий не обязательно равно официальным 20, поэтому вам также необходимо внести некоторые изменения в слой йоло.Возьмите, например, один из слоев йоло:

...
[convolutional]
size=1
stride=1
pad=1
filters=75          # filters = 3*(classes+5),这个需要根据你的 classes 数目进行相应修改
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
max_delta=5

Якоря в слое yolo также необходимо модифицировать для различных задач обнаружения, таких как обнаружение людей.Такие параметры, как пороговое значение и пороговое значение nms, также необходимо настроить во время обучения.

  Тогда объясните, зачем нужно модифицировать фильтры слоя свертки на йоло, о чем я писал в этой статье»[Обмен опытом] Анализ логики смещения указателя entry_index в даркнете》Проведя определенный анализ, вам нужно поговорить о расположении данных слоя йоло:

  (1) Данные четырехмерные [N, C, H, W], N — партия, C —3 * (5 + classes), H/W — это высота и ширина feature_map. Нужно объяснить C, C =3 * (1 + 4 + classes), где 1 — уровень достоверности, 4 — информация о местоположении кадра обнаружения, классы — количество категорий, то есть каждая категория дает оценку обнаружения, а умножение на 3 означает, что каждая сетка имеет 3 поля привязки. Таким образом формируется четырехмерная компоновка данных, принятая слоем йоло, то есть компоновка выходных данных верхнего слоя йоло;

  (2) Что касается выходных данных слоя йоло, одномерный динамический массив будет использоваться в даркнете для хранения данных слоя йоло, что включает в себя преобразование четырехмерных данных в одномерные данные. Это делается в даркнете.Предполагая, что четырехмерные данные равны [N, C, H, W], а индекс, соответствующий каждому измерению, равен [n, c, h, w], тогда расширениеn*C*H*W + c*H*W + h*W + w, сохраненный в *output в соответствии с этой логикой.

  Оглядываясь назад, должно быть лучше понятно, почему фильтры предыдущего слоя свертки на йоло3 * (classes + 5).

  Хорошо, приступим к обучению, выполним:

./darknet detector train cfg/voc.data cfg/yolov4.cfg yolov4.conv.137 -dont_show

  Если вам нужно сохранить журнал тренировок, вы можете сделать это:

./darknet detector train cfg/voc.data cfg/yolov4l.cfg yolov4.conv.137 2>1 | tee visualization/train_yolov4.log

  Консоль выведет журнал тренировок:

  После обучения он будет вbackup = /home/pjreddie/backup/Сохраните файлы конечных и промежуточных весов, полученные в результате тренировки. Если эффект удовлетворительный, его можно развернуть.Для обнаружения цели индикатором для измерения эффекта обычно является карта.


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


【Передача по общему номеру】 "[Обучение модели] Ubuntu собирает обучение Darknet и YOLO