欢迎关注我的公众号 [极智视界],回复001获取Google编程规范
O_o
>_<
o_O
O_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 и т.д. тренировочные веса, такие как:
- yolov3.cfg ---> darknet53.conv.74 отправить:Семья P Eddie.com/Media/files…
- yolov3-tiny.cfg ---> yolov3-tiny.conv.11 отправить:drive.Google.com/file//18V3…
- yolov4-tiny.cfg ---> yolov4-tiny.conv.29 отправляет:GitHub.com/Alex Malicious AB/Большой…
- yolov4.cfg ---> yolov4.conv.137 отправить:drive.Google.com/open?ID=1JK…
Далее, давайте возьмем 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》