Yolo Vision Shenzhen
Shenzhen
Junte-se agora

Treinar e monitorizar remotamente Ultralytics YOLOv5 utilizando o ClearML

Equipa Ultralytics

4 min de leitura

21 de outubro de 2022

Explore nossa parceria com a ClearML para obter uma experiência aprimorada Ultralytics YOLOv5 com integração perfeita de ML, rastreamento de experimentos e muito mais.

Na Ultralytics , estabelecemos parcerias comerciais com outras startups para nos ajudar a financiar a investigação e o desenvolvimento das nossas fantásticas ferramentas de código aberto, como o YOLOv5, para as manter gratuitas para todos. Este artigo pode conter links de afiliados para esses parceiros.

ClearML é o nosso mais recente parceiro: uma caixa de ferramentas de código aberto concebida para lhe poupar tempo.

Com a missão de acelerar a adoção do ML, ClearML facilita a integração do ML em qualquer produto de software e hardware existente.

Esta integração torna ainda mais simples a formação de um YOLOv5 e usar o gerenciador de experimentos ClearML para track automaticamente. Pode especificar facilmente um ID da versão do conjunto de dados ClearML como entrada de dados e este será automaticamente utilizado para treinar o seu modelo.

Leve o rastreamento de seus experimentos para o próximo nível

  • Acompanhe cada treino YOLOv5 no gestor de experiências.
  • Atribua versões e aceda facilmente aos seus dados de formação personalizados com a ferramenta integrada de atribuição de versões de dados ClearML .
  • Obtenha o melhor mAP utilizando a otimização de hiperparâmetros do ClearML .
  • Transforme seu modelo YOLOv5 recém-treinado em uma API com apenas alguns comandos usando o ClearML Serving.

Depende de você quantas dessas ferramentas você deseja usar, você pode usar apenas o gerenciador de experimentos ou encadeá-las em um pipeline impressionante.

Configurando as coisas

Para manter track de seus experimentos e dados, ClearML precisa se comunicar com um servidor. Há duas opções para isso: inscrever-se gratuitamente no ClearML Hosted Service ou configurar seu próprio servidor, veja aqui.

Até mesmo o servidor é de código aberto, então, se você estiver lidando com dados confidenciais, não há problema!

  1. Instalar o pacotepython clearml : pip install clearml
  2. Ligar o ClearML SDK ao servidor através da criação de credenciais (ir ao canto superior direito em Settings → Workspace → Create new credentials), depois executar o comando abaixo e seguir as instruções: clearml

E voilà! Você está pronto para começar...

Treinar YOLOv5 com o ClearML

Para ativar o rastreamento de experimentos ClearML , basta instalar o pacote pip do ClearML .

pip install clearml

Isto permitirá a integração com o guião de treino YOLOv5 . A partir de agora, todas as execuções de treino serão capturadas e armazenadas pelo gestor de experiências ClearML . Se quiser alterar o nome_do_projecto ou o nome_da_tarefa, vá ao nosso registo personalizado, onde pode alterá-lo: clearml.py

python train.py --img 640 --batch 16 --epochs 3 --data coco128yaml --weights yolov5s.pt --cache

Isso irá capturar:

  • Código fonte + alterações não commitadas
  • Pacotes instalados
  • (Hiper)parâmetros
  • Arquivos de modelo (use --save-period n para salvar um checkpoint a cada n épocas)
  • Saída do console
  • EscalaresmAP.5, mAP.5:0.95, precisão, recuperação, perdas, taxas de aprendizagem, ...)
  • Informações gerais, como detalhes da máquina, tempo de execução, data de criação, etc.
  • Todos os gráficos produzidos, como o correlograma de rótulos e a matriz de confusão
  • Imagens com bounding boxes por época
  • Mosaico por época
  • Imagens de validação por época

Nada mau! Agora, podemos visualizar todas essas informações na interface de usuário ClearML para obter uma visão geral do progresso do treinamento. Adicione colunas personalizadas à exibição de tabela (como, por exemplo, mAP.5) para poder classificar facilmente o modelo com melhor desempenho. Ou selecione várias experiências e compare-as diretamente!

Há ainda mais que podemos fazer com todas essas informações, como otimização de hiperparâmetros e execução remota, então continue lendo para saber como!

Gerenciamento de Versão de Dataset

Controlar as versões dos seus dados separadamente do seu código é geralmente uma boa ideia e facilita a aquisição da versão mais recente também. Este repositório oferece suporte ao fornecimento de um ID de versão do conjunto de dados e garante que os dados sejam obtidos, caso ainda não estejam disponíveis. Além disso, este fluxo de trabalho também salva o ID do conjunto de dados usado como parte dos parâmetros da tarefa, para que você sempre saiba com certeza quais dados foram usados em qual experimento!

Prepare Seu Dataset

O repositório YOLOv5 suporta uma série de conjuntos de dados diferentes, utilizando ficheiros YAML que contêm as suas informações. Por defeito, os conjuntos de dados são descarregados para a pasta ../datasets em relação à pasta raiz do repositório. Assim, se descarregou o conjunto de dados coco128 utilizando a ligação no YAML ou com os scripts fornecidos pelo yolov5, obtém esta estrutura de pastas:

...
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt

Mas este pode ser qualquer conjunto de dados que desejar. Sinta-se à vontade para usar o seu próprio, desde que mantenha esta estrutura de pastas.

