YOLO Vision 2026:

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

Методы дополнения данных#

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

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

    YOLOv5 mosaic data augmentation combining four images

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

    YOLOv5 copy-paste augmentation for instance segmentation

  • Random Affine Transformations: Включает случайное вращение, масштабирование, перемещение и сдвиг изображений.

    YOLOv5 random affine transformations for training

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

    YOLOv5 MixUp data augmentation blending two images

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

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

    YOLOv5 HSV color space augmentation examples

  • Random Horizontal Flip: Метод дополнения, который случайным образом отражает изображения по горизонтали.

    YOLOv5 random horizontal flip augmentation

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

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

  • Multiscale Training: Во время процесса обучения входные изображения случайным образом масштабируются в диапазоне от 0.5 до 1.5 от их исходного размера.
  • AutoAnchor: Эта стратегия оптимизирует априорные anchor boxes, чтобы они соответствовали статистическим характеристикам ground truth боксов в твоих пользовательских данных.
  • Warmup and Cosine LR Scheduler: метод настройки скорости обучения для повышения производительности модели.
  • Exponential Moving Average (EMA): Стратегия, которая использует среднее значение параметров за прошлые шаги для стабилизации процесса обучения и уменьшения ошибки обобщения.
  • Обучение в смешанной точности: метод выполнения операций в формате половинной точности, снижающий использование памяти и увеличивающий скорость вычислений.
  • Гиперавтоматическая настройка (Hyperparameter Evolution): стратегия автоматической настройки гиперпараметров для достижения оптимальной производительности. Узнай больше о настройке гиперпараметров.

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

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

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

  • Classes Loss (BCE Loss): Binary Cross-Entropy loss, измеряет ошибку для задачи классификации.
  • Objectness Loss (BCE Loss): Еще одна Binary Cross-Entropy loss, вычисляет ошибку при обнаружении того, присутствует ли объект в конкретной ячейке сетки или нет.
  • Location Loss (CIoU Loss): Complete IoU loss, измеряет ошибку локализации объекта внутри ячейки сетки.

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

YOLOv5 total loss function formula

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

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

YOLOv5 objectness loss balance formula

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

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

Bounding box x-coordinate prediction formula Bounding box y-coordinate prediction formula Bounding box width prediction formula Bounding box height prediction formula

YOLOv5 grid computation

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

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

YOLOv5 revised bounding box x-coordinate formula YOLOv5 revised bounding box y-coordinate formula YOLOv5 revised bounding box width formula YOLOv5 revised bounding box height formula

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

YOLOv5 grid scaling

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

YOLOv5 unbounded scaling

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

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

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

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

Ground truth to anchor width ratio formula

Ground truth to anchor height ratio formula

Maximum width ratio formula

Maximum height ratio formula

Overall maximum ratio formula

Anchor matching threshold formula

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

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

Заключение#

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

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

Комментарии