Salta para o conte√ļdo

Resolução de problemas comuns em YOLO

YOLO Imagem de problemas comuns

Introdução

Este guia serve como uma ajuda abrangente para a resolução de problemas comuns encontrados ao trabalhar com YOLOv8 nos teus projectos Ultralytics . Navegar por estes problemas pode ser fácil com a orientação certa, garantindo que os teus projectos permanecem no caminho certo sem atrasos desnecessários.

Problemas comuns

Erros de instalação

Os erros de instala√ß√£o podem surgir devido a v√°rias raz√Ķes, tais como vers√Ķes incompat√≠veis, depend√™ncias em falta ou configura√ß√Ķes de ambiente incorrectas. Primeiro, certifica-te de que est√°s a fazer o seguinte:

  • Est√°s a utilizar Python 3.8 ou posterior, conforme recomendado.

  • Certifica-te de que tens a vers√£o correcta de PyTorch (1.8 ou posterior) instalada.

  • Considera a possibilidade de utilizar ambientes virtuais para evitar conflitos.

  • Segue passo a passo o guia de instala√ß√£o oficial.

Al√©m disso, aqui est√£o alguns problemas comuns de instala√ß√£o que os utilizadores encontraram, juntamente com as respectivas solu√ß√Ķes:

  • Erros de importa√ß√£o ou problemas de depend√™ncia - Se estiveres a receber erros durante a importa√ß√£o de YOLOv8, ou se estiveres a ter problemas relacionados com depend√™ncias, considera os seguintes passos de resolu√ß√£o de problemas:

    • Instala√ß√£o nova: Por vezes, come√ßar com uma nova instala√ß√£o pode resolver problemas inesperados. Especialmente com bibliotecas como Ultralytics, onde as actualiza√ß√Ķes podem introduzir altera√ß√Ķes na estrutura da √°rvore de ficheiros ou nas funcionalidades.

    • Actualiza regularmente: Certifica-te de que est√°s a utilizar a vers√£o mais recente da biblioteca. As vers√Ķes mais antigas podem n√£o ser compat√≠veis com as actualiza√ß√Ķes recentes, dando origem a potenciais conflitos ou problemas.

    • Verifica as depend√™ncias: Verifica se todas as depend√™ncias necess√°rias est√£o corretamente instaladas e se s√£o de vers√Ķes compat√≠veis.

    • Rev√™ as altera√ß√Ķes: Se inicialmente clonaste ou instalaste uma vers√£o mais antiga, tem em aten√ß√£o que as actualiza√ß√Ķes significativas podem afetar a estrutura ou as funcionalidades da biblioteca. Consulta sempre a documenta√ß√£o oficial ou os registos de altera√ß√Ķes para compreenderes quaisquer altera√ß√Ķes importantes.

    • Lembra-te, manter as tuas bibliotecas e depend√™ncias actualizadas √© crucial para uma experi√™ncia suave e sem erros.

  • Executando YOLOv8 na GPU - Se estiveres tendo problemas para executar YOLOv8 na GPU, considere as seguintes etapas de solu√ß√£o de problemas:

    • Verifica a compatibilidade e a instala√ß√£o do CUDA: Certifica-te de que a tua GPU √© compat√≠vel com CUDA e que o CUDA est√° corretamente instalado. Usa o nvidia-smi para verificar o status da tua GPU NVIDIA e da vers√£o CUDA.

    • Verifica PyTorch e a integra√ß√£o CUDA: Certifica-te de que PyTorch pode utilizar CUDA, executando import torch; print(torch.cuda.is_available()) em um terminal Python . Se retornar 'True', PyTorch est√° configurado para usar CUDA.

    • Ativa√ß√£o de ambiente: Certifica-te de que est√°s no ambiente correto onde todos os pacotes necess√°rios est√£o instalados.

    • Actualiza os teus pacotes: Pacotes desatualizados podem n√£o ser compat√≠veis com a tua GPU. Mant√©m-nos actualizados.

    • Configura√ß√£o do programa: Verifica se o programa ou c√≥digo especifica o uso da GPU. Em YOLOv8, isso pode estar nas defini√ß√Ķes ou na configura√ß√£o.

Quest√Ķes de forma√ß√£o de modelos