Em seguida, ⚠️copy o arquivo YAML correspondente à raiz do conjunto de dados folder⚠️. Esses arquivos YAML contêm as informações que ClearML precisará para usar corretamente o conjunto de dados. Você também pode fazer isso sozinho, é claro, basta seguir a estrutura dos YAMLs de exemplo.

Basicamente, precisamos das seguintes chaves: path, train, test, val, nc, names.

...
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128yaml # ← AQUI!
|_ LICENSE
|_ README.txt

Carregar Seu Conjunto de Dados

Para colocar este conjunto de dados no ClearML como um conjunto de dados com controlo de versão, aceda à pasta de raiz do conjunto de dados e execute o seguinte comando:

cd coco128

clearml sync --project YOLOv5 --name coco128 --folder .


O comando clearml sync é, na verdade, um comando abreviado. Também pode executar estes comandos um após o outro:

# Opcionalmente, adicione --parent se quiser basear

# esta versão em outra versão do conjunto de dados, para que nenhum arquivo duplicado seja carregado!

clearml create --name coco128 --project YOLOv5

clearml add --files .

clearml close

Executar treinamento usando um conjunto de dados ClearML

Agora que tem um conjunto de dados ClearML , pode utilizá-lo de forma muito simples para treinar modelos YOLOv5 personalizados.

python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache

Otimização de Hiperparâmetros

Agora que temos nossos experimentos e versão de dados, é hora de dar uma olhada no que podemos construir em cima!

Utilizando as informações do código, os pacotes instalados e os detalhes do ambiente, a própria experiência é agora completamente reproduzível. De facto, ClearML permite clonar uma experiência e até alterar os seus parâmetros. Podemos então executá-la novamente com estes novos parâmetros de forma automática, que é basicamente o que o HPO faz!

Para executar a otimização de hiperparâmetros localmente, incluímos um script pré-fabricado para si. Basta certificar-se de que uma tarefa de treinamento foi executada pelo menos uma vez, para que ela esteja no gerenciador de experimentos ClearML .

Terá de preencher o ID desta tarefa modelo no script que se encontra em clearml.py e depois executá-la. Pode alterar task.execute_locally() para task.execute() para a colocar numa fila ClearML e fazer com que um agente remoto trabalhe nela.

# Para utilizar o optuna, instale-o primeiro, caso contrário pode alterar o optimizador para ser apenas o RandomSearch pip install optuna python clearml.py

Execução Remota (Avançado)

Executar o HPO localmente é muito útil, mas e se, em vez disso, quisermos executar as nossas experiências numa máquina remota? Talvez você tenha acesso a uma máquina GPU muito poderosa no local, ou tenha algum orçamento para usar GPUs na nuvem. É aqui que o ClearML Agent entra em ação.

Veja o que o agente pode fazer aqui:

Resumindo: cada experimento rastreado pelo gerenciador de experimentos contém informações suficientes para reproduzi-lo em uma máquina diferente (pacotes instalados, alterações não confirmadas etc.). Assim, um agente ClearML faz exatamente isso: ouve uma fila para tarefas recebidas e, quando encontra uma, recria o ambiente e executa-a enquanto continua a comunicar escalares, gráficos, etc. ao gestor de experiências.

É possível transformar qualquer máquina (uma VM na nuvem, uma máquina GPU local, seu próprio laptop) em um agente ClearML simplesmente executando:

clearml daemon --queue [--docker]

Clonagem, Edição e Enfileiramento

Com nosso agente em execução, podemos dar-lhe algum trabalho. Lembra-se da seção de HPO em que podemos clonar uma tarefa e editar os hiperparâmetros? Podemos fazer isso também a partir da interface!

🪄 Clone o experimento clicando com o botão direito do mouse sobre ele

🎯 Edite os hiperparâmetros para o que você deseja que eles sejam

⏳ Enfileire a tarefa em qualquer uma das filas clicando com o botão direito do mouse sobre ela

Executando uma Tarefa Remotamente

Agora você pode clonar uma tarefa como explicamos acima, ou simplesmente marcar seu script atual adicionando task.execute_remotely() e, na execução, ele será colocado em uma fila, para o agente começar a trabalhar!

Para executar o script de treino YOLOv5 remotamente, basta adicionar esta linha ao script training.py depois de o registador ClearML ter sido instanciado:

# ... # Loggers data_dict = None if RANK in {-1, 0}: loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance if loggers.clearml: loggers.clearml.task.execute_remotely(queue='my_queue') # <------ ADD THIS LINE # Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML data_dict = loggers.clearml.data_dict # ...

Ao executar o script de treino após esta alteração, python irá executar o script até essa linha, após o que irá empacotar o código e enviá-lo para a fila de espera!

Trabalhadores de escalonamento automático

ClearML também vem com escalonadores automáticos! Esta ferramenta irá automaticamente ligar novas máquinas remotas na nuvem da sua escolha (AWS, GCP, Azure) e transformá-las em agentes ClearML sempre que forem detectadas experiências na fila. Depois de as tarefas serem processadas, o escalonador automático desliga automaticamente as máquinas remotas e deixa de pagar! Veja o vídeo de introdução aos auto scalers abaixo.

Alguma pergunta? Junte-se à nossa comunidade e deixe sua pergunta hoje!

Vamos construir o futuro
da IA juntos!

Comece sua jornada com o futuro do aprendizado de máquina

Comece gratuitamente