Salta para o conteúdo

Treino de modelos com Ultralytics YOLO

Ultralytics YOLO ecossistema e integrações

Introdução

O treinamento de um modelo de aprendizado profundo envolve a alimentação de dados e o ajuste de seus parâmetros para que ele possa fazer previsões precisas. O modo de treino em Ultralytics YOLOv8 foi concebido para um treino eficaz e eficiente de modelos de deteção de objectos, utilizando plenamente as capacidades do hardware moderno. Este guia tem como objetivo cobrir todos os detalhes necessários para começares a treinar os teus próprios modelos utilizando o conjunto robusto de funcionalidades do YOLOv8.



Observa: Como treinar um modelo YOLOv8 no teu conjunto de dados personalizado no Google Colab.

Porquê escolher Ultralytics YOLO para a formação?

Eis algumas razões convincentes para optares pelo modo Train do YOLOv8:

  • Eficiência: Tira o máximo partido do teu hardware, quer estejas numa configuração de uma única GPU ou a escalar entre várias GPUs.
  • Versatilidade: Treina em conjuntos de dados personalizados, para além dos prontamente disponíveis, como COCO, VOC e ImageNet.
  • Fácil de utilizar: Interfaces CLI e Python simples mas poderosas para uma experiência de formação direta.
  • Flexibilidade de hiperparâmetros: Uma ampla gama de hiperparâmetros personalizáveis para ajustar o desempenho do modelo.

Principais características do modo comboio

Apresentamos em seguida algumas características notáveis do modo comboio do YOLOv8:

  • Descarga automática de conjuntos de dados: Os conjuntos de dados padrão como COCO, VOC e ImageNet são descarregados automaticamente na primeira utilização.
  • Suporte multi-GPU: Dimensiona os teus esforços de formação de forma integrada em várias GPUs para acelerar o processo.
  • Configuração de hiperparâmetros: A opção de modificar hiperparâmetros por meio de arquivos de configuração YAML ou argumentos de CLI .
  • Visualização e monitorização: Acompanha em tempo real as métricas de formação e visualiza o processo de aprendizagem para obter melhores informações.

Dica

  • YOLOv8 conjuntos de dados como COCO, VOC, ImageNet e muitos outros são descarregados automaticamente na primeira utilização, ou seja yolo train data=coco.yaml

Exemplos de utilização

Treina YOLOv8n no conjunto de dados COCO8 para 100 épocas com o tamanho de imagem 640. O dispositivo de treino pode ser especificado utilizando a opção device argumento. Se não for passado nenhum argumento GPU device=0 será utilizado se estiver disponível, caso contrário device='cpu' será utilizado. Vê a secção Argumentos abaixo para uma lista completa de argumentos de treino.

Exemplo de treinamento com uma única GPU e CPU

O dispositivo é determinado automaticamente. Se estiver disponível uma GPU, esta será utilizada; caso contrário, o treino será iniciado no CPU.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco8.yaml', epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

Formação Multi-GPU

O treinamento multi-GPU permite uma utilização mais eficiente dos recursos de hardware disponíveis, distribuindo a carga de treinamento em várias GPUs. Esta funcionalidade está disponível através da API Python e da interface de linha de comandos. Para ativar o treino multi-GPU, especifica as IDs de dispositivos GPU que pretendes utilizar.

Exemplo de treinamento multi-GPU

Para treinar com 2 GPUs, dispositivos CUDA 0 e 1, usa os seguintes comandos. Expande para GPUs adicionais conforme necessário.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device=[0, 1])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

Formação Apple M1 e M2 MPS

Com o suporte para os chips Apple M1 e M2 integrados nos modelos Ultralytics YOLO , é agora possível treinar os teus modelos em dispositivos que utilizam a poderosa estrutura Metal Performance Shaders (MPS). O MPS oferece uma forma de alto desempenho de executar tarefas de computação e processamento de imagens no silício personalizado da Apple.

Para ativar a formação nos chips Apple M1 e M2, deves especificar 'mps' como o teu dispositivo quando iniciares o processo de formação. Segue-se um exemplo de como podes fazer isto em Python e através da linha de comandos:

Exemplo de formação MPS

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device='mps')
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=mps

Enquanto aproveita o poder computacional dos chips M1/M2, isso permite um processamento mais eficiente das tarefas de treinamento. Para obter orientações mais detalhadas e opções de configuração avançadas, consulta a documentação doPyTorch MPS.