Esta sec√ß√£o aborda os problemas mais comuns enfrentados durante a forma√ß√£o e as respectivas explica√ß√Ķes e solu√ß√Ķes.

Verifica√ß√£o das defini√ß√Ķes de configura√ß√£o

Quest√£o: N√£o tens a certeza se as defini√ß√Ķes de configura√ß√£o no .yaml est√£o a ser aplicados corretamente durante o treino do modelo.

Solu√ß√£o: As defini√ß√Ķes de configura√ß√£o no .yaml deve ser aplicado ao utilizar o ficheiro model.train() fun√ß√£o. Para garantir que estas defini√ß√Ķes s√£o aplicadas corretamente, segue estes passos:

  • Confirma que o caminho para o teu .yaml o ficheiro de configura√ß√£o est√° correto.
  • Certifica-te de que passas o caminho para o teu .yaml como o ficheiro data quando chamas o argumento model.train()como se v√™ abaixo:
model.train(data='/path/to/your/data.yaml', batch=4)

Acelerar o treinamento com v√°rias GPUs

Problema: O treino √© lento numa √ļnica GPU e queres acelerar o processo utilizando v√°rias GPUs.

Resolve o problema: Aumentar o tamanho do lote pode acelerar o treinamento, mas é essencial considerar a capacidade de memória da GPU. Para acelerar o treinamento com várias GPUs, segue estas etapas:

  • Certifica-te de que tens v√°rias GPUs dispon√≠veis.

  • Modifica o teu ficheiro de configura√ß√£o .yaml para especificar o n√ļmero de GPUs a utilizar, por exemplo, gpus: 4.

  • Aumenta o tamanho do lote em conformidade para utilizar totalmente as v√°rias GPUs sem exceder os limites de mem√≥ria.

  • Modifica o teu comando de treino para utilizar v√°rias GPUs:

# Adjust the batch size and other settings as needed to optimize training speed
model.train(data='/path/to/your/data.yaml', batch=32, multi_scale=True)

Par√Ęmetros de monitoriza√ß√£o cont√≠nua

Quest√£o: Queres saber que par√Ęmetros devem ser continuamente monitorizados durante o treino, para al√©m da perda.

Solução: Embora a perda seja uma métrica crucial a monitorizar, também é essencial seguir outras métricas para otimizar o desempenho do modelo. Algumas das principais métricas a monitorizar durante a formação incluem:

  • Precis√£o
  • Recall
  • Precis√£o m√©dia m√©dia (mAP)

Podes aceder a estas métricas a partir dos registos de treino ou utilizando ferramentas como o TensorBoard ou o wandb para visualização. A implementação de paragens antecipadas com base nestas métricas pode ajudar-te a obter melhores resultados.

Ferramentas para acompanhar o progresso da formação

Quest√£o: Est√°s √† procura de recomenda√ß√Ķes sobre ferramentas para acompanhar o progresso da forma√ß√£o.

Solução: Para acompanhar e visualizar o progresso da formação, podes considerar a utilização das seguintes ferramentas:

  • TensorBoard: O TensorBoard √© uma escolha popular para visualizar m√©tricas de treino, incluindo perda, precis√£o e muito mais. Podes integr√°-lo no teu processo de forma√ß√£o YOLOv8 .
  • CometComet fornece um vasto conjunto de ferramentas para o acompanhamento e compara√ß√£o de experi√™ncias. Permite-lhe seguir as m√©tricas, os hiperpar√Ęmetros e at√© os pesos dos modelos. A integra√ß√£o com os modelos YOLO tamb√©m √© simples, proporcionando-te uma vis√£o completa do teu ciclo de experi√™ncias.
  • Ultralytics HUBUltralytics HUB oferece um ambiente especializado para o acompanhamento de modelos YOLO , proporcionando uma plataforma √ļnica para gerir m√©tricas, conjuntos de dados e at√© colaborar com a sua equipa. Dado o seu foco personalizado em YOLO, oferece op√ß√Ķes de acompanhamento mais personalizadas.

Cada uma destas ferramentas oferece o seu próprio conjunto de vantagens, pelo que deves ter em conta as necessidades específicas do teu projeto ao fazeres uma escolha.

Como verificar se o treinamento est√° ocorrendo na GPU

Problema: O valor "dispositivo" nos registos de treino é "nulo" e não tens a certeza se o treino está a acontecer no GPU.

