Архитектура Ultralytics YOLOv5#
YOLOv5 (v6.0/6.1) — мощный алгоритм обнаружения объектов, разработанный Ultralytics. В этой статье подробно рассматриваются архитектура YOLOv5, стратегии аугментации данных, методики обучения и методы вычисления функции потерь. Это подробное описание поможет улучшить практическое применение обнаружения объектов в различных областях, включая наблюдение, автономные транспортные средства и распознавание изображений.
1. Структура модели#
Архитектура YOLOv5 состоит из трех основных частей:
- Backbone: основная часть сети. В YOLOv5 backbone построен на основе структуры
CSPDarknet53, представляющей собой модификацию архитектуры Darknet, использовавшейся в предыдущих версиях. - Neck: эта часть соединяет backbone и head. В YOLOv5 используются структуры
SPPF(пространственное пирамидальное объединение — быстрое) иPANet(сеть агрегации путей). - 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
from torch import 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.207807064056396482. Методы аугментации данных#
YOLOv5 использует различные методы аугментации данных, чтобы улучшить способность модели к обобщению и уменьшить переобучение. К ним относятся:
-
Аугментация Mosaic: метод обработки изображений, который объединяет четыре обучающих изображения в одно, помогая моделям обнаружения объектов лучше работать с объектами различных масштабов и положений.

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

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

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

-
Albumentations: мощная библиотека аугментации изображений, поддерживающая широкий спектр методов аугментации. Подробнее об использовании аугментаций Albumentations.
-
Аугментация HSV: случайное изменение оттенка, насыщенности и значения цветов изображений.

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

3. Стратегии обучения#
YOLOv5 применяет несколько сложных стратегий обучения для повышения производительности модели. К ним относятся:
- Многошкальное обучение: во время обучения входные изображения случайным образом изменяют в диапазоне от 0,5 до 1,5 исходного размера.
- AutoAnchor: эта стратегия оптимизирует исходные anchor-боксы в соответствии со статистическими характеристиками ground truth-боксов в твоих пользовательских данных.
- Warmup и планировщик Cosine LR: метод корректировки скорости обучения для повышения производительности модели.
- Экспоненциальное скользящее среднее (EMA): стратегия, использующая среднее значение параметров на предыдущих шагах для стабилизации процесса обучения и уменьшения ошибки обобщения.
- Обучение со смешанной точностью: метод выполнения операций в формате половинной точности, который уменьшает использование памяти и повышает скорость вычислений.
- Эволюция гиперпараметров: стратегия автоматической настройки гиперпараметров для достижения оптимальной производительности. Подробнее о настройке гиперпараметров.
4. Дополнительные возможности#
4.1 Вычисление потерь#
Функция потерь в YOLOv5 вычисляется как комбинация трех отдельных компонентов потерь:
- Потери классов (потери BCE): потери бинарной кросс-энтропии, измеряющие ошибку задачи классификации.
- Потери объектности (потери BCE): еще один вид потерь бинарной кросс-энтропии, вычисляющий ошибку определения наличия объекта в конкретной ячейке сетки.
- Потери положения (потери CIoU): потери полной 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.
Сравни коэффициент масштабирования высоты и ширины (относительно anchor) до и после корректировки. В исходных уравнениях бокса yolo/darknet есть серьезный недостаток. Ширина и высота полностью не ограничены, поскольку они просто вычисляются как out=exp(in), что опасно: это может привести к неконтролируемому росту градиентов, нестабильности, потерям NaN и в конечном итоге к полной потере обучения. Подробнее см. в этом issue.
4.4 Построение целей#
Процесс построения целей в YOLOv5 имеет критическое значение для эффективности обучения и точности модели. Он включает присвоение ground truth-боксов соответствующим ячейкам сетки на выходной карте и сопоставление их с подходящими anchor-боксами.
Этот процесс выполняется в несколько этапов:
- Вычисли отношение размеров ground truth-бокса к размерам каждого шаблона anchor.
- Если вычисленное отношение не превышает порог, сопоставь ground truth-бокс с соответствующим anchor.
- Назначь сопоставленный anchor соответствующим ячейкам, учитывая, что из-за измененного смещения центральной точки ground truth-бокс может быть назначен более чем одному anchor: диапазон смещения центральной точки изменяется с (0, 1) на (-0.5, 1.5), благодаря чему становятся возможны дополнительные сопоставления.
Таким образом, процесс построения целей гарантирует, что каждый ground truth-объект правильно назначается и сопоставляется во время обучения, позволяя YOLOv5 эффективнее обучаться задаче обнаружения объектов.
Заключение#
YOLOv5 представляет собой важный этап развития обнаружения объектов в реальном времени. Архитектурные решения, стратегии обучения и инженерные усовершенствования обеспечивают высокую производительность и эффективность по сравнению с более ранними версиями YOLO.
К основным улучшениям YOLOv5 относятся использование динамической архитектуры, широкий спектр методов аугментации данных, инновационные стратегии обучения, а также важные изменения в вычислении потерь и процессе построения целей. Все эти нововведения значительно повышают точность и эффективность обнаружения объектов, сохраняя при этом высокую скорость — отличительную черту моделей YOLO.