Ultralytics YOLO27:

Validação de modelos com Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introdução#

A validação é uma etapa crítica no pipeline de aprendizado de máquina, permitindo avaliar a qualidade dos teus modelos treinados. O modo Val do Ultralytics YOLO26 fornece um conjunto robusto de ferramentas e métricas para avaliar o desempenho dos teus modelos de deteção de objetos. Este guia é um recurso completo para entender como usar eficazmente o modo Val e garantir que os teus modelos sejam precisos e fiáveis.

Consulta a prévia não lançada do YOLO27 para ver os resultados preliminares da validação.



Watch: Ultralytics Modes Tutorial: Validation

Por que validar com o Ultralytics YOLO?#

Eis por que usar o modo Val do YOLO26 é vantajoso:

  • Precisão: obtém métricas precisas, como mAP50, mAP75 e mAP50-95, para avaliar o teu modelo de forma abrangente.
  • Conveniência: utiliza funcionalidades integradas que memorizam as definições de treino, simplificando o processo de validação.
  • Flexibilidade: valida o teu modelo com os mesmos conjuntos de dados ou com conjuntos diferentes, além de tamanhos de imagem distintos.
  • Ajuste de hiperparâmetros: usa as métricas de validação para ajustar o teu modelo e obter um melhor desempenho.

Principais funcionalidades do modo Val#

Estas são as funcionalidades mais importantes oferecidas pelo modo Val do YOLO26:

  • Definições automatizadas: os modelos memorizam as suas configurações de treino para uma validação simples.
  • Suporte a várias métricas: avalia o teu modelo com base num conjunto de métricas de precisão.
  • CLI e API Python: escolhe entre a interface de linha de comandos ou a API Python, conforme a tua preferência para a validação.
  • Compatibilidade de dados: funciona perfeitamente com os conjuntos de dados usados durante o treino, bem como com conjuntos de dados personalizados.
Dica
  • Os modelos YOLO26 memorizam automaticamente as definições de treino, para que possas validar facilmente um modelo com o mesmo tamanho de imagem e no conjunto de dados original usando apenas yolo val model=yolo26n.pt ou YOLO("yolo26n.pt").val()

Exemplos de utilização#

Valida a precisão de um modelo YOLO26n treinado no conjunto de dados COCO8. Não são necessários argumentos, pois o model mantém os seus data e argumentos de treino como atributos do modelo. Consulta a secção Argumentos abaixo para obter a lista completa de argumentos de validação.

Erro de multiprocessamento no Windows

No Windows, podes receber um RuntimeError ao iniciar a validação como um script. Adiciona um bloco if __name__ == "__main__": antes do teu código de validação para resolver o problema.

Exemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Argumentos para a validação de modelos YOLO#

Ao validar modelos YOLO, podes ajustar vários argumentos para otimizar o processo de avaliação. Estes argumentos controlam aspetos como o tamanho das imagens de entrada, o processamento em lotes e os limiares de desempenho. Abaixo encontra-se uma explicação detalhada de cada argumento para te ajudar a personalizar eficazmente as definições de validação.

