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.



Observa: Ultralytics YOLOv8 Problemas comuns | Erros de instalação, Problemas de formação de modelos

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 HUB: Ultralytics O HUB oferece um ambiente especializado para acompanhar os 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 do "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

Isto 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 2024-04-19
Autores: RizwanMunawar (1), glenn-jocher (2)

Comentários