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

Сборка модели YOLOv5

📚 Это руководство объясняет, как использовать ансамбль моделей Ultralytics YOLOv5 🚀 во время тестирования и вывода для улучшения mAP и Recall.

От ансамблевого обучения:

Ансамблевое моделирование - это процесс, в котором для предсказания результата создается несколько различных моделей, либо с использованием различных алгоритмов моделирования, либо с использованием различных наборов обучающих данных. Затем ансамблевая модель объединяет предсказания каждой базовой модели и приводит к единому итоговому предсказанию для невидимых данных. Мотивация использования ансамблевых моделей заключается в снижении ошибки обобщения прогноза. При условии, что базовые модели разнообразны и независимы, ошибка предсказания модели уменьшается при использовании ансамблевого подхода. Этот подход позволяет использовать мудрость толпы при составлении прогноза. Несмотря на то что ансамблевая модель имеет несколько базовых моделей внутри модели, она действует и работает как единая модель.

Прежде чем начать

Клонируйте репо и установите файл requirements.txt в Python>=3.8.0 в окружении, включая PyTorch>=1.8. Модели и наборы данных загружаются автоматически из последнегорелиза YOLOv5 .

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install

Испытание в нормальном режиме

Прежде чем собирать ансамбль, определите базовую производительность одной модели. Эта команда тестирует YOLOv5x на COCO val2017 при размере изображения 640 пикселей. yolov5x.pt это самая большая и точная модель из имеющихся. Другие варианты yolov5s.pt, yolov5m.pt и yolov5l.pt, или ваша собственная контрольная точка, полученная в результате обучения пользовательского набора данных ./weights/best.pt. Для получения подробной информации обо всех доступных моделях см. таблица предварительно обученных контрольных точек.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

Выход:

val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients

val: Scanning '../datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:01<00:00, 2846.03it/s]
val: New cache created: ../datasets/coco/val2017.cache
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [02:30<00:00,  1.05it/s]
                 all       5000      36335      0.746      0.626       0.68       0.49
Speed: 0.1ms pre-process, 22.4ms inference, 1.4ms NMS per image at shape (32, 3, 640, 640)  # <--- baseline speed

Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.504  # <--- baseline mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.688
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.546
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.351
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.551
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.644
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.382
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.628
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.681  # <--- baseline mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.524
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.735
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.826

Ансамблевый тест

Несколько предварительно обученных моделей можно собрать вместе во время тестирования и вывода, просто добавив дополнительные модели к --weights аргумент в любой существующей команде val.py или detect.py. В этом примере тестируется ансамбль из двух моделей:

  • YOLOv5x
  • YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --half

Выход:

val: data=./data/coco.yaml, weights=['yolov5x.pt', 'yolov5l6.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients  # Model 1
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients  # Model 2
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']  # Ensemble notice

val: Scanning '../datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:00<00:00, 49695545.02it/s]
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [03:58<00:00,  1.52s/it]
                 all       5000      36335      0.747      0.637      0.692      0.502
Speed: 0.1ms pre-process, 39.5ms inference, 2.0ms NMS per image at shape (32, 3, 640, 640)  # <--- ensemble speed

Evaluating pycocotools mAP... saving runs/val/exp3/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.515  # <--- ensemble mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.699
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.557
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.356
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.563
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.387
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.638
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.689  # <--- ensemble mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.743
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844

Вывод ансамбля

Добавьте дополнительные модели к --weights аргумент для запуска ансамблевого вывода:

python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/images

Выход:

YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']

image 1/2 /content/yolov5/data/images/bus.jpg: 640x512 4 persons, 1 bus, 1 tie, Done. (0.063s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 3 persons, 2 ties, Done. (0.056s)
Results saved to runs/detect/exp2
Done. (0.223s)

YOLO результат вывода

Преимущества объединения моделей

Сборка моделей с помощью YOLOv5 имеет ряд преимуществ:

  1. Повышение точности: Как показано в примерах выше, объединение нескольких моделей повышает mAP с 0,504 до 0,515 и mAR с 0,681 до 0,689.
  2. Лучшее обобщение: Объединение различных моделей помогает уменьшить избыточную подгонку и улучшить производительность на различных данных.
  3. Повышенная устойчивость: Ансамбли обычно более устойчивы к шумам и выбросам в данных.
  4. Дополнительные преимущества: Разные модели могут лучше обнаруживать разные типы объектов или в разных условиях окружающей среды.

Основным компромиссом является увеличение времени вывода, как показано в метрике скорости (22,4 мс для одиночной модели против 39,5 мс для ансамбля).

Когда следует использовать сборку моделей

Рассмотрите возможность использования ансамбля моделей в этих сценариях:

  • Когда точность важнее скорости умозаключений
  • Для критически важных приложений, где необходимо свести к минимуму количество ложных срабатываний
  • При обработке сложных изображений с различным освещением, окклюзией или масштабом
  • Во время соревнований или бенчмаркинга, где требуется максимальная производительность

Для приложений реального времени с жесткими требованиями к задержкам может быть более подходящим вывод по одной модели.

Поддерживаемые среды

Ultralytics предоставляет ряд готовых к использованию окружений, в каждом из которых предустановлены такие необходимые зависимости, как CUDA, CUDNN, Python, и PyTorchдля запуска ваших проектов.

Статус проекта

YOLOv5 CI

Этот значок означает, что все тесты непрерывной интеграции (CI) YOLOv5 GitHub Actions успешно пройдены. Эти CI-тесты тщательно проверяют функциональность и производительность YOLOv5 по различным ключевым аспектам: обучение, валидация, вывод, экспорт и контрольные показатели. Они обеспечивают стабильную и надежную работу на macOS, Windows и Ubuntu, причем тесты проводятся каждые 24 часа и при каждом новом коммите.

📅 Создано 1 год назад ✏️ Обновлено 8 дней назад

Комментарии