Архитектура Ultralytics YOLOv5
YOLOv5 (v6.0/6.1) — это мощный алгоритм обнаружения объектов, разработанный Ultralytics. В этой статье подробно рассматриваются архитектура YOLOv5, стратегии аугментации данных, методологии обучения и методы вычисления потерь. Это всестороннее понимание поможет улучшить ваше практическое применение обнаружения объектов в различных областях, включая наблюдение, автономные транспортные средства и распознавание изображений.
1. Структура модели
Архитектура YOLOv5 состоит из трех основных частей:
- Backbone: Это основная часть сети. В YOLOv5 бэкбон разработан с использованием
CSPDarknet53
структуру, модификацию архитектуры Darknet, используемой в предыдущих версиях. - Neck (Шея): Эта часть соединяет бэкбон и head. В YOLOv5,
SPPF
(Spatial Pyramid Pooling - Fast) иPANet
используются структуры (Path Aggregation Network). - Заголовок: Эта часть отвечает за генерацию финального вывода. YOLOv5 использует
YOLOv3 Head
для этой цели.
Структура модели изображена на рисунке ниже. Подробную информацию о структуре модели можно найти в yolov5l.yaml
.
YOLOv5 представляет некоторые заметные улучшения по сравнению со своими предшественниками:
- Параметр
Focus
структура, обнаруженная в более ранних версиях, заменена на6x6 Conv2d
структуру. Это изменение повышает эффективность #4825. - Параметр
SPP
структура заменена наSPPF
. Это изменение более чем вдвое увеличивает скорость обработки при сохранении тех же выходных данных.
Чтобы проверить скорость SPP
и SPPF
, можно использовать следующий код:
Пример профилирования скорости SPP и SPPF (нажмите, чтобы открыть)
import time
import torch
import torch.nn as nn
class SPP(nn.Module):
def __init__(self):
"""Initializes an SPP module with three different sizes of max pooling layers."""
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):
"""Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
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):
"""Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
super().__init__()
self.maxpool = nn.MaxPool2d(5, 1, padding=2)
def forward(self, x):
"""Applies sequential max pooling and concatenates results with input tensor."""
o1 = self.maxpool(x)
o2 = self.maxpool(o1)
o3 = self.maxpool(o2)
return torch.cat([x, o1, o2, o3], dim=1)
def main():
"""Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
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()
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648
2. Методы аугментации данных
YOLOv5 использует различные методы увеличения данных, чтобы улучшить способность модели к обобщению и уменьшить переобучение. Эти методы включают в себя:
-
Мозаичная аугментация: Метод обработки изображений, который объединяет четыре обучающих изображения в одно, чтобы модели обнаружения объектов лучше справлялись с различными масштабами и перемещениями объектов.
-
Аугментация методом копирования и вставки: Инновационный метод увеличения данных, который копирует случайные фрагменты изображения и вставляет их в другое случайно выбранное изображение, эффективно генерируя новый обучающий образец.
-
Случайные аффинные преобразования: Включают случайное вращение, масштабирование, сдвиг и наклон изображений.
-
MixUp Augmentation: Метод, который создает составные изображения, беря линейную комбинацию двух изображений и связанных с ними меток.
-
Albumentations: Мощная библиотека для расширения изображений, поддерживающая широкий спектр методов аугментации. Узнайте больше об использовании аугментаций Albumentations.
-
Аугментация HSV: Случайные изменения оттенка, насыщенности и значения цветов изображений.
-
Случайное горизонтальное отражение: Метод аугментации, который случайным образом отражает изображения по горизонтали.
3. Стратегии обучения
YOLOv5 применяет несколько сложных стратегий обучения для повышения производительности модели. К ним относятся:
- Мультимасштабное обучение: В процессе обучения входные изображения случайным образом изменяются в диапазоне от 0,5 до 1,5 раз от их исходного размера.
- AutoAnchor: Эта стратегия оптимизирует предварительные anchor boxes, чтобы соответствовать статистическим характеристикам ground truth boxes в ваших пользовательских данных.
- Разогрев и Cosine LR Scheduler: Метод настройки скорости обучения для повышения производительности модели.
- Экспоненциальное скользящее среднее (EMA): Стратегия, использующая среднее значение параметров за прошлые шаги для стабилизации процесса обучения и уменьшения ошибки обобщения.
- Обучение со смешанной точностью: Метод выполнения операций в формате половинной точности, снижающий использование памяти и повышающий вычислительную скорость.
- Эволюция гиперпараметров: Стратегия автоматической настройки гиперпараметров для достижения оптимальной производительности. Узнайте больше о настройке гиперпараметров.
4. Дополнительные возможности
4.1 Вычисление потерь
Функция потерь в YOLOv5 вычисляется как комбинация трех отдельных компонентов потерь:
- Потеря классов (BCE Loss): Бинарная кросс-энтропия, измеряет ошибку для задачи классификации.
- Objectness Loss (BCE Loss): Еще одна Binary Cross-Entropy loss, вычисляет ошибку при обнаружении наличия объекта в конкретной ячейке сетки или его отсутствия.
- Функция потерь локализации (CIoU Loss): Complete IoU loss, измеряет ошибку локализации объекта внутри ячейки сетки.
Общая функция потерь описывается следующим образом:
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 имеют серьезный недостаток. Ширина и высота совершенно не ограничены, поскольку они являются просто out=exp(in), что опасно, так как это может привести к безудержным градиентам, нестабильности, потерям NaN и, в конечном итоге, к полной потере обучения. Обратитесь к этой проблеме для получения более подробной информации.
4.4 Построение целей
Процесс построения целевого объекта в YOLOv5 имеет решающее значение для эффективности обучения и точности модели. Он включает в себя присвоение ограничивающих рамок ground truth соответствующим ячейкам сетки в выходной карте и сопоставление их с соответствующими anchor boxes.
Этот процесс включает в себя следующие этапы:
- Вычислите соотношение размеров ограничивающего прямоугольника ground truth и размеров каждого шаблона anchor.
- Если вычисленное соотношение находится в пределах порога, сопоставьте ground truth box с соответствующим anchor.
- Назначьте соответствующий якорь соответствующим ячейкам, помня, что из-за пересмотренного смещения центральной точки ограничивающая рамка ground truth может быть назначена более чем одному якорю. Поскольку диапазон смещения центральной точки отрегулирован от (0, 1) до (-0,5, 1,5). GT Box может быть назначен большему количеству якорей.
Таким образом, процесс построения целей гарантирует, что каждый объект ground truth правильно назначен и сопоставлен в процессе обучения, что позволяет YOLOv5 более эффективно изучать задачу обнаружения объектов.
Заключение
В заключение, YOLOv5 представляет собой значительный шаг вперед в разработке моделей обнаружения объектов в реальном времени. Благодаря включению различных новых функций, улучшений и стратегий обучения, она превосходит предыдущие версии семейства YOLO по производительности и эффективности.
Основные улучшения в YOLOv5 включают использование динамической архитектуры, широкий спектр методов увеличения данных, инновационные стратегии обучения, а также важные корректировки в вычислении потерь и процессе построения целей. Все эти нововведения значительно повышают точность и эффективность обнаружения объектов, сохраняя при этом высокую скорость, которая является отличительной чертой моделей YOLO.