Retomar as formações interrompidas

Retomar o treinamento a partir de um estado salvo anteriormente é um recurso crucial ao trabalhar com modelos de aprendizado profundo. Isto pode ser útil em vários cenários, como quando o processo de treino foi inesperadamente interrompido, ou quando desejas continuar a treinar um modelo com novos dados ou para mais épocas.

Quando o treinamento é retomado, o Ultralytics YOLO carrega os pesos do último modelo salvo e também restaura o estado do otimizador, o agendador da taxa de aprendizado e o número da época. Isto permite-te continuar o processo de treino sem problemas a partir do ponto onde foi deixado.

Podes retomar facilmente a formação em Ultralytics YOLO definindo o resume argumento para True ao chamar o train e especificando o caminho para o método .pt ficheiro que contém os pesos do modelo parcialmente treinado.

Segue-se um exemplo de como retomar uma formação interrompida utilizando Python e através da linha de comandos:

Exemplo de formação de currículo

from ultralytics import YOLO

# Load a model
model = YOLO('path/to/last.pt')  # load a partially trained model

# Resume training
results = model.train(resume=True)
# Resume an interrupted training
yolo train resume model=path/to/last.pt

Por definição resume=True, o train continua a treinar a partir do ponto em que parou, utilizando o estado armazenado no ficheiro 'path/to/last.pt'. Se o ficheiro resume é omitido ou definido como False, o train A função de "iniciar" inicia uma nova sessão de formação.

Lembra-te que os pontos de controlo são guardados no final de cada época por defeito, ou num intervalo fixo utilizando a opção save_period por isso, tens de completar pelo menos 1 época para retomar uma corrida de treino.

Definições do comboio

As definições de treino para os modelos YOLO englobam vários hiperparâmetros e configurações utilizados durante o processo de treino. Estas definições influenciam o desempenho, a velocidade e a precisão do modelo. As principais definições de treino incluem o tamanho do lote, a taxa de aprendizagem, o momento e a diminuição do peso. Além disso, a escolha do optimizador, a função de perda e a composição do conjunto de dados de treino podem ter impacto no processo de treino. O ajuste cuidadoso e a experimentação com estas definições são cruciais para otimizar o desempenho.

