Ultralytics YOLO27:
Get Started

Архитектура Ultralytics YOLOv5#

YOLOv5 (v6.0/6.1) — мощный алгоритм обнаружения объектов, разработанный Ultralytics. В этой статье подробно рассматриваются архитектура YOLOv5, стратегии аугментации данных, методы обучения и способы вычисления функции потерь. Это подробное описание поможет улучшить практическое применение обнаружения объектов в разных областях, включая видеонаблюдение, автономные транспортные средства и распознавание изображений.

1. Структура модели#

Архитектура YOLOv5 состоит из трёх основных частей:

  • Базовая сеть: основная часть сети. В YOLOv5 базовая сеть построена на основе структуры CSPDarknet53, модификации архитектуры Darknet, использовавшейся в предыдущих версиях.
  • Шея: эта часть соединяет базовую сеть и голову. В YOLOv5 используются структуры SPPF (быстрый пространственный пирамидальный пуллинг) и PANet (сеть агрегации путей).
  • Голова: эта часть отвечает за формирование итогового результата. Для этого YOLOv5 использует YOLOv3 Head.

Структура модели показана на изображении ниже. Подробное описание структуры модели приведено в models/yolov5l.yaml.

Архитектура YOLOv5: базовая сеть, шея и голова

В YOLOv5 появились заметные улучшения по сравнению с предыдущими версиями:

  1. Структура Focus, использовавшаяся в предыдущих версиях, заменена структурой 6x6 Conv2d. Это изменение повышает эффективность #4825.
  2. Структура SPP заменена на SPPF. Это изменение более чем вдвое увеличивает скорость обработки при сохранении того же результата.

Для проверки скорости SPP и SPPF можно использовать следующий код:

Пример профилирования скорости SPP и SPPF (нажми, чтобы открыть)
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 применяются различные методы аугментации данных, чтобы улучшить способность модели к обобщению и уменьшить переобучение. К ним относятся:

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

    Мозаичная аугментация данных YOLOv5: объединение четырёх изображений

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.1 Вычисление функции потерь#

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

  • Потери классификации (BCE Loss): потери на основе бинарной кросс-энтропии, измеряющие ошибку задачи классификации.
  • Потери объектности (BCE Loss): ещё один вариант потерь на основе бинарной кросс-энтропии, который вычисляет ошибку определения наличия объекта в конкретной ячейке сетки.
  • Потери локализации (CIoU Loss): потери на основе полного 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

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

YOLOv5 unbounded scaling

4.4 Формирование целевых значений#

Формирование целевых значений в YOLOv5 крайне важно для эффективности обучения и точности модели. Этот процесс включает назначение рамок истинной разметки соответствующим ячейкам сетки на выходной карте и сопоставление рамок с подходящими анкерными рамками.

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

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

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

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

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

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

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

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

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

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

Заключение#

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

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

Часто задаваемые вопросы#

  • Базовая сеть CSPDarknet53 извлекает признаки, блок SPPF и шея PANet объединяют их на разных масштабах, а голова в стиле YOLOv3 предсказывает рамки, объектность и классы с шагами 8, 16 и 32. Полный список слоёв приведён в models/yolov5l.yaml.

  • SPPF последовательно выполняет три операции максимальной субдискретизации с окном 5x5, а не запускает параллельно операции с окнами 5x5, 9x9 и 13x13. Результат математически идентичен, но вычисления выполняются более чем в два раза быстрее, как показывает приведённый выше фрагмент кода профилирования.

  • Исходное смещение YOLO не могло принимать значения ровно 0 или 1, поэтому было трудно предсказывать объекты, расположенные на границах сетки. Масштабирование сигмоиды до диапазона (-0.5, 1.5) устраняет эту чувствительность к сетке, а возведение 2σ в квадрат для ширины и высоты ограничивает предсказания четырьмя размерами анкера и предотвращает неконтролируемый рост градиентов, возникавший при использовании неограниченной экспоненты.

  • Сопоставляются все анкеры, у которых отношения ширины и высоты к рамке не превышают anchor_t (по умолчанию 4.0). Расширенный диапазон смещения также позволяет назначить рамку двум соседним ячейкам сетки. Таким образом, один объект может создавать несколько положительных целевых значений, что ускоряет сходимость.

Комментарии