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

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

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

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

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

  • Магистраль: Это основная часть сети. Для YOLOv5 магистраль проектируется с использованием New CSP-Darknet53 структура, являющаяся модификацией архитектуры Darknet, использовавшейся в предыдущих версиях.
  • Шея: Эта часть соединяет позвоночник и голову. В YOLOv5, SPPF и New CSP-PAN используются структуры.
  • Глава: Эта часть отвечает за генерацию конечного результата. 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 Используются различные методы дополнения данных для улучшения способности модели к обобщению и уменьшения избыточной подгонки. Эти методы включают:

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

    мозаика

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

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

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

    random-affine

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

    путаница

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

  • Увеличение HSV: Произвольное изменение оттенка, насыщенности и ценности изображений.

    hsv

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

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

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

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

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

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

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

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

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

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

потеря

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 на bw bh

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

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

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

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

4.4 Целевые показатели строительства

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

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

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

rw

rh

rwmax

rhmax

rmax

матч

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

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

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

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

YOLOv5 выбор якоря

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

Заключение

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

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

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

Комментарии