Argumenta Predefinição Descrição
model None Especifica o arquivo de modelo para treinamento. Aceita um caminho para um arquivo .pt modelo pré-treinado ou um .yaml ficheiro de configuração. Essencial para definir a estrutura do modelo ou inicializar os pesos.
data None Caminho para o ficheiro de configuração do conjunto de dados (por exemplo, coco8.yaml). Este ficheiro contém parâmetros específicos do conjunto de dados, incluindo caminhos para os dados de treino e validação, nomes de classes e número de classes.
epochs 100 Número total de épocas de treino. Cada época representa uma passagem completa por todo o conjunto de dados. O ajuste deste valor pode afetar a duração do treino e o desempenho do modelo.
time None Tempo máximo de formação em horas. Se estiver definido, substitui a opção epochs permitindo que a formação pare automaticamente após a duração especificada. Útil para cenários de formação com restrições de tempo.
patience 100 Número de épocas a aguardar sem melhoria nas métricas de validação antes de parar o treino antecipadamente. Ajuda a evitar o sobreajuste, interrompendo o treino quando o desempenho atinge um patamar.
batch 16 Tamanho do lote para treino, indicando quantas imagens são processadas antes de os parâmetros internos do modelo serem actualizados. AutoBatch (batch=-1) ajusta dinamicamente o tamanho do lote com base na disponibilidade de memória da GPU.
imgsz 640 Dimensão da imagem alvo para treino. Todas as imagens são redimensionadas para esta dimensão antes de serem introduzidas no modelo. Afecta a precisão do modelo e a complexidade computacional.
save True Permite guardar os pontos de verificação do treino e os pesos finais do modelo. É útil para retomar o treino ou a implementação do modelo.
save_period -1 Frequência de gravação dos pontos de controlo do modelo, especificada em épocas. Um valor de -1 desactiva esta funcionalidade. Útil para guardar modelos provisórios durante longas sessões de treino.
cache False Ativa a colocação em cache das imagens do conjunto de dados na memória (True/ram), no disco (disk), ou desactiva-a (False). Melhora a velocidade de treino reduzindo as E/S do disco à custa de uma maior utilização da memória.
device None Especifica o(s) dispositivo(s) computacional(ais) para a formação: uma única GPU (device=0), várias GPUs (device=0,1), CPU (device=cpu), ou MPS para silício Apple (device=mps).
workers 8 Número de threads de trabalho para carregamento de dados (por RANK se estiver a treinar com várias GPUs). Influencia a velocidade do pré-processamento de dados e a alimentação do modelo, especialmente útil em configurações multi-GPU.
project None Nome do diretório do projeto onde são guardados os resultados do treino. Permite o armazenamento organizado de diferentes experiências.
name None Nome da ação de formação. Utilizado para criar uma subdiretoria dentro da pasta do projeto, onde são armazenados os registos e os resultados da formação.
exist_ok False Se Verdadeiro, permite a substituição de um diretório de projeto/nome existente. Útil para experimentação iterativa sem a necessidade de limpar manualmente as saídas anteriores.
pretrained True Determina se deve iniciar o treino a partir de um modelo pré-treinado. Pode ser um valor booleano ou um caminho de cadeia de caracteres para um modelo específico a partir do qual carregar pesos. Melhora a eficiência do treinamento e o desempenho do modelo.
optimizer 'auto' Escolhe o optimizador para a formação. As opções incluem SGD, Adam, AdamW, NAdam, RAdam, RMSProp etc., ou auto para seleção automática com base na configuração do modelo. Afecta a velocidade de convergência e a estabilidade.
verbose False Ativa a saída detalhada durante o treino, fornecendo registos detalhados e actualizações de progresso. É útil para depurar e monitorizar de perto o processo de formação.
seed 0 Define a semente aleatória para o treino, garantindo a reprodutibilidade dos resultados entre execuções com as mesmas configurações.
deterministic True Força a utilização de algoritmos determinísticos, garantindo a reprodutibilidade, mas pode afetar o desempenho e a velocidade devido à restrição de algoritmos não determinísticos.
single_cls False Trata todas as classes em conjuntos de dados multi-classe como uma única classe durante o treino. Útil para tarefas de classificação binária ou quando se concentra na presença de objectos em vez de na classificação.
rect False Permite a formação retangular, optimizando a composição do lote para um preenchimento mínimo. Pode melhorar a eficiência e a velocidade, mas pode afetar a precisão do modelo.
cos_lr False Utiliza um programador de taxa de aprendizagem cosseno, ajustando a taxa de aprendizagem seguindo uma curva cosseno ao longo de épocas. Ajuda a gerir a taxa de aprendizagem para uma melhor convergência.
close_mosaic 10 Desactiva o aumento dos dados do mosaico nas últimas N épocas para estabilizar o treino antes da conclusão. Definir como 0 desactiva esta funcionalidade.
resume False Reinicia o treinamento a partir do último ponto de verificação salvo. Carrega automaticamente os pesos do modelo, o estado do otimizador e a contagem de épocas, continuando o treinamento sem problemas.
amp True Permite a formação automática de precisão mista (AMP), reduzindo a utilização de memória e possivelmente acelerando a formação com um impacto mínimo na precisão.
fraction 1.0 Especifica a fração do conjunto de dados a utilizar para o treino. Permite o treino num subconjunto do conjunto de dados completo, útil para experiências ou quando os recursos são limitados.
profile False Permite a criação de perfis de ONNX e TensorRT velocidades durante o treino, útil para otimizar a implementação do modelo.
freeze None Congela as primeiras N camadas do modelo ou camadas especificadas por índice, reduzindo o número de parâmetros treináveis. Útil para ajuste fino ou aprendizagem por transferência.
lr0 0.01 Taxa de aprendizagem inicial (i.e. SGD=1E-2, Adam=1E-3) . O ajuste deste valor é crucial para o processo de otimização, influenciando a rapidez com que os pesos do modelo são actualizados.
lrf 0.01 Taxa de aprendizagem final como fração da taxa inicial = (lr0 * lrf), utilizado em conjunto com programadores para ajustar a taxa de aprendizagem ao longo do tempo.
momentum 0.937 Fator de momento para SGD ou beta1 para optimizadores Adam, que influencia a incorporação de gradientes passados na atualização atual.
weight_decay 0.0005 Termo de regularização L2, penalizando pesos grandes para evitar o sobreajuste.
warmup_epochs 3.0 Número de épocas para o aquecimento da taxa de aprendizagem, aumentando gradualmente a taxa de aprendizagem de um valor baixo para a taxa de aprendizagem inicial para estabilizar a formação numa fase inicial.
warmup_momentum 0.8 Momento inicial para a fase de aquecimento, ajustando-se gradualmente ao momento definido durante o período de aquecimento.
warmup_bias_lr 0.1 Taxa de aprendizagem para parâmetros de polarização durante a fase de aquecimento, ajudando a estabilizar o treinamento do modelo nas épocas iniciais.
box 7.5 Peso do componente de perda de caixa na função de perda, influenciando a importância dada à previsão exacta das coordenadas da caixa delimitadora.
cls 0.5 Peso da perda de classificação na função de perda total, afectando a importância da previsão correcta da classe em relação a outros componentes.
dfl 1.5 Peso da perda focal da distribuição, utilizado em determinadas versões de YOLO para uma classificação fina.
pose 12.0 Peso da perda de pose nos modelos treinados para a estimativa de pose, influenciando a ênfase na previsão exacta dos pontos-chave da pose.
kobj 2.0 Peso da perda de objetividade do ponto-chave nos modelos de estimação da pose, equilibrando a confiança na deteção com a precisão da pose.
label_smoothing 0.0 Aplica a suavização de rótulos, suavizando os rótulos rígidos para uma mistura do rótulo alvo e uma distribuição uniforme sobre os rótulos, pode melhorar a generalização.
nbs 64 Tamanho nominal do lote para normalização da perda.
overlap_mask True Determina se as máscaras de segmentação se devem sobrepor durante o treino, aplicável em tarefas de segmentação de instâncias.
mask_ratio 4 Rácio de downsample para máscaras de segmentação, que afecta a resolução das máscaras utilizadas durante o treino.
dropout 0.0 Taxa de desistência para regularização em tarefas de classificação, evitando o sobreajuste através da omissão aleatória de unidades durante o treino.
val True Permite a validação durante o treino, permitindo a avaliação periódica do desempenho do modelo num conjunto de dados separado.
plots False Gera e guarda gráficos de métricas de treino e validação, bem como exemplos de previsão, fornecendo informações visuais sobre o desempenho do modelo e a progressão da aprendizagem.

