Архитектура 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, показывающая 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
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: метод обработки изображений, который объединяет четыре обучающих изображения в одно, побуждая модели обнаружения объектов лучше справляться с различными масштабами объектов и их смещениями.

    Аугментация Mosaic в YOLOv5, объединяющая четыре изображения

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

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

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

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

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

    Аугментация MixUp в YOLOv5, объединяющая два изображения

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

  • HSV Augmentation: случайные изменения оттенка (Hue), насыщенности (Saturation) и яркости (Value) изображений.

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

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

    Случайное горизонтальное отражение в YOLOv5

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

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, измеряющая ошибку локализации объекта внутри ячейки сетки.

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

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

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

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

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

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

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

Формула предсказания x-координаты bounding box Формула предсказания y-координаты bounding box Формула предсказания ширины bounding box Формула предсказания высоты bounding box

YOLOv5 grid computation

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

Пересмотренные формулы для вычисления предсказанного bounding box выглядят так:

Пересмотренная формула x-координаты bounding box YOLOv5 Пересмотренная формула y-координаты bounding box YOLOv5 Пересмотренная формула ширины bounding box YOLOv5 Пересмотренная формула высоты bounding box YOLOv5

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

YOLOv5 grid scaling

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

YOLOv5 unbounded scaling

4.4 Формирование целей (Build Targets)

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

Этот процесс включает следующие шаги:

  • Вычисление отношения размеров 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.

Комментарии