Treinar e monitorizar remotamente o Ultralytics YOLOv5 utilizando o ClearML

Equipa Ultralytics

4 min ler

21 de outubro de 2022

Explore a nossa parceria com a ClearML para obter uma experiência Ultrlaytics YOLOv5 melhorada com uma integração ML perfeita, rastreio de experiências 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.

O 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, o ClearML facilita a integração do ML em qualquer produto de software e hardware existente.

Esta integração simplifica ainda mais o treino de um modelo YOLOv5 e a utilização do gestor de experiências ClearML para o acompanhar 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 seu acompanhamento de experiências para o nível seguinte

  • 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.

Cabe-lhe a si decidir quantas destas ferramentas quer utilizar, pode limitar-se ao gestor de experiências ou encadeá-las todas num pipeline impressionante.

Configurar as coisas

Para manter o controle de seus experimentos e dados, o 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é o servidor é de código aberto, por isso, se estiver a lidar com dados sensíveis, isso não é problema!

  1. Instalar o pacote python clearml: pip install clearml
  2. Ligar o ClearML SDK ao servidor através da criação de credenciais (ir ao topo direito do ecrã para Settings -> Workspace -> Create new credentials), depois executar o comando abaixo e seguir as instruções: clearml-init

E voilá! Está pronto para começar...

Treinar o YOLOv5 com o ClearML

Para ativar o rastreamento de experimentos do 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: utils/loggers/clearml/clearml_utils.py

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

Isto irá capturar:

  • Código fonte + alterações não confirmadas
  • Pacotes instalados
  • (Hiper)parâmetros
  • Ficheiros de modelo (utilize --save-period n para guardar um ponto de controlo a cada n épocas)
  • Saída da consola
  • Escalares (mAP_0.5, mAP_0.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 etiquetas e a matriz de confusão
  • Imagens com caixas delimitadoras 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 do ClearML para obter uma visão geral do progresso do treinamento. Adicione colunas personalizadas à exibição de tabela (como, por exemplo, mAP_0.5) para poder classificar facilmente o modelo com melhor desempenho. Ou selecione várias experiências e compare-as diretamente!

Há ainda mais coisas que podemos fazer com toda esta informação, como a otimização de hiperparâmetros e a execução remota, por isso continue a ler para saber como!

Gestão de versões de conjuntos de dados

O facto de se versionar os dados separadamente do código é geralmente uma boa ideia e facilita também a aquisição da versão mais recente. Este repositório suporta o fornecimento de um ID de versão do conjunto de dados e certificar-se-á de que obtém os dados se ainda não estiverem disponíveis. Para além disso, este fluxo de trabalho também guarda o ID do conjunto de dados utilizado como parte dos parâmetros da tarefa, pelo que saberá sempre com certeza que dados foram utilizados em que experiência!

Dados, Ultralytics YOLOv5 e ClearML

Preparar o conjunto de dados

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 pode ser qualquer conjunto de dados que deseje. Pode utilizar o seu próprio conjunto de dados, desde que respeite 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 o 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
        |_ coco128.yaml # <---- HERE!
        |_ LICENSE
        |_ README.txt

Carregar o seu conjunto de dados

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

cd coco128

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


O comando clearml-data 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 noutra versão do conjunto de dados, para que não sejam carregados ficheiros duplicados!

clearml-data create --name coco128 --project YOLOv5/p>

clearml-data add --files .

clearml-data 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 as nossas experiências e versão de dados, é altura de ver o 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, o 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, o 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 do ClearML.

Terá de preencher o ID desta tarefa modelo no script que se encontra em utils/loggers/clearml/hpo.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 utils/loggers/clearml/hpo.py

HPO, Ultralytics YOLOv5 e ClearML

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-agent daemon --queue [--docker]

Clonagem, edição e colocação em fila

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

🪄 Clonar a experiência clicando com o botão direito do rato

🎯 Editar os hiperparâmetros de acordo com o que pretende que eles sejam

Colocar a tarefa em fila de espera em qualquer uma das filas de espera, clicando com o botão direito do rato

Enqueue, Ultralytics YOLOv5 e ClearML

Executando uma tarefa remotamente

Agora pode clonar uma tarefa como explicámos acima, ou simplesmente marcar o seu script atual adicionando task.execute_remotely() e, na execução, será colocado numa 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, o python irá executar o script até essa linha, após a qual irá empacotar o código e enviá-lo para a fila de espera!

Escalonamento automático de trabalhadores

O 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. Assim que as tarefas forem processadas, o redimensionador automático encerrará automaticamente as máquinas remotas e deixará de pagar! Veja o vídeo de introdução aos auto scalers abaixo.

Tem alguma pergunta? Junte-se à nossa comunidade e deixe a sua pergunta hoje mesmo!

Vamos construir juntos o futuro
da IA!

Comece a sua viagem com o futuro da aprendizagem automática

Comece gratuitamente
Ligação copiada para a área de transferência