Ultralytics YOLOv5 Архитектура
YOLOv5 (v6.0/6.1) - это мощный алгоритм обнаружения объектов, разработанный Ultralytics. В этой статье мы подробно рассмотрим архитектуру YOLOv5 , стратегии дополнения данных, методики обучения и методы вычисления потерь. Такое всестороннее понимание поможет улучшить твое практическое применение обнаружения объектов в различных областях, включая видеонаблюдение, автономные транспортные средства и распознавание образов.
1. Структура модели
YOLOv5Архитектура состоит из трех основных частей:
- Магистраль: Это основная часть сети. Для YOLOv5 магистраль проектируется с помощью
New CSP-Darknet53
структура, являющаяся модификацией архитектуры Darknet, использовавшейся в предыдущих версиях. - Шея: Эта часть соединяет позвоночник и голову. В YOLOv5,
SPPF
иNew CSP-PAN
используются структуры. - Глава: Эта часть отвечает за генерацию конечного результата. YOLOv5 использует
YOLOv3 Head
для этой цели.
Структура модели изображена на картинке ниже. Подробности о структуре модели можно найти в yolov5l.yaml
.
YOLOv5 Вносит несколько незначительных изменений по сравнению со своими предшественниками:
- The
Focus
структура, встречавшаяся в предыдущих версиях, заменена на6x6 Conv2d
Структура. Это изменение повышает эффективность #4825. - The
SPP
структура заменяется наSPPF
. Это изменение увеличивает скорость обработки более чем в два раза.
Чтобы проверить скорость SPP
и SPPF
Можно использовать следующий код:
Пример профилирования скорости SPP против SPPF (нажмите, чтобы открыть)
import time
import torch
import torch.nn as nn
class SPP(nn.Module):
def __init__(self):
super().__init__()
self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)
def forward(self, x):
o1 = self.maxpool1(x)
o2 = self.maxpool2(x)
o3 = self.maxpool3(x)
return torch.cat([x, o1, o2, o3], dim=1)
class SPPF(nn.Module):
def __init__(self):
super().__init__()
self.maxpool = nn.MaxPool2d(5, 1, padding=2)
def forward(self, x):
o1 = self.maxpool(x)
o2 = self.maxpool(o1)
o3 = self.maxpool(o2)
return torch.cat([x, o1, o2, o3], dim=1)
def main():
input_tensor = torch.rand(8, 32, 16, 16)
spp = SPP()
sppf = SPPF()
output1 = spp(input_tensor)
output2 = sppf(input_tensor)
print(torch.equal(output1, output2))
t_start = time.time()
for _ in range(100):
spp(input_tensor)
print(f"SPP time: {time.time() - t_start}")
t_start = time.time()
for _ in range(100):
sppf(input_tensor)
print(f"SPPF time: {time.time() - t_start}")
if __name__ == '__main__':
main()
2. Техники дополнения данных
YOLOv5 Использует различные техники дополнения данных, чтобы улучшить способность модели к обобщению и уменьшить перебор. К этим техникам относятся:
- Мозаичное наращивание: Техника обработки изображений, при которой четыре обучающих изображения объединяются в одно таким образом, что модели обнаружения объектов лучше справляются с различными масштабами и переводами объектов.
- Copy-Paste Augmentation: Инновационный метод увеличения данных, который копирует случайные участки из изображения и накладывает их на другое случайно выбранное изображение, эффективно генерируя новую обучающую выборку.
- Случайные аффинные преобразования: Сюда входят случайное вращение, масштабирование, перевод и сдвиг изображений.
- MixUp Augmentation: Метод, который создает составные изображения путем линейной комбинации двух изображений и связанных с ними меток.
-
Albumentations: Мощная библиотека для дополнения изображений, поддерживающая самые разные техники дополнения.
-
HSV Augmentation: Случайные изменения оттенка, насыщенности и ценности изображений.
- Случайное горизонтальное переворачивание: Метод увеличения, который случайным образом переворачивает изображения по горизонтали.
3. Стратегии тренировок
YOLOv5 Применяет несколько сложных стратегий обучения, чтобы повысить производительность модели. К ним относятся:
- Многомасштабное обучение: В процессе обучения входные изображения случайным образом масштабируются в диапазоне от 0,5 до 1,5 раз от их исходного размера.
- AutoAnchor: Эта стратегия оптимизирует предварительные якорные ящики, чтобы они соответствовали статистическим характеристикам ящиков "истины" в твоих пользовательских данных.
- Планировщик разминки и косинуса LR: Метод, позволяющий регулировать скорость обучения для повышения производительности модели.
- Экспоненциальное скользящее среднее (EMA): Стратегия, которая использует среднее значение параметров за прошлые шаги, чтобы стабилизировать процесс обучения и уменьшить ошибку обобщения.
- Обучение со смешанной точностью: Метод, позволяющий выполнять операции в формате половинной точности, что уменьшает потребление памяти и повышает скорость вычислений.
- Эволюция гиперпараметров: Стратегия автоматической настройки гиперпараметров для достижения оптимальной производительности.
4. Дополнительные функции
4.1 Вычислите потери
Потеря в YOLOv5 вычисляется как комбинация трех отдельных компонентов потери:
- Потери при классификации (BCE Loss): Бинарный кросс-энтропийный убыток, измеряющий ошибку для задачи классификации.
- Потеря объектности (BCE Loss): Еще одна потеря бинарной кросс-энтропии, вычисляющая ошибку при определении того, присутствует ли объект в определенной ячейке сетки или нет.
- Потеря местоположения (CIoU Loss): Полная потеря IoU, измеряет ошибку в локализации объекта в пределах ячейки сетки.
Общая функция потерь изображается в виде:
4.2 Потери баланса
Потери объективности трех слоев предсказания (P3
, P4
, P5
) взвешиваются по-разному. Балансовые веса таковы [4.0, 1.0, 0.4]
соответственно. Такой подход гарантирует, что предсказания на разных масштабах вносят соответствующий вклад в общую потерю.
4.3 Устранение чувствительности к сетке
Архитектура YOLOv5 вносит некоторые важные изменения в стратегию предсказания коробок по сравнению с предыдущими версиями YOLO. В YOLOv2 и YOLOv3 координаты коробок предсказывались напрямую, используя активацию последнего слоя.
Однако в YOLOv5 формула для предсказания координат коробки была обновлена, чтобы уменьшить чувствительность сетки и предотвратить предсказание моделью неограниченных размеров коробки.
Пересмотренные формулы для расчета предсказанной границы выглядят следующим образом:
Сравни смещение центральной точки до и после масштабирования. Диапазон смещения центральной точки регулируется от (0, 1) до (-0,5, 1,5). Поэтому смещение может легко получить 0 или 1.
Сравни коэффициент масштабирования высоты и ширины (относительно якоря) до и после настройки. Оригинальные уравнения yolo/darknet box имеют серьезный недостаток. Ширина и высота совершенно не ограничены, так как они просто out=exp(in), что опасно, так как может привести к убегающим градиентам, нестабильности, потерям NaN и в конечном итоге к полной потере обучения.
4.4 Цели строительства
Процесс построения цели в YOLOv5 очень важен для эффективности обучения и точности модели. Он включает в себя назначение ячеек "истины" на соответствующие ячейки сетки на выходной карте и сопоставление их с соответствующими якорными ячейками.
Этот процесс проходит по следующим шагам:
- Рассчитай соотношение размеров ящика с истинной поверхностью и размеров каждого шаблона якоря.
- Если вычисленное соотношение находится в пределах порога, сопоставь бокс "наземной истины" с соответствующим якорем.
- Назначь подходящий якорь на соответствующие ячейки, помня о том, что благодаря измененному смещению центральной точки, ячейка с землей может быть назначена более чем на один якорь. Поскольку диапазон смещения центральной точки изменился с (0, 1) на (-0,5, 1,5). GT Box может быть назначен на большее количество якорей.
Таким образом, процесс построения целей обеспечивает правильное назначение и сопоставление каждого объекта наземной истины в процессе обучения, что позволяет YOLOv5 более эффективно изучать задачу обнаружения объектов.
Заключение
В заключение хочу сказать, что YOLOv5 представляет собой значительный шаг вперед в разработке моделей обнаружения объектов в реальном времени. Включая в себя различные новые функции, усовершенствования и стратегии обучения, он превосходит предыдущие версии семейства YOLO по производительности и эффективности.
Основные усовершенствования в YOLOv5 включают в себя использование динамической архитектуры, широкий спектр техник дополнения данных, инновационные стратегии обучения, а также важные корректировки в вычислительных потерях и процессе построения целей. Все эти нововведения значительно повышают точность и эффективность обнаружения объектов, сохраняя при этом высокую скорость, которая является визитной карточкой моделей YOLO .