Архитектура Ultralytics YOLOv5
YOLOv5 (v6.0/6.1) — это мощный алгоритм обнаружения объектов, разработанный Ultralytics. В этой статье мы подробно разберем архитектуру YOLOv5, стратегии аугментации данных, методы обучения и техники вычисления функции потерь. Это комплексное понимание поможет тебе улучшить практическое применение обнаружения объектов в различных областях, включая наблюдение, автономные транспортные средства и распознавание изображений.
Структура модели
Архитектура YOLOv5 состоит из трех основных частей:
- Backbone (Магистраль): Это основная часть сети. В YOLOv5 для backbone используется структура
CSPDarknet53, представляющая собой модификацию архитектуры Darknet, применявшейся в предыдущих версиях. - Neck (Шейка): Эта часть соединяет backbone и head. В YOLOv5 используются структуры
SPPF(Spatial Pyramid Pooling - Fast) иPANet(Path Aggregation Network). - Head (Голова): Эта часть отвечает за генерацию окончательного результата. Для этого в YOLOv5 используется
YOLOv3 Head.
Структура модели показана на изображении ниже. Детали структуры модели можно найти в файле models/yolov5l.yaml.

YOLOv5 предлагает ряд заметных улучшений по сравнению с предыдущими версиями:
- Структура
Focus, использовавшаяся в ранних версиях, заменена на6x6 Conv2d. Это изменение повышает эффективность #4825. - Структура
SPPзаменена наSPPF. Это изменение более чем вдвое увеличивает скорость обработки, сохраняя при этом точность выходных данных.
Для тестирования скорости SPP и SPPF можно использовать следующий код:
SPP vs SPPF speed profiling example (click to open)
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Методы аугментации данных
YOLOv5 применяет различные методы аугментации данных для улучшения способности модели к обобщению и уменьшения переобучения. К ним относятся:
-
Mosaic Augmentation: метод обработки изображений, который объединяет четыре обучающих изображения в одно, побуждая модели обнаружения объектов лучше справляться с различными масштабами объектов и их смещениями.

-
Copy-Paste Augmentation: инновационный метод аугментации данных, который копирует случайные фрагменты изображения и вставляет их на другое случайно выбранное изображение, эффективно создавая новый обучающий образец.

-
Случайные аффинные преобразования: сюда входят случайный поворот, масштабирование, сдвиг и сдвиг (shearing) изображений.

-
MixUp Augmentation: метод создания составных изображений путем взятия линейной комбинации двух изображений и соответствующих им меток.

-
Albumentations: мощная библиотека для аугментации изображений, поддерживающая широкий спектр методов. Узнай больше об использовании аугментаций Albumentations.
-
HSV Augmentation: случайные изменения оттенка (Hue), насыщенности (Saturation) и яркости (Value) изображений.

-
Случайное горизонтальное отражение: метод аугментации, который случайно отражает изображения по горизонтали.