Resolve o problema: O valor "device" sendo "null" normalmente significa que o processo de treinamento está definido para usar automaticamente uma GPU disponível, que é o comportamento padrão. Para garantir que o treinamento ocorra em uma GPU específica, é possível definir manualmente o valor 'device' para o índice da GPU (por exemplo, '0' para a primeira GPU) no arquivo de configuração .yaml:

device: 0

Atribui explicitamente o processo de treino à GPU especificada. Se quiseres treinar na CPU, define 'device' para 'cpu'.

Fica atento à pasta "corridas" para veres os registos e as métricas para monitorizares eficazmente o progresso do treino.

Considera√ß√Ķes fundamentais para uma forma√ß√£o eficaz de modelos

Eis algumas coisas a ter em conta, se estiveres a enfrentar problemas relacionados com a formação de modelos.

Formato e etiquetas do conjunto de dados

  • Import√Ęncia: A base de qualquer modelo de aprendizagem autom√°tica reside na qualidade e no formato dos dados em que √© treinado.

  • Recomenda√ß√£o: Certifica-te de que o teu conjunto de dados personalizado e as respectivas etiquetas respeitam o formato esperado. √Č crucial verificar se as anota√ß√Ķes s√£o precisas e de alta qualidade. Anota√ß√Ķes incorretas ou de baixa qualidade podem atrapalhar o processo de aprendizagem do modelo, levando a resultados imprevis√≠veis.

Convergência do modelo

  • Import√Ęncia: Atingir a converg√™ncia do modelo garante que o modelo aprendeu o suficiente com os dados de treino.

  • Recomenda√ß√£o: Quando treinas um modelo "de raiz", √© vital garantir que o modelo atinge um n√≠vel de converg√™ncia satisfat√≥rio. Isto pode exigir uma dura√ß√£o de treino mais longa, com mais √©pocas, em compara√ß√£o com quando est√°s a afinar um modelo existente.

Taxa de aprendizagem e tamanho do lote

  • Import√Ęncia: Estes hiperpar√Ęmetros desempenham um papel fundamental na determina√ß√£o da forma como o modelo actualiza os seus pesos durante o treino.

  • Recomenda√ß√£o: Avalia regularmente se a taxa de aprendizagem e o tamanho do lote escolhidos s√£o ideais para o teu conjunto de dados espec√≠fico. Os par√Ęmetros que n√£o est√£o em harmonia com as caracter√≠sticas do conjunto de dados podem prejudicar o desempenho do modelo.

Distribuição de classes

  • Import√Ęncia: A distribui√ß√£o das classes no teu conjunto de dados pode influenciar as tend√™ncias de previs√£o do modelo.

  • Recomenda√ß√£o: Avalia regularmente a distribui√ß√£o das classes no teu conjunto de dados. Se houver um desequil√≠brio entre as classes, existe o risco de o modelo desenvolver uma tend√™ncia para a classe mais predominante. Esta tend√™ncia pode ser evidente na matriz de confus√£o, onde o modelo pode prever predominantemente a classe maiorit√°ria.

Verificação cruzada com pesos pré-treinados

  • Import√Ęncia: Aproveitar os pesos pr√©-treinados pode fornecer um ponto de partida s√≥lido para o treinamento do modelo, especialmente quando os dados s√£o limitados.

  • Recomenda√ß√£o: Como etapa de diagn√≥stico, considera treinar o modelo usando os mesmos dados, mas inicializando-o com pesos pr√©-treinados. Se esta abordagem produzir uma matriz de confus√£o bem formada, isso pode sugerir que o modelo "de raiz" pode necessitar de mais treino ou ajustes.

Esta secção aborda os problemas mais comuns enfrentados durante a previsão de modelos.

Obter previs√Ķes de caixa delimitadora com o teu modelo personalizado YOLOv8

Problema: Ao executar previs√Ķes com um modelo YOLOv8 personalizado, h√° desafios com o formato e a visualiza√ß√£o das coordenadas da caixa delimitadora.

Resolve o problema:

  • Formato das coordenadas: YOLOv8 fornece coordenadas da caixa delimitadora em valores absolutos de pixel. Para as converter em coordenadas relativas (de 0 a 1), tens de dividir pelas dimens√Ķes da imagem. Por exemplo, digamos que o tamanho da tua imagem √© 640x640. Ent√£o, deves fazer o seguinte:
