Перейти к содержанию

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

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

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

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

  • Backbone: Это основная часть сети. В YOLOv5 бэкбон разработан с использованием CSPDarknet53 структуру, модификацию архитектуры Darknet, используемой в предыдущих версиях.
  • Neck (Шея): Эта часть соединяет бэкбон и head. В YOLOv5, SPPF (Spatial Pyramid Pooling - Fast) и PANet используются структуры (Path Aggregation Network).
  • Заголовок: Эта часть отвечает за генерацию финального вывода. YOLOv5 использует YOLOv3 Head для этой цели.

Структура модели изображена на рисунке ниже. Подробную информацию о структуре модели можно найти в yolov5l.yaml.

yolov5

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

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

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

Пример профилирования скорости SPP и SPPF (нажмите, чтобы открыть)
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

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

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

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

    mosaic

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

    copy-paste

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

    random-affine

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

    mixup

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

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

    hsv

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

    horizontal-flip

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

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

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

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

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

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

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

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

loss

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

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

obj_loss

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

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

b_x b_y b_w b_h

Вычисление сетки YOLOv5

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

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

bx by bw bh

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

Масштабирование сетки YOLOv5

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

Неограниченное масштабирование YOLOv5

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

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

Этот процесс включает в себя следующие этапы:

  • Вычислите соотношение размеров ограничивающего прямоугольника ground truth и размеров каждого шаблона anchor.

rw

rh

rwmax

rhmax

rmax

Совпадение

Вычисление IoU YOLOv5

  • Если вычисленное соотношение находится в пределах порога, сопоставьте ground truth box с соответствующим anchor.

Перекрытие сетки YOLOv5

  • Назначьте соответствующий якорь соответствующим ячейкам, помня, что из-за пересмотренного смещения центральной точки ограничивающая рамка ground truth может быть назначена более чем одному якорю. Поскольку диапазон смещения центральной точки отрегулирован от (0, 1) до (-0,5, 1,5). GT Box может быть назначен большему количеству якорей.

Выбор якорей YOLOv5

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

Заключение

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

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



📅 Создано 1 год назад ✏️ Обновлено 5 месяцев назад

Комментарии