
YOLOv5 com Comet
Este guia cobrirá como usar o YOLOv5 com o Comet, uma ferramenta poderosa para rastrear, comparar e otimizar experimentos de aprendizado de máquina.
Sobre o Comet
O Comet cria ferramentas que ajudam cientistas de dados, engenheiros e líderes de equipe a acelerar e otimizar modelos de aprendizado de máquina e aprendizado profundo.
Rastreie e visualize métricas de modelos em tempo real, salve seus hiperparâmetros, conjuntos de dados e checkpoints de modelos, e visualize as predições do seu modelo com os Painéis Personalizados do Comet! O Comet garante que você nunca perca o controle do seu trabalho e torna fácil compartilhar resultados e colaborar entre equipes de todos os tamanhos!
Primeiros passos
Instale o Comet
pip install comet_mlConfigure as Credenciais do Comet
Existem duas maneiras de configurar o Comet com o YOLOv5.
Você pode definir suas credenciais através de variáveis de ambiente:
Variáveis de Ambiente
export COMET_API_KEY=YOUR_API_KEY
export COMET_PROJECT_NAME=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'Ou crie um arquivo .comet.config no seu diretório de trabalho e defina suas credenciais lá:
Arquivo de Configuração do Comet
[comet]
api_key=YOUR_API_KEY
project_name=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'Execute o Script de Treinamento
# Train YOLOv5s on COCO128 for 5 epochs
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.ptÉ isso! O Comet registrará automaticamente seus hiperparâmetros, argumentos da linha de comando e métricas de treinamento e validação. Você pode visualizar e analisar suas execuções na interface do Comet.

Experimente um Exemplo!
Confira um exemplo de uma execução concluída aqui.
Ou melhor ainda, experimente você mesmo neste Notebook do Colab:
Registre Automaticamente
Por padrão, o Comet registrará os seguintes itens:
Métricas
- Perda de Caixa (Box Loss), Perda de Objeto (Object Loss), Perda de Classificação para os dados de treinamento e validação
- Métricas mAP_0.5, mAP_0.5:0.95 para os dados de validação
- Precisão e Revocação para os dados de validação
Parâmetros
- Hiperparâmetros do Modelo
- Todos os parâmetros passados através das opções da linha de comando
Visualizações
- Matriz de Confusão das predições do modelo nos dados de validação
- Gráficos para as curvas PR e F1 em todas as classes
- Correlograma dos Rótulos de Classe
Configure o Registro do Comet
O Comet pode ser configurado para registrar dados adicionais através de flags de linha de comando passadas para o script de treinamento ou através de variáveis de ambiente:
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 predictionsRegistrando Checkpoints com o Comet
O registro de modelos no Comet é desativado por padrão. Para ativá-lo, passe o argumento save-period para o script de treinamento. Isso salvará os checkpoints registrados no Comet com base no valor de intervalo fornecido pelo save-period:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1Registrando Predições do Modelo
Por padrão, as predições do modelo (imagens, rótulos de verdade fundamental e caixas delimitadoras) serão registradas no Comet.
Você pode controlar a frequência das predições registradas e as imagens associadas passando o argumento de linha de comando bbox_interval. As predições podem ser visualizadas usando o Painel Personalizado de Detecção de Objetos do Comet. Esta frequência corresponde a cada N-ésimo lote de dados por época. No exemplo abaixo, estamos registrando cada 2º lote de dados para cada época.
Nota: O carregador de dados de validação do YOLOv5 usará por padrão um tamanho de lote de 32, então você terá que definir a frequência de registro de acordo.
Aqui está um exemplo de projeto usando o Painel
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 2Controlando o número de Imagens de Predição registradas no Comet
Ao registrar predições do YOLOv5, o Comet registrará as imagens associadas a cada conjunto de predições. Por padrão, um máximo de 100 imagens de validação são registradas. Você pode aumentar ou diminuir este número usando a variável de ambiente 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 1Registrando Métricas por Nível de Classe
Use a variável de ambiente COMET_LOG_PER_CLASS_METRICS para registrar mAP, precisão, revocação e f1 para cada classe:
env COMET_LOG_PER_CLASS_METRICS=true python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.ptFazendo upload de um Conjunto de Dados para os Artefatos do Comet
Se você quiser armazenar seus dados usando Artefatos do Comet, você pode fazer isso usando a flag upload_dataset.
O conjunto de dados deve ser organizado conforme descrito na documentação do YOLOv5. O arquivo yaml de configuração do conjunto de dados deve seguir o mesmo formato que o arquivo coco128.yaml.
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_datasetVocê pode encontrar o conjunto de dados carregado na aba Artefatos no seu Workspace do Comet:

Você pode visualizar os dados diretamente na interface do Comet:

Os artefatos são versionados e também suportam a adição de metadados sobre o conjunto de dados. O Comet registrará automaticamente os metadados do seu arquivo yaml de conjunto de dados:

Usando um Artefato salvo
Se você quiser usar um conjunto de dados dos Artefatos do Comet, defina a variável path no seu arquivo yaml de conjunto de dados para apontar para a seguinte URL de recurso de Artefato:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"Em seguida, passe este arquivo para o seu script de treinamento da seguinte forma:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data artifact.yaml \
--weights yolov5s.ptOs Artefatos também permitem que você rastreie a linhagem dos dados à medida que eles fluem através do seu fluxo de trabalho de experimentação. Aqui você pode ver um gráfico que mostra todos os experimentos que usaram seu conjunto de dados carregado:

Retomando uma Execução de Treinamento
Se sua execução de treinamento for interrompida por qualquer motivo, por exemplo, conexão com a internet interrompida, você pode retomar a execução usando a flag resume e o Caminho de Execução (Run Path) do Comet.
The Run Path has the following format comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID.
Isso restaurará a execução ao seu estado antes da interrupção, o que inclui restaurar o modelo a partir de um checkpoint, restaurar todos os hiperparâmetros e argumentos de treinamento, e baixar os Artefatos de conjunto de dados do Comet se eles foram usados na execução original. A execução retomada continuará registrando na Experiência existente na interface do Comet:
python train.py \
--resume "comet://YOUR_RUN_PATH"Busca de Hiperparâmetros com o Otimizador do Comet
O YOLOv5 também está integrado com o Otimizador do Comet, tornando simples visualizar buscas de hiperparâmetros na interface do Comet.
Configurando uma Busca do Otimizador
Para configurar o Otimizador do Comet, você terá que criar um arquivo JSON com as informações sobre a busca. Um arquivo de exemplo foi fornecido em utils/loggers/comet/optimizer_config.json:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json"O script hpo.py aceita os mesmos argumentos que o train.py. Se você deseja passar argumentos adicionais para sua busca, simplesmente adicione-os após o script:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json" \
--save-period 1 \
--bbox_interval 1Visualizando Resultados
O Comet oferece várias maneiras de visualizar os resultados da sua busca. Dê uma olhada em um projeto com uma busca concluída aqui.
