
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_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 для --batch 16), поэтому частоту журналирования нужно настроить соответственно.
Вот пример проекта с использованием панели.
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, точность, полноту и 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 Optimizer#
YOLOv5 также интегрирован с оптимизатором Comet, что упрощает визуализацию перебора гиперпараметров в интерфейсе Comet.
Настройка перебора с помощью оптимизатора#
Чтобы настроить 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 предлагает несколько способов визуализировать результаты перебора. Посмотри на проект с завершённым перебором.

Часто задаваемые вопросы#
Создай бесплатный аккаунт на comet.com, открой настройки аккаунта и скопируй API-ключ. Экспортируй его как
COMET_API_KEYили сохрани в файл.comet.configрядом сtrain.py.Да. Задай
COMET_MODE=offline, чтобы сохранить эксперимент в локальном архиве, а затем загрузи его с помощьюcomet upload path/to/archive.zip.Запись контрольных точек по умолчанию отключена. Передай
--save-period 1(или другой интервал) вtrain.py, и каждая сохранённая контрольная точка будет загружаться в эксперимент.Скопируй путь запуска из интерфейса Comet и начни обучение с
python train.py --resume "comet://WORKSPACE/PROJECT/EXPERIMENT_ID". YOLOv5 восстановит контрольную точку, гиперпараметры и все артефакты набора данных Comet, а затем продолжит вести журнал в том же эксперименте.