ArgumentoTipoPredefiniçãoDescrição
datastrNoneEspecifica o caminho para o YAML do conjunto de dados (por exemplo, coco8.yaml), que deve incluir o caminho para os dados de validação. A classificação, por sua vez, aceita um diretório de conjunto de dados ou um nome de conjunto de dados integrado (por exemplo, imagenet10).
imgszint640Define o tamanho das imagens de entrada. Todas as imagens são redimensionadas para esta dimensão antes do processamento. Tamanhos maiores podem melhorar a precisão para objetos pequenos, mas aumentam o tempo de computação.
batchint16Define o número de imagens por lote. Valores mais altos utilizam a memória da GPU de forma mais eficiente, mas exigem mais VRAM. Ajusta este valor com base nos recursos de hardware disponíveis.
save_jsonboolFalseSe True, salva os resultados em um arquivo JSON para análise posterior, integração com outras ferramentas ou envio para servidores de avaliação como COCO. Em conjuntos de dados de detecção, também avalia as previsões com faster-coco-eval e relata o mAP de objetos pequenos, médios e grandes, registrado durante o treinamento como metrics/mAP_small(B), metrics/mAP_medium(B) e metrics/mAP_large(B) em results.csv.
conffloat0.001Define o limiar mínimo de confiança para as deteções. Valores mais baixos aumentam o recall, mas podem introduzir mais falsos positivos. As curvas precisão-recall usam 0.001 por predefinição; as matrizes de confusão de deteção usam um valor explícito conf, ou 0.25 quando este é omitido. A precisão e o recall resumidos usam a confiança de F1 máximo, pelo que podem diferir dos valores derivados de confusion_matrix.png. Usa 0.01 por predefinição para a validação OBB, de modo a reduzir o uso de memória.
ioufloat0.7Define o limiar de Interseção sobre União para a Supressão de Não Máximos. Controla a eliminação de deteções duplicadas.
max_detint300Limita o número máximo de detecções por imagem. Para detect, segment, pose e OBB, se mantido em 300, ele é elevado para a maior contagem de objetos rotulados na divisão validada quando uma imagem a excede, com um aviso; qualquer outro valor é mantido, com um aviso de que o recall pode ser limitado quando uma imagem o excede.
quantizeint ou strNonePrecisão de validação: 16/"fp16" e 32/"fp32"/unset selecionam computação FP16 ou FP32 para modelos PyTorch e TorchScript; outros formatos computam na precisão que o artefato e o tempo de execução selecionam. Em 16, o OpenVINO ainda arredonda a entrada para FP16 no cliente e a expande de volta para FP32, sem alterar o que o tempo de execução calcula. A quantização INT8/PTQ é configurada durante a export, sendo usada posteriormente ao validar o modelo exportado. Substitui a flag obsoleta half.
devicestrNoneEspecifica o dispositivo para a validação (cpu, cuda:0, npu, npu:0, etc.). Quando definido como None, seleciona automaticamente o melhor dispositivo disponível. Podes especificar vários dispositivos CUDA separados por vírgulas.
dnnboolFalseSe True, usa o módulo DNN do OpenCV para a inferência de modelos ONNX, oferecendo uma alternativa aos métodos de inferência do PyTorch.
plotsboolTrueQuando definido como True, gera e guarda gráficos de previsões versus valores reais, matrizes de confusão e curvas PR para a avaliação visual do desempenho do modelo.
classeslist[int]NoneEspecifica uma lista de IDs de classes a avaliar. É útil para filtrar classes e focar apenas em determinadas classes durante a avaliação.
rectboolTrueSe True, usa inferência retangular para o processamento em lotes, reduzindo o preenchimento e aumentando potencialmente a velocidade e a eficiência ao processar imagens na sua proporção original. É ignorado na validação depth, que estica cada imagem para um quadrado fixo de imgsz em vez de aplicar preenchimento.
splitstr'val'Determina a divisão do conjunto de dados a usar para a validação (val, test ou train). Permite escolher de forma flexível o segmento de dados para a avaliação do desempenho.
fractionfloat, int ou list1.0Subconjunto da divisão validada. Com uma lista [train, val, test], a entrada correspondente a split se aplica (1 = divisão completa, inteiros acima de 1 = contagens de imagens; entradas omitidas são completas). Um escalar se aplica apenas com split=train; val e test usam então a divisão completa.
projectstrNoneNome do diretório do projeto onde os resultados da validação são guardados. Ajuda a organizar os resultados de diferentes experiências ou modelos.
namestrNoneNome da execução de validação. É usado para criar um subdiretório dentro da pasta do projeto, onde os registos e resultados da validação são armazenados.
verboseboolTrueSe True, apresenta informações detalhadas durante o processo de validação, incluindo métricas por classe, progresso dos lotes e informações adicionais de depuração.
save_txtboolFalseSe True, guarda os resultados das deteções em ficheiros de texto, com um ficheiro por imagem, o que é útil para análises posteriores, pós-processamento personalizado ou integração com outros sistemas.
save_confboolFalseSe True, inclui os valores de confiança nos ficheiros de texto guardados quando save_txt está ativado, fornecendo resultados mais detalhados para análise e filtragem.
workersint8Número de threads de trabalho para o carregamento de dados. Valores mais altos podem acelerar o pré-processamento de dados, mas podem aumentar o uso da CPU. Definir como 0 usa a thread principal, o que pode ser mais estável em alguns ambientes.
augmentboolFalseAtiva o aumento em tempo de teste (TTA) durante a validação, melhorando potencialmente a precisão das deteções à custa da velocidade de inferência, ao executar a inferência em versões transformadas da entrada. Disponível apenas para modelos Ultralytics PyTorch.
agnostic_nmsboolFalseAtiva a Supressão Não Máxima agnóstica de classes, suprimindo caixas sobrepostas com pontuações mais baixas, independentemente da sua classe prevista. Útil para aplicações centradas em instâncias. Com a inferência sem NMS (nms=False no YOLO26 ou YOLOv10), isto apenas evita que a mesma deteção apareça com múltiplos rótulos de classe (duplicados de IoU=1.0) e não efetua a supressão baseada no limiar de IoU entre caixas distintas.
single_clsboolFalseTrata todas as classes como uma única classe durante a validação. É útil para avaliar o desempenho do modelo em tarefas de deteção binária ou quando as distinções entre classes não são importantes.
visualizeboolFalseVisualiza os valores reais, os verdadeiros positivos, os falsos positivos e os falsos negativos de cada imagem. É útil para depuração e interpretação do modelo.
show_labelsboolTrueApresenta as etiquetas de classe nas visualizações de validação quando visualize=True. Define como False para uma visualização mais limpa das correspondências e dos erros.
show_confboolTrueApresenta as pontuações de confiança nas visualizações de validação quando visualize=True. Define como False para uma visualização mais limpa das correspondências e dos erros.
compilebool ou strFalseAtiva a compilação de grafos torch.compile do PyTorch 2.x com backend='inductor'. Aceita True"default", False → desativa, ou um modo de string, como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Recorre ao modo eager com um aviso se não houver suporte.
channels_lastboolNoneUsa o formato de memória channels_last (NHWC) para a validação nativa do PyTorch. None ativa-o automaticamente em CPUs x86 Linux e Windows com oneDNN ativado e PyTorch 1.13 ou mais recente, False desativa-o e True solicita-o em dispositivos CPU x86 ou CUDA compatíveis. ARM64, MPS, versões mais antigas do PyTorch, CPUs sem oneDNN e formatos exportados permanecem inalterados; a validação durante o treino mantém o esquema de memória do modelo de treino.
nmsbool, opcionalNoneExecuta inferência de um para muitos com NMS por predefinição (None ou True). Define False para utilizar o cabeçote de um para um sem NMS quando disponível. Vê o guia de Deteção de Ponta a Ponta para obter detalhes.

Cada uma destas definições desempenha um papel essencial no processo de validação, permitindo uma avaliação personalizável e eficiente dos modelos YOLO. Ajustar estes parâmetros de acordo com as tuas necessidades e recursos específicos pode ajudar a alcançar o melhor equilíbrio entre precisão e desempenho.

Exemplo de validação com argumentos#



Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More

Explore model validation and different export methods in Google Colab

Os exemplos abaixo mostram a validação de modelos YOLO com argumentos personalizados em Python e CLI.

Exemplo
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
Exportar a matriz de confusão

Também podes guardar os resultados da matriz de confusão em diferentes formatos usando o código fornecido.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
Precisão, recall e F1 por imagem

A validação armazena métricas de precisão, recall, F1, TP, FP e FN por imagem (no limiar IoU de 0.5) para todas as tarefas, exceto classificação. Acede-lhes através de results.box.image_metrics para deteção e OBB, results.seg.image_metrics para segmentação e results.pose.image_metrics para pose após a conclusão da validação.

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate and access per-image metrics
results = model.val(data="coco8.yaml")

# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Access metrics for a specific image
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

Cada entrada em image_metrics contém as seguintes chaves:

ChaveDescrição
precisionPontuação de precisão da imagem (tp / (tp + fp)).
recallPontuação de recall da imagem (tp / (tp + fn)).
f1Média harmónica da precisão e do recall.
tpNúmero de verdadeiros positivos da imagem.
fpNúmero de falsos positivos da imagem.
fnNúmero de falsos negativos da imagem.

Esta funcionalidade está disponível para tarefas de deteção, segmentação, pose e OBB.

O objeto de métricas retornado também expõe auxiliares de exportação para análise posterior:

MétodoTipo de retornoDescrição
summary()List[Dict[str, Any]]Converte os resultados da validação num dicionário resumido.
to_df()DataFrameDevolve os resultados da validação como um DataFrame Polars estruturado.
to_csv()strExporta os resultados da validação no formato CSV e devolve a string CSV.
to_json()strExporta os resultados da validação no formato JSON e devolve a string JSON.

Para mais detalhes, consulta a documentação da classe DataExportMixin.

E agora?#

Satisfeito com as métricas? Exporta o modelo para um formato de implementação. Se a precisão não for a esperada, volta atrás e treina novamente com hiperparâmetros diferentes ou mais dados de treino.

Perguntas frequentes#

  • Para validar o teu modelo YOLO26, podes usar o modo Val fornecido pelo Ultralytics. Por exemplo, usando a API Python, podes carregar um modelo e executar a validação com:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate the model
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    Em alternativa, podes usar a interface de linha de comandos (CLI):

    yolo val model=yolo26n.pt

    Para uma maior personalização, podes ajustar vários argumentos, como imgsz, batch e conf, tanto no modo Python como no CLI. Consulta a secção Argumentos para a validação de modelos YOLO para obter a lista completa de parâmetros.

  • A validação de modelos YOLO26 fornece várias métricas importantes para avaliar o desempenho do modelo. Estas incluem:

    • mAP50 (precisão média no limiar IoU de 0.5)
    • mAP75 (precisão média no limiar IoU de 0.75)
    • mAP50-95 (precisão média em vários limiares IoU de 0.5 a 0.95)

    Usando a API Python, podes aceder a estas métricas da seguinte forma:

    metrics = model.val()  # assumes `model` has been loaded
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # list of mAP50-95 for each category
    print(metrics.box.image_metrics)  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

    Para uma avaliação completa do desempenho, é essencial rever todas estas métricas. Para mais detalhes, consulta as Principais funcionalidades do modo Val.

  • Usar Ultralytics YOLO para validação oferece várias vantagens:

    • Precisão: YOLO26 oferece métricas de desempenho precisas, incluindo mAP50, mAP75 e mAP50-95.
    • Praticidade: Os modelos memorizam as respetivas configurações de treino, tornando a validação simples.
    • Flexibilidade: Podes validar com os mesmos conjuntos de dados ou com conjuntos diferentes, bem como com diferentes tamanhos de imagem.
    • Ajuste de hiperparâmetros: As métricas de validação ajudam a aperfeiçoar os modelos para obter um melhor desempenho.

    Estas vantagens garantem que os teus modelos sejam avaliados exaustivamente e possam ser otimizados para obter resultados superiores. Sabe mais sobre estas vantagens na secção Porquê validar com Ultralytics YOLO.

  • Sim, podes validar o teu modelo YOLO26 com um conjunto de dados personalizado. Especifica o argumento data com o caminho para o YAML do teu conjunto de dados, que deve incluir o caminho para os dados de validação. A classificação requer, em alternativa, um diretório de conjunto de dados ou o nome de um conjunto de dados integrado (por exemplo, imagenet10).

    Nota

    A validação é realizada usando os próprios nomes de classes do modelo, que podes ver com model.names e que podem ser diferentes dos definidos pelo próprio conjunto de dados.

    Exemplo em Python:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate with a custom dataset
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    Exemplo usando a CLI:

    yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

    Para obter opções mais personalizáveis durante a validação, consulta a secção Exemplo de validação com argumentos.

  • Para guardares os resultados da validação num ficheiro JSON, podes definir o argumento save_json como True ao executar a validação. Isto pode ser feito tanto na API Python como na CLI.

    Exemplo em Python:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Save validation results to JSON
    metrics = model.val(save_json=True)

    Exemplo usando a CLI:

    yolo val model=yolo26n.pt save_json=True

    Em conjuntos de dados de deteção, o save_json=True também relata o mAP para objetos pequenos, médios e grandes através do faster-coco-eval. Consulta os Arguments for YOLO Model Validation para mais detalhes.

Comentários