
YOLOv5 с Comet#
В этом руководстве мы расскажем, как использовать YOLOv5 с Comet, мощным инструментом для отслеживания, сравнения и оптимизации экспериментов по машинному обучению.
О Comet#
Comet создает инструменты, которые помогают дата-саентистам, инженерам и руководителям команд ускорять и оптимизировать модели machine learning и deep learning.
Отслеживай и визуализируй метрики модели в реальном времени, сохраняй гиперпараметры, датасеты и чекпоинты моделей, а также визуализируй предсказания с помощью Comet Custom Panels! Comet гарантирует, что ты не потеряешь результаты своей работы, и позволяет легко делиться ими и сотрудничать в командах любого размера!
Начало работы#
Установка Comet#
pip install comet_mlНастройка учетных данных Comet#
Существует два способа настройки Comet для работы с YOLOv5.
Ты можешь задать свои учетные данные через переменные окружения:
Переменные окружения
export COMET_API_KEY=YOUR_API_KEY
export COMET_PROJECT_NAME=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'Или создай файл .comet.config в своем рабочем каталоге и задай там свои учетные данные:
Файл конфигурации Comet
[comet]
api_key=YOUR_API_KEY
project_name=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'Запуск скрипта обучения#
# Train YOLOv5s on COCO128 for 5 epochs
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.ptВот и все! Comet будет автоматически логировать твои гиперпараметры, аргументы командной строки, а также метрики обучения и валидации. Ты сможешь визуализировать и анализировать свои запуски в интерфейсе Comet.

Попробуй пример!#
Ознакомься с примером завершенного запуска здесь.
А еще лучше — попробуй сам в этом Colab Notebook:
Автоматическое логирование#
По умолчанию Comet будет логировать следующие элементы:
Метрики#
- Потери по рамке (Box Loss), потери по объекту (Object Loss), потери классификации (Classification Loss) для обучающих и валидационных данных
- Метрики mAP_0.5, mAP_0.5:0.95 для данных валидации
- Precision и Recall для валидационных данных
Параметры#
- Гиперпараметры модели
- Все параметры, переданные через опции командной строки
Визуализации#
- Confusion Matrix предсказаний модели на валидационных данных
- Графики для PR- и F1-кривых по всем классам
- Коррелограмма меток классов
Настройка логирования Comet#
Comet можно настроить на логирование дополнительных данных с помощью флагов командной строки, передаваемых скрипту обучения, или через переменные окружения:
export COMET_MODE=online # Set whether to run Comet in 'online' or 'offline' mode. Defaults to online
export COMET_MODEL_NAME="yolov5" # Set the name for the saved model. Defaults to yolov5
export COMET_LOG_CONFUSION_MATRIX=false # Set to disable logging a Comet Confusion Matrix. Defaults to true
export COMET_MAX_IMAGE_UPLOADS=30 # Controls how many total image predictions to log to Comet. Defaults to 100.
export COMET_LOG_PER_CLASS_METRICS=true # Set to log evaluation metrics for each detected class at the end of training. Defaults to false
export COMET_DEFAULT_CHECKPOINT_FILENAME="last.pt" # Set this if you would like to resume training from a different checkpoint. Defaults to 'last.pt'
export COMET_LOG_BATCH_LEVEL_METRICS=true # Set this if you would like to log training metrics at the batch level. Defaults to false.
export COMET_LOG_PREDICTIONS=true # Set this to false to disable logging model predictionsЛогирование контрольных точек (checkpoints) с помощью Comet#
Логирование моделей в Comet по умолчанию отключено. Чтобы включить его, передай аргумент save-period в скрипт обучения. Это сохранит залогированные чекпоинты в Comet в соответствии со значением интервала, заданным в save-period:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1Логирование предсказаний модели#
По умолчанию предсказания модели (изображения, метки ground truth и ограничивающие рамки/bbox) будут логироваться в Comet.
Ты можешь управлять частотой логирования предсказаний и связанных с ними изображений, передав аргумент командной строки bbox_interval. Предсказания можно визуализировать с помощью пользовательской панели Object Detection в Comet. Эта частота соответствует каждому N-му батчу данных за эпоху. В примере ниже мы логируем каждый 2-й батч данных для каждой эпохи.
Примечание: Даталодер валидации YOLOv5 по умолчанию использует размер батча, равный 32, поэтому тебе нужно будет соответствующим образом настроить частоту логирования.
Вот пример проекта с использованием панели
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 2Управление количеством изображений с предсказаниями, логируемыми в Comet#
При логировании предсказаний из YOLOv5 Comet записывает изображения, связанные с каждым набором предсказаний. По умолчанию логируется максимум 100 валидационных изображений. Ты можешь увеличить или уменьшить это число с помощью переменной окружения COMET_MAX_IMAGE_UPLOADS:
env COMET_MAX_IMAGE_UPLOADS=200 python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 1Логирование метрик на уровне классов#
Используй переменную окружения COMET_LOG_PER_CLASS_METRICS для логирования mAP, precision, recall, f1 для каждого класса:
env COMET_LOG_PER_CLASS_METRICS=true python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.ptЗагрузка набора данных в Comet Artifacts#
Если ты хочешь хранить свои данные с помощью Comet Artifacts, ты можешь сделать это с помощью флага upload_dataset.
Датасет должен быть организован так, как описано в документации YOLOv5. Файл конфигурации датасета yaml должен иметь тот же формат, что и файл coco128.yaml.
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_datasetТы можешь найти загруженный набор данных на вкладке Artifacts в своем рабочем пространстве (Workspace) Comet:

Ты можешь просмотреть данные напрямую в интерфейсе Comet:

Артефакты имеют версионирование, а также поддерживают добавление метаданных о датасете. Comet автоматически залогирует метаданные из файла твоего датасета yaml:

Использование сохраненного артефакта#
Если ты хочешь использовать датасет из Comet Artifacts, установи переменную path в файле своего датасета yaml, чтобы она указывала на следующий URL-адрес ресурса Artifact:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"Затем передай этот файл в свой скрипт обучения следующим образом:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data artifact.yaml \
--weights yolov5s.ptАртефакты также позволяют отслеживать происхождение данных по мере их прохождения через рабочий процесс экспериментов. Здесь ты можешь увидеть график, который показывает все эксперименты, использовавшие твой загруженный набор данных:

Возобновление процесса обучения#
Если твой процесс обучения прервался по какой-либо причине (например, из-за сбоя интернет-соединения), ты можешь возобновить его, используя флаг resume и путь к запуску Comet (Run Path).
Путь к запуску имеет следующий формат: comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID.
Это восстановит запуск до состояния перед прерыванием, включая восстановление модели из контрольной точки, восстановление всех гиперпараметров и аргументов обучения, а также загрузку артефактов набора данных Comet, если они использовались в исходном запуске. Возобновленный запуск продолжит логироваться в существующий эксперимент в интерфейсе Comet:
python train.py \
--resume "comet://YOUR_RUN_PATH"Поиск гиперпараметров с помощью Comet Optimizer#
YOLOv5 также интегрирован с Comet's Optimizer, что упрощает визуализацию подбора гиперпараметров в пользовательском интерфейсе Comet.
Настройка перебора (Sweep) оптимизатора#
Чтобы настроить Comet Optimizer, тебе нужно создать JSON-файл с информацией о подборе. Пример файла приведен в utils/loggers/comet/optimizer_config.json:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json"Скрипт hpo.py принимает те же аргументы, что и train.py. Если ты хочешь передать дополнительные аргументы для подбора, просто добавь их после скрипта:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json" \
--save-period 1 \
--bbox_interval 1Визуализация результатов#
Comet предоставляет множество способов визуализации результатов подбора. Взгляни на проект с завершенным подбором здесь.