Стратегии обучения
YOLOv5 применяет несколько сложных стратегий обучения для повышения производительности модели. Они включают:
- Многомасштабное обучение: входные изображения случайно перемасштабируются в диапазоне от 0,5 до 1,5 раз от их исходного размера во время процесса обучения.
- AutoAnchor: эта стратегия оптимизирует априорные anchor boxes так, чтобы они соответствовали статистическим характеристикам ground truth боксов в твоих пользовательских данных.
- Warmup и Cosine LR Scheduler: метод настройки скорости обучения для повышения производительности модели.
- Экспоненциальное скользящее среднее (EMA): стратегия, использующая среднее значение параметров за предыдущие шаги для стабилизации процесса обучения и уменьшения ошибки обобщения.
- Обучение со смешанной точностью: метод выполнения операций в формате половинной точности, что снижает использование памяти и повышает скорость вычислений.
- Эволюция гиперпараметров: стратегия автоматической настройки гиперпараметров для достижения оптимальной производительности. Узнай больше о настройке гиперпараметров.
Дополнительные возможности
4.1 Вычисление функций потерь
Функция потерь в YOLOv5 вычисляется как комбинация трех отдельных компонентов:
- Loss классов (BCE Loss): бинарная кросс-энтропийная функция потерь, измеряющая ошибку для задачи классификации.
- Loss объектности (BCE Loss): еще одна бинарная кросс-энтропийная функция потерь, вычисляющая ошибку обнаружения присутствия объекта в конкретной ячейке сетки.
- Loss локализации (CIoU Loss): полная функция потерь IoU, измеряющая ошибку локализации объекта внутри ячейки сетки.
Общая функция потерь выглядит следующим образом:
4.2 Балансировка потерь
Потери объектности для трех слоев предсказания (P3, P4, P5) взвешиваются по-разному. Веса балансировки составляют [4.0, 1.0, 0.4] соответственно. Такой подход гарантирует, что предсказания на разных масштабах вносят соответствующий вклад в общую сумму потерь.
4.3 Устранение чувствительности сетки
Архитектура YOLOv5 вносит некоторые важные изменения в стратегию предсказания боксов по сравнению с предыдущими версиями YOLO. В YOLOv2 и YOLOv3 координаты бокса предсказывались напрямую с использованием активации последнего слоя.
Однако в YOLOv5 формула для предсказания координат бокса была обновлена, чтобы снизить чувствительность к сетке и предотвратить предсказание моделью неограниченных размеров бокса.
Пересмотренные формулы для вычисления предсказанного bounding box выглядят так:
Сравни смещение центральной точки до и после масштабирования. Диапазон смещения центральной точки скорректирован с (0, 1) на (-0,5, 1,5). Таким образом, смещение может легко принимать значения 0 или 1.
Сравни коэффициент масштабирования высоты и ширины (относительно anchor) до и после корректировки. Исходные уравнения бокса yolo/darknet имели серьезный недостаток. Ширина и высота были полностью неограниченными, так как они просто рассчитывались как out=exp(in), что опасно, поскольку может привести к бесконтрольным градиентам, нестабильности, NaN-потерям и, в конечном итоге, к полному провалу обучения. Обратись к этому вопросу для получения подробностей.
4.4 Формирование целей (Build Targets)
Процесс формирования целей в YOLOv5 критически важен для эффективности обучения и точности модели. Он включает в себя назначение ground truth боксов соответствующим ячейкам сетки на выходной карте и сопоставление их с соответствующими anchor boxes.
Этот процесс включает следующие шаги:
- Вычисление отношения размеров ground truth бокса к размерам каждого шаблона anchor.
- Если вычисленное отношение находится в пределах порога, сопоставь ground truth бокс с соответствующим anchor.
- Назначь сопоставленный anchor соответствующим ячейкам, учитывая, что из-за пересмотренного смещения центральной точки ground truth бокс может быть назначен более чем одному anchor, так как диапазон смещения центральной точки был скорректирован с (0, 1) на (-0,5, 1,5), что делает возможными дополнительные сопоставления.
Таким образом, процесс формирования целей гарантирует, что каждый объект ground truth будет должным образом назначен и сопоставлен во время обучения, позволяя YOLOv5 эффективнее обучаться задаче обнаружения объектов.
Заключение
YOLOv5 представляет собой важный шаг в эволюции обнаружения объектов в реальном времени. Его архитектурные решения, стратегии обучения и инженерные доработки обеспечивают высокую производительность и эффективность по сравнению с более ранними версиями YOLO.
Основные улучшения в YOLOv5 включают использование динамической архитектуры, широкий спектр методов аугментации данных, инновационные стратегии обучения, а также важные корректировки в вычислении потерь и процессе формирования целей. Все эти инновации значительно повышают точность и эффективность обнаружения объектов, сохраняя при этом высокую скорость, что является визитной карточкой моделей YOLO.