# Convert absolute coordinates to relative coordinates
x1 = x1 / 640  # Divide x-coordinates by image width
x2 = x2 / 640
y1 = y1 / 640  # Divide y-coordinates by image height
y2 = y2 / 640
  • Nome do ficheiro: Para obter o nome do ficheiro da imagem em que est√°s a fazer a previs√£o, acede ao caminho do ficheiro da imagem diretamente a partir do objeto de resultado no teu ciclo de previs√£o.

Filtragem de objectos em YOLOv8 Predictions

Problema: Enfrenta problemas sobre como filtrar e exibir apenas objetos específicos nos resultados da previsão ao executar YOLOv8 usando a biblioteca Ultralytics .

Solução: Para detetar classes específicas usa o argumento classes para especificar as classes que queres incluir na saída. Por exemplo, para detetar apenas carros (assumindo que 'carros' tem índice de classe 2):

yolo task=detect mode=segment model=yolov8n-seg.pt source='path/to/car.mp4' show=True classes=2

Compreender as métricas de precisão em YOLOv8

Problema: Confusão relativamente à diferença entre a precisão da caixa, a precisão da máscara e a precisão da matriz de confusão em YOLOv8.

Solu√ß√£o: A precis√£o da caixa mede a exatid√£o das caixas delimitadoras previstas em compara√ß√£o com as caixas reais da verdade terrestre, utilizando a IoU (Intersection over Union) como m√©trica. A precis√£o da m√°scara avalia a concord√Ęncia entre as m√°scaras de segmenta√ß√£o previstas e as m√°scaras reais na classifica√ß√£o de objectos por pixel. A precis√£o da matriz de confus√£o, por outro lado, concentra-se na precis√£o geral da classifica√ß√£o em todas as classes e n√£o considera a precis√£o geom√©trica das previs√Ķes. √Č importante notar que uma caixa delimitadora pode ser geometricamente exacta (verdadeiro positivo) mesmo que a previs√£o da classe esteja errada, o que leva a diferen√ßas entre a precis√£o da caixa e a precis√£o da matriz de confus√£o. Estas m√©tricas avaliam aspectos distintos do desempenho de um modelo, reflectindo a necessidade de diferentes m√©tricas de avalia√ß√£o em v√°rias tarefas.

Extra√ß√£o de dimens√Ķes de objetos em YOLOv8

Problema: Dificuldade em recuperar o comprimento e a altura dos objectos detectados em YOLOv8, especialmente quando s√£o detectados v√°rios objectos numa imagem.

Solu√ß√£o: Para recuperar as dimens√Ķes da caixa delimitadora, utiliza primeiro o modelo Ultralytics YOLOv8 para prever objectos numa imagem. Em seguida, extrai as informa√ß√Ķes de largura e altura das caixas delimitadoras a partir dos resultados da previs√£o.

from ultralytics import YOLO

# Load a pre-trained YOLOv8 model
model = YOLO('yolov8n.pt')

# Specify the source image
source = 'https://ultralytics.com/images/bus.jpg'

# Make predictions
results = model.predict(source, save=True, imgsz=320, conf=0.5)

# Extract bounding box dimensions
boxes = results[0].boxes.xywh.cpu()
for box in boxes:
    x, y, w, h = box
    print(f"Width of Box: {w}, Height of Box: {h}")

Desafios da implementação

Problemas de implementação de GPU

Problema: A implantação de modelos em um ambiente com várias GPUs pode, às vezes, levar a comportamentos inesperados, como uso inesperado de memória, resultados inconsistentes entre GPUs, etc.

Solu√ß√£o: Verifica se h√° inicializa√ß√£o de GPU padr√£o. Alguns frameworks, como PyTorch, podem inicializar opera√ß√Ķes CUDA em uma GPU padr√£o antes de fazer a transi√ß√£o para as GPUs designadas. Para contornar inicializa√ß√Ķes padr√£o inesperadas, especifica a GPU diretamente durante a implanta√ß√£o e a previs√£o. Em seguida, usa ferramentas para monitorar a utiliza√ß√£o da GPU e o uso da mem√≥ria para identificar quaisquer anomalias em tempo real. Al√©m disso, certifica-te de que est√°s a utilizar a vers√£o mais recente da estrutura ou biblioteca.

