
YOLOv5 с Comet
В этом руководстве ты узнаешь, как использовать YOLOv5 с Comet, мощным инструментом для отслеживания, сравнения и оптимизации экспериментов в машинном обучении.
О Comet
Comet создает инструменты, помогающие специалистам по анализу данных, инженерам и руководителям команд ускорять и оптимизировать машинного обучения и глубокого обучения моделей.
Отслеживай и визуализируй метрики модели в режиме реального времени, сохраняй гиперпараметры, наборы данных и контрольные точки (checkpoints) модели, а также визуализируй предсказания своей модели с помощью пользовательских панелей Comet (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 записывает следующие данные:
Метрики
- Потери (Loss) для bbox, объектов и классификации при обучении и валидационным данным
- метрики 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 и ограничивающие рамки/bboxes) будут записываться в Comet.
Ты можешь контролировать частоту записи предсказаний и связанных с ними изображений, передав аргумент командной строки bbox_interval. Предсказания можно визуализировать с помощью Детекция объектов пользовательской панели Comet. Эта частота соответствует каждому N-ному пакету (batch) данных для каждого эпоха. В примере ниже мы записываем каждый 2-й пакет данных для каждой эпохи.
Примечание: Валидационный загрузчик (dataloader) 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Загрузка набора данных в Artifacts Comet
Если ты хочешь хранить свои данные, используя Artifacts Comet, ты можешь сделать это с помощью флага upload_dataset.
Набор данных должен быть организован так, как описано в YOLOv5 documentation. Файл конфигурации набора данных yaml должен следовать тому же формату, что и у coco128.yaml.
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_datasetТы можешь найти загруженный набор данных на вкладке Artifacts в своем рабочем пространстве Comet:

Ты можешь просмотреть данные непосредственно в пользовательском интерфейсе Comet:

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

Использование сохраненного артефакта
Если ты хочешь использовать набор данных из Artifacts Comet, установи переменную 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 (Comet Run Path).
Путь к запуску имеет следующий формат comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID.
Это восстановит состояние запуска до момента прерывания, включая восстановление модели из контрольной точки, восстановление всех гиперпараметров и аргументов обучения, а также скачивание артефактов набора данных Comet, если они использовались в исходном запуске. Возобновленный запуск продолжит записывать данные в существующий эксперимент в пользовательском интерфейсе Comet:
python train.py \
--resume "comet://YOUR_RUN_PATH"Поиск гиперпараметров с помощью оптимизатора Comet
YOLOv5 также интегрирован с оптимизатором Comet, что упрощает визуализацию перебора гиперпараметров в пользовательском интерфейсе Comet.
Настройка перебора (sweep) оптимизатора
Чтобы настроить оптимизатор Comet, тебе нужно создать 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 предоставляет несколько способов визуализации результатов твоего перебора. Посмотри на проект с завершенным перебором здесь.
