Skip to main content

Логотип Comet ML для отслеживания экспериментов в машинном обучении

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.

Дашборд Comet, отображающий метрики обучения YOLOv5 и отслеживание экспериментов

Попробуй пример!

Посмотри на пример завершенного запуска здесь.

Или, что еще лучше, попробуй сделать это самостоятельно в этом Colab Notebook:

Открыть в Colab

Автоматическое логирование

По умолчанию Comet записывает следующие данные:

Метрики

Параметры

  • Гиперпараметры модели
  • Все параметры, переданные через опции командной строки

Визуализации

  • Матрица ошибок (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:

Предварительный просмотр набора данных и история версий в Comet

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

Метаданные артефактов Comet

Использование сохраненного артефакта

Если ты хочешь использовать набор данных из 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

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

График происхождения артефактов Comet

Возобновление обучения

Если процесс обучения прервался по какой-либо причине, например, из-за сбоя интернет-соединения, ты можешь возобновить его, используя флаг 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 предоставляет несколько способов визуализации результатов твоего перебора. Посмотри на проект с завершенным перебором здесь.

Визуализация гиперпараметров Comet

Комментарии