Перейти к содержимому

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

YOLOv5 (v6.0/6.1) is a powerful object detection algorithm developed by Ultralytics. This article dives deep into the YOLOv5 architecture, data augmentation strategies, training methodologies, and loss computation techniques. This comprehensive understanding will help improve your practical application of object detection in various fields, including surveillance, autonomous vehicles, and image recognition.

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

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

  • Магистраль: Это основная часть сети. Для YOLOv5 магистраль проектируется с помощью New CSP-Darknet53 структура, являющаяся модификацией архитектуры Darknet, использовавшейся в предыдущих версиях.
  • Шея: Эта часть соединяет позвоночник и голову. В YOLOv5, SPPF и New CSP-PAN используются структуры.
  • Глава: Эта часть отвечает за генерацию конечного результата. YOLOv5 использует YOLOv3 Head для этой цели.

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

yolov5

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

  1. The Focus структура, встречавшаяся в предыдущих версиях, заменена на 6x6 Conv2d Структура. Это изменение повышает эффективность #4825.
  2. The 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 employs various data augmentation techniques to improve the model's ability to generalize and reduce overfitting. These techniques include:

  • Mosaic Augmentation: An image processing technique that combines four training images into one in ways that encourage object detection models to better handle various object scales and translations.

    Мозаика

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

    копировать-вставить

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

    random-affine

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

    путаница

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

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

    hsv

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

    Горизонтальное переворачивание

3. Стратегии тренировок

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

  • Многомасштабное обучение: В процессе обучения входные изображения случайным образом масштабируются в диапазоне от 0,5 до 1,5 раз от их исходного размера.
  • AutoAnchor: Эта стратегия оптимизирует предварительные якорные ящики, чтобы они соответствовали статистическим характеристикам ящиков "истины" в твоих пользовательских данных.
  • Warmup and Cosine LR Scheduler: A method to adjust the learning rate to enhance model performance.
  • Экспоненциальное скользящее среднее (EMA): Стратегия, которая использует среднее значение параметров за прошлые шаги, чтобы стабилизировать процесс обучения и уменьшить ошибку обобщения.
  • Mixed Precision Training: A method to perform operations in half-precision format, reducing memory usage and enhancing computational speed.
  • Эволюция гиперпараметров: Стратегия автоматической настройки гиперпараметров для достижения оптимальной производительности.

4. Дополнительные функции

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

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

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

The overall loss function is depicted by:

потеря

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

The revised formulas for calculating the predicted bounding box are as follows:

bx на bw bh

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

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

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

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

4.4 Цели строительства

The build target process in YOLOv5 is critical for training efficiency and model accuracy. It involves assigning ground truth boxes to the appropriate grid cells in the output map and matching them with the appropriate anchor boxes.

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

  • Рассчитай соотношение размеров ящика с истинной поверхностью и размеров каждого шаблона якоря.

rw

rh

rwmax

rhmax

rmax

спичка

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

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

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

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

YOLOv5 Выбор якоря

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

Заключение

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

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

📅 Created 11 months ago ✏️ Updated 1 month ago

Комментарии