YOLO Vision 2026:

Архитектура 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 с backbone, neck и head

В YOLOv5 по сравнению с предшественниками представлены несколько важных улучшений:

  1. Структура Focus, использовавшаяся в предыдущих версиях, заменена структурой 6x6 Conv2d. Это изменение повышает эффективность #4825.
  2. Структура 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.20780706405639648

2. Методы аугментации данных#

YOLOv5 использует различные методы аугментации данных, чтобы улучшить способность модели к обобщению и уменьшить переобучение. К ним относятся:

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

    Аугментация данных Mosaic в YOLOv5 с объединением четырех изображений

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

    Аугментация Copy-Paste в YOLOv5 для сегментации экземпляров

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

    Случайные аффинные преобразования в YOLOv5 для обучения

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

    Аугментация данных MixUp в YOLOv5 с объединением двух изображений

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

  • Аугментация HSV: случайное изменение оттенка, насыщенности и значения цветов изображений.

    Примеры аугментации цветового пространства HSV в YOLOv5

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

    Аугментация со случайным горизонтальным отражением в YOLOv5

3. Стратегии обучения#

YOLOv5 применяет несколько сложных стратегий обучения для повышения производительности модели. К ним относятся:

  • Многошкальное обучение: во время обучения входные изображения случайным образом изменяют в диапазоне от 0,5 до 1,5 исходного размера.
  • AutoAnchor: эта стратегия оптимизирует исходные anchor-боксы в соответствии со статистическими характеристиками ground truth-боксов в твоих пользовательских данных.
  • Warmup и планировщик Cosine LR: метод корректировки скорости обучения для повышения производительности модели.
  • Экспоненциальное скользящее среднее (EMA): стратегия, использующая среднее значение параметров на предыдущих шагах для стабилизации процесса обучения и уменьшения ошибки обобщения.
  • Обучение со смешанной точностью: метод выполнения операций в формате половинной точности, который уменьшает использование памяти и повышает скорость вычислений.
  • Эволюция гиперпараметров: стратегия автоматической настройки гиперпараметров для достижения оптимальной производительности. Подробнее о настройке гиперпараметров.

4. Дополнительные возможности#

4.1 Вычисление потерь#

Функция потерь в YOLOv5 вычисляется как комбинация трех отдельных компонентов потерь:

  • Потери классов (потери BCE): потери бинарной кросс-энтропии, измеряющие ошибку задачи классификации.
  • Потери объектности (потери BCE): еще один вид потерь бинарной кросс-энтропии, вычисляющий ошибку определения наличия объекта в конкретной ячейке сетки.
  • Потери положения (потери CIoU): потери полной IoU, измеряющие ошибку локализации объекта внутри ячейки сетки.

Общая функция потерь представлена следующим образом:

Формула общей функции потерь YOLOv5

4.2 Балансировка потерь#

Потери объектности трех слоев предсказаний (P3, P4, P5) взвешиваются по-разному. Соответствующие балансировочные веса: [4.0, 1.0, 0.4]. Такой подход обеспечивает надлежащий вклад предсказаний разных масштабов в общую функцию потерь.

Формула балансировки потерь объектности YOLOv5

4.3 Устранение чувствительности к сетке#

Архитектура YOLOv5 вносит важные изменения в стратегию предсказания боксов по сравнению с предыдущими версиями YOLO. В YOLOv2 и YOLOv3 координаты бокса предсказывались непосредственно с использованием активации последнего слоя.

Формула предсказания координаты x ограничивающего бокса Формула предсказания координаты y ограничивающего бокса Формула предсказания ширины ограничивающего бокса Формула предсказания высоты ограничивающего бокса

YOLOv5 grid computation

Однако в YOLOv5 формула предсказания координат бокса была обновлена, чтобы уменьшить чувствительность к сетке и не допустить предсказания моделью неограниченных размеров бокса.

Обновленные формулы вычисления предсказанного ограничивающего бокса выглядят следующим образом:

Обновленная формула координаты x ограничивающего бокса YOLOv5 Обновленная формула координаты y ограничивающего бокса YOLOv5 Обновленная формула ширины ограничивающего бокса YOLOv5 Обновленная формула высоты ограничивающего бокса YOLOv5

Сравни смещение центральной точки до и после масштабирования. Диапазон смещения центральной точки изменяется с (0, 1) на (-0.5, 1.5). Поэтому смещение легко может быть равно 0 или 1.

YOLOv5 grid scaling

Сравни коэффициент масштабирования высоты и ширины (относительно anchor) до и после корректировки. В исходных уравнениях бокса yolo/darknet есть серьезный недостаток. Ширина и высота полностью не ограничены, поскольку они просто вычисляются как out=exp(in), что опасно: это может привести к неконтролируемому росту градиентов, нестабильности, потерям NaN и в конечном итоге к полной потере обучения. Подробнее см. в этом issue.

YOLOv5 unbounded scaling

4.4 Построение целей#

Процесс построения целей в YOLOv5 имеет критическое значение для эффективности обучения и точности модели. Он включает присвоение ground truth-боксов соответствующим ячейкам сетки на выходной карте и сопоставление их с подходящими anchor-боксами.

Этот процесс выполняется в несколько этапов:

  • Вычисли отношение размеров ground truth-бокса к размерам каждого шаблона anchor.

Формула отношения ширины ground truth-бокса к ширине anchor

Формула отношения высоты ground truth-бокса к высоте anchor

Формула максимального отношения ширины

Формула максимального отношения высоты

Формула общего максимального отношения

Формула порога сопоставления anchor

YOLOv5 IoU computation
  • Если вычисленное отношение не превышает порог, сопоставь ground truth-бокс с соответствующим anchor.
YOLOv5 grid overlap
  • Назначь сопоставленный anchor соответствующим ячейкам, учитывая, что из-за измененного смещения центральной точки ground truth-бокс может быть назначен более чем одному anchor: диапазон смещения центральной точки изменяется с (0, 1) на (-0.5, 1.5), благодаря чему становятся возможны дополнительные сопоставления.
YOLOv5 anchor selection

Таким образом, процесс построения целей гарантирует, что каждый ground truth-объект правильно назначается и сопоставляется во время обучения, позволяя YOLOv5 эффективнее обучаться задаче обнаружения объектов.

Заключение#

YOLOv5 представляет собой важный этап развития обнаружения объектов в реальном времени. Архитектурные решения, стратегии обучения и инженерные усовершенствования обеспечивают высокую производительность и эффективность по сравнению с более ранними версиями YOLO.

К основным улучшениям YOLOv5 относятся использование динамической архитектуры, широкий спектр методов аугментации данных, инновационные стратегии обучения, а также важные изменения в вычислении потерь и процессе построения целей. Все эти нововведения значительно повышают точность и эффективность обнаружения объектов, сохраняя при этом высокую скорость — отличительную черту моделей YOLO.

Комментарии