
YOLOv5 с Comet#
В этом руководстве рассказывается, как использовать YOLOv5 с Comet — мощным инструментом для отслеживания, сравнения и оптимизации экспериментов машинного обучения.
О Comet#
Comet создает инструменты, которые помогают специалистам по обработке данных, инженерам и руководителям команд ускорять и оптимизировать модели машинного обучения и глубокого обучения.
Отслеживай и визуализируй метрики модели в реальном времени, сохраняй гиперпараметры, датасеты и контрольные точки модели, а также визуализируй предсказания модели с помощью пользовательских панелей Comet! 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:
Автоматическое журналирование#
По умолчанию Comet будет сохранять следующие данные:
Метрики#
- Потери на ограничивающих рамках, потери на объектах и потери классификации для валидационных данных
- Метрики mAP_0.5 и mAP_0.5:0.95 для валидационных данных
- Точность и полнота для валидационных данных
Параметры#
- Гиперпараметры модели
- Все параметры, переданные через параметры командной строки
Визуализации#
- Матрица ошибок предсказаний модели на валидационных данных
- Графики 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Журналирование контрольных точек с 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Журналирование предсказаний модели#
По умолчанию предсказания модели (изображения, истинные метки и ограничивающие рамки) будут сохраняться в Comet.
Можно управлять частотой журналирования предсказаний и связанных с ними изображений с помощью аргумента командной строки bbox_interval. Предсказания можно визуализировать с помощью пользовательской панели Comet «Обнаружение объектов». Эта частота соответствует каждому N-му пакету данных в рамках эпохи. В примере ниже данные сохраняются для каждого второго пакета в каждой эпохе.
Примечание: загрузчик валидационных данных 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#
Если ты хочешь хранить данные с помощью артефактов Comet, это можно сделать с помощью флага upload_dataset.
Датасет должен быть организован так, как описано в документации YOLOv5. Файл конфигурации датасета 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:

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