Problemas de conversão/exportação de modelos

Problema: Durante o processo de conversão ou exportação de modelos de aprendizagem automática para diferentes formatos ou plataformas, os utilizadores podem encontrar erros ou comportamentos inesperados.

Resolve o problema:

  • Verifica a compatibilidade: Certifica-te de que est√°s a utilizar vers√Ķes de bibliotecas e estruturas que s√£o compat√≠veis entre si. Vers√Ķes incompat√≠veis podem levar a erros inesperados durante a convers√£o.

  • Reinicia o ambiente: Se estiveres a utilizar um ambiente interativo como o Jupyter ou o Colab, considera reiniciar o teu ambiente depois de fazeres altera√ß√Ķes ou instala√ß√Ķes significativas. Um novo come√ßo pode, √†s vezes, resolver problemas subjacentes.

  • Documenta√ß√£o oficial: Consulta sempre a documenta√ß√£o oficial da ferramenta ou biblioteca que est√°s a utilizar para a convers√£o. Ela geralmente cont√©m diretrizes espec√≠ficas e pr√°ticas recomendadas para a exporta√ß√£o de modelos.

  • Suporte da comunidade: Verifica o reposit√≥rio oficial da biblioteca ou da estrutura para problemas semelhantes relatados por outros utilizadores. Os mantenedores ou a comunidade podem ter fornecido solu√ß√Ķes ou solu√ß√Ķes alternativas em t√≥picos de discuss√£o.

  • Actualiza regularmente: Certifica-te de que est√°s a utilizar a vers√£o mais recente da ferramenta ou biblioteca. Os programadores lan√ßam frequentemente actualiza√ß√Ķes que corrigem erros conhecidos ou melhoram a funcionalidade.

  • Testa de forma incremental: Antes de efetuar uma convers√£o completa, testa o processo com um modelo ou conjunto de dados mais pequeno para identificar potenciais problemas numa fase inicial.

Comunidade e apoio

O envolvimento com uma comunidade de pessoas que pensam da mesma forma pode melhorar significativamente a tua experi√™ncia e sucesso no trabalho com YOLOv8. Abaixo est√£o alguns canais e recursos que podem ser √ļteis para ti.

Fóruns e canais para obter ajuda

Problemas do GitHub: O repositório YOLOv8 no GitHub tem um separador Issues onde podes fazer perguntas, reportar erros e sugerir novas funcionalidades. A comunidade e os mantenedores são ativos aqui, e é um ótimo lugar para obter ajuda com problemas específicos.

Ultralytics Servidor Discord: Ultralytics tem um servidor Discord onde podes interagir com outros utilizadores e com os criadores.

Documentação e recursos oficiais

Ultralytics YOLOv8 Documentos: A documentação oficial fornece uma visão geral abrangente de YOLOv8, juntamente com guias sobre instalação, utilização e resolução de problemas.

Esses recursos devem fornecer uma base sólida para solucionar problemas e melhorar seus projetos YOLOv8 , bem como para se conectar com outras pessoas na comunidade YOLOv8 .

Conclus√£o

A solu√ß√£o de problemas √© parte integrante de qualquer processo de desenvolvimento, e estar equipado com o conhecimento certo pode reduzir significativamente o tempo e o esfor√ßo gastos na resolu√ß√£o de problemas. Este guia tem como objetivo abordar os desafios mais comuns enfrentados pelos utilizadores do modelo YOLOv8 no ecossistema Ultralytics . Ao compreender e abordar estas quest√Ķes comuns, podes garantir um progresso mais suave do projeto e obter melhores resultados com as tuas tarefas de vis√£o computacional.

Lembra-te, a comunidade Ultralytics √© um recurso valioso. O envolvimento com colegas desenvolvedores e especialistas pode fornecer informa√ß√Ķes e solu√ß√Ķes adicionais que podem n√£o ser abordadas na documenta√ß√£o padr√£o. Continua sempre a aprender, a experimentar e a partilhar as tuas experi√™ncias para contribuir para o conhecimento coletivo da comunidade.

Feliz resolução de problemas!



Criado em 2023-11-12, Atualizado em 2023-11-16
Autores: glenn-jocher (2)

Coment√°rios