Definições de aumento e hiperparâmetros

As técnicas de aumento são essenciais para melhorar a robustez e o desempenho dos modelos YOLO , introduzindo variabilidade nos dados de treino, ajudando o modelo a generalizar melhor para dados não vistos. A tabela seguinte descreve o objetivo e o efeito de cada argumento de aumento:

Argumenta Tipo Predefinição Alcance Descrição
hsv_h float 0.015 0.0 - 1.0 Ajusta a tonalidade da imagem por uma fração da roda de cores, introduzindo variabilidade de cores. Ajuda o modelo a generalizar em diferentes condições de iluminação.
hsv_s float 0.7 0.0 - 1.0 Altera a saturação da imagem por uma fração, afectando a intensidade das cores. Útil para simular diferentes condições ambientais.
hsv_v float 0.4 0.0 - 1.0 Modifica o valor (brilho) da imagem por uma fração, ajudando o modelo a ter um bom desempenho em várias condições de iluminação.
degrees float 0.0 -180 - +180 Roda a imagem aleatoriamente dentro do intervalo de graus especificado, melhorando a capacidade do modelo para reconhecer objectos em várias orientações.
translate float 0.1 0.0 - 1.0 Traduz a imagem horizontal e verticalmente por uma fração do tamanho da imagem, ajudando a aprender a detetar objectos parcialmente visíveis.
scale float 0.5 >=0.0 Escala a imagem por um fator de ganho, simulando objectos a diferentes distâncias da câmara.
shear float 0.0 -180 - +180 Corta a imagem num grau especificado, imitando o efeito de objectos vistos de ângulos diferentes.
perspective float 0.0 0.0 - 0.001 Aplica uma transformação de perspetiva aleatória à imagem, melhorando a capacidade do modelo para compreender objectos no espaço 3D.
flipud float 0.0 0.0 - 1.0 Vira a imagem ao contrário com a probabilidade especificada, aumentando a variabilidade dos dados sem afetar as características do objeto.
fliplr float 0.5 0.0 - 1.0 Inverte a imagem da esquerda para a direita com a probabilidade especificada, útil para aprender objectos simétricos e aumentar a diversidade do conjunto de dados.
bgr float 0.0 0.0 - 1.0 Inverte os canais de imagem de RGB para BGR com a probabilidade especificada, útil para aumentar a robustez da ordenação incorrecta dos canais.
mosaic float 1.0 0.0 - 1.0 Combina quatro imagens de treino numa só, simulando diferentes composições de cenas e interacções de objectos. Altamente eficaz para a compreensão de cenas complexas.
mixup float 0.0 0.0 - 1.0 Mistura duas imagens e seus rótulos, criando uma imagem composta. Melhora a capacidade de generalização do modelo, introduzindo ruído de etiqueta e variabilidade visual.
copy_paste float 0.0 0.0 - 1.0 Copia objectos de uma imagem e cola-os noutra, útil para aumentar as instâncias de objectos e aprender a oclusão de objectos.
auto_augment str randaugment - Aplica automaticamente uma política de aumento predefinida (randaugment, autoaugment, augmix), optimizando as tarefas de classificação através da diversificação das características visuais.
erasing float 0.4 0.0 - 0.9 Apaga aleatoriamente uma parte da imagem durante o treino de classificação, encorajando o modelo a concentrar-se em características menos óbvias para o reconhecimento.
crop_fraction float 1.0 0.1 - 1.0 Corta a imagem de classificação para uma fração do seu tamanho para enfatizar as características centrais e adaptar-se às escalas dos objectos, reduzindo as distracções de fundo.

Estas definições podem ser ajustadas para satisfazer os requisitos específicos do conjunto de dados e da tarefa em causa. A experimentação de valores diferentes pode ajudar a encontrar a estratégia de aumento ideal que conduz ao melhor desempenho do modelo.

Informação

Para mais informações sobre as operações de reforço da formação, ver a secção de referência.

Registo

Ao treinar um modelo YOLOv8 , pode ser útil acompanhar o desempenho do modelo ao longo do tempo. É aqui que o registo entra em jogo. Ultralytics' YOLO fornece suporte para três tipos de registadores - Comet, ClearML, e TensorBoard.

Para usar um registrador, seleciona-o no menu suspenso no trecho de código acima e executa-o. O registador escolhido será instalado e inicializado.

Comet

Comet é uma plataforma que permite aos cientistas de dados e aos programadores acompanhar, comparar, explicar e otimizar experiências e modelos. Fornece funcionalidades como métricas em tempo real, diferenças de código e rastreio de hiperparâmetros.

Para utilizar Comet:

Exemplo

# pip install comet_ml
import comet_ml

comet_ml.init()

Não te esqueças de iniciar sessão na tua conta Comet no respetivo sítio Web e de obter a tua chave API. Terás de a adicionar às tuas variáveis de ambiente ou ao teu script para registar as tuas experiências.

ClearML

ClearML é uma plataforma de código aberto que automatiza o acompanhamento de experiências e ajuda na partilha eficiente de recursos. Foi concebida para ajudar as equipas a gerir, executar e reproduzir o seu trabalho de ML de forma mais eficiente.

Para utilizar ClearML:

Exemplo

# pip install clearml
import clearml

clearml.browser_login()

Depois de executares este script, terás de iniciar sessão na tua conta ClearML no browser e autenticar a tua sessão.

TensorBoard

O TensorBoard é um conjunto de ferramentas de visualização para TensorFlow. Permite-te visualizar o teu gráfico TensorFlow , traçar métricas quantitativas sobre a execução do teu gráfico e mostrar dados adicionais como imagens que passam por ele.

Para utilizar o TensorBoard no Google Colab:

Exemplo

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Para utilizar o TensorBoard localmente, executa o comando abaixo e visualiza os resultados em http://localhost:6006/.

Exemplo

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Isto irá carregar o TensorBoard e direccioná-lo para o diretório onde os teus registos de treino estão guardados.

Depois de configurares o teu registador, podes prosseguir com o treino do teu modelo. Todas as métricas de treino serão automaticamente registadas na plataforma escolhida e podes aceder a esses registos para monitorizar o desempenho do teu modelo ao longo do tempo, comparar diferentes modelos e identificar áreas de melhoria.



Criado em 2023-11-12, Atualizado em 2024-04-23
Autores: dependabot[bot] (1), glenn-jocher (10), fcakyon (1), Laughing-q (2), Burhan-Q (1)

Comentários