Архитектура 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 представляет несколько заметных улучшений по сравнению со своими предшественниками:
- Структура
Focus, использовавшаяся в более ранних версиях, заменена на структуру6x6 Conv2d. Это изменение повышает эффективность #4825. - Структура
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: техника обработки изображений, которая объединяет четыре тренировочных изображения в одно таким образом, чтобы побудить модели обнаружения объектов лучше справляться с различными масштабами объектов и их смещениями.

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

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

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

-
Albumentations: мощная библиотека аугментации изображений, поддерживающая широкий спектр методов аугментации. Узнай больше об использовании аугментаций Albumentations.
-
HSV Augmentation: Случайные изменения оттенка (Hue), насыщенности (Saturation) и яркости (Value) изображений.

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

Стратегии обучения#
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, измеряет ошибку локализации объекта внутри ячейки сетки.
Общая функция потерь представлена следующим образом:
4.2 Балансировка потерь#
Потери на предметность (objectness losses) трех предсказательных слоев (P3, P4, P5) имеют разные веса. Балансировочные веса равны [4.0, 1.0, 0.4] соответственно. Этот подход гарантирует, что предсказания в разных масштабах вносят надлежащий вклад в общие потери.
4.3 Устранение чувствительности сетки#
Архитектура YOLOv5 вносит некоторые важные изменения в стратегию предсказания боксов по сравнению с более ранними версиями YOLO. В YOLOv2 и YOLOv3 координаты бокса предсказывались напрямую с использованием активации последнего слоя.
Однако в YOLOv5 формула для предсказания координат бокса была обновлена, чтобы уменьшить чувствительность к сетке и предотвратить предсказание моделью неограниченных размеров бокса.
Пересмотренные формулы для расчета предсказанного баунтинг-бокса выглядят следующим образом:
Сравни смещение центральной точки до и после масштабирования. Диапазон смещения центральной точки скорректирован с (0, 1) на (-0.5, 1.5). Таким образом, смещение может легко принимать значения 0 или 1.
Сравни коэффициент масштабирования высоты и ширины (относительно якоря) до и после настройки. Оригинальные уравнения боксов yolo/darknet имеют серьезный недостаток. Ширина и высота абсолютно не ограничены, так как они просто равны out=exp(in), что опасно, поскольку может привести к уходу градиентов в бесконечность, нестабильности, потерям NaN и в конечном итоге к полной потере обучения. Обратись к этому вопросу для получения подробностей.
4.4 Формирование целей (Build Targets)#
Процесс построения целей (build target) в YOLOv5 имеет решающее значение для эффективности обучения и точности модели. Он включает в себя назначение истинных ограничивающих рамок (ground truth boxes) соответствующим ячейкам сетки на карте вывода и их сопоставление с подходящими якорными рамками (anchor boxes).
Этот процесс состоит из следующих шагов:
- Вычисли отношение размеров ground truth бокса к размерам каждого шаблона анкора.
- Если рассчитанное отношение находится в пределах порога, сопоставь ground truth бокс с соответствующим анкором.
- Назначь сопоставленный анкор соответствующим ячейкам, помня, что из-за пересмотренного смещения центральной точки ground truth бокс может быть назначен более чем одному анкору, поскольку диапазон смещения центральной точки скорректирован с (0, 1) на (-0.5, 1.5), что делает возможными дополнительные соответствия.
Таким образом, процесс формирования целей гарантирует, что каждый объект ground truth будет должным образом назначен и сопоставлен во время процесса обучения, позволяя YOLOv5 более эффективно обучаться задаче обнаружения объектов.
Заключение#
YOLOv5 представляет собой значительный шаг в развитии обнаружения объектов в реальном времени. Ее архитектурные решения, стратегии обучения и инженерные доработки обеспечивают высокую производительность и эффективность по сравнению с более ранними версиями YOLO.
Основные улучшения в YOLOv5 включают использование динамической архитектуры, широкий спектр методов дополнения данных, инновационные стратегии обучения, а также важные корректировки в вычислении потерь и процессе формирования целей. Все эти инновации значительно повышают точность и эффективность обнаружения объектов, сохраняя при этом высокую скорость, что является фирменным знаком моделей YOLO.