Validação de modelo com Ultralytics YOLO

Ultralytics YOLO ecosystem and integrations

Introdução

A validação é um passo crítico no pipeline de machine learning, permitindo avaliar a qualidade dos teus modelos treinados. O modo Val no Ultralytics YOLO26 fornece um conjunto robusto de ferramentas e métricas para avaliar o desempenho dos teus modelos de object detection. Este guia serve como um recurso completo para entender como usar eficazmente o modo Val para garantir que os teus modelos sejam precisos e confiáveis.



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 exatas como mAP50, mAP75 e mAP50-95 para avaliar de forma abrangente o teu modelo.
  • Conveniência: Utiliza funcionalidades incorporadas que memorizam as definições de treino, simplificando o processo de validação.
  • Flexibilidade: Valida o teu modelo com os mesmos conjuntos de dados e tamanhos de imagem ou com outros diferentes.
  • Hyperparameter Tuning: Usa métricas de validação para ajustar o teu modelo para um melhor desempenho.

Principais funcionalidades do modo Val

Estas são as funcionalidades notáveis oferecidas pelo modo Val do YOLO26:

  • Definições automatizadas: Os modelos lembram-se das suas configurações de treino para uma validação direta.
  • Suporte a múltiplas métricas: Avalia o teu modelo com base numa série de métricas de precisão.
  • CLI e API Python: Escolhe entre a interface de linha de comandos ou a API Python com base na tua preferência para a validação.
  • Compatibilidade de dados: Funciona perfeitamente com conjuntos de dados usados durante a fase de treino, bem como com conjuntos de dados personalizados.
Dica
  • Os modelos YOLO26 lembram-se automaticamente das suas definições de treino, pelo que podes validar um modelo no mesmo tamanho de imagem e no conjunto de dados original facilmente com apenas yolo val model=yolo26n.pt ou YOLO("yolo26n.pt").val()

Exemplos de Uso

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

Erro de Multiprocessamento no Windows

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

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, vários argumentos podem ser ajustados para otimizar o processo de avaliação. Estes argumentos controlam aspetos como o tamanho da imagem de entrada, o processamento em lote e os limiares de desempenho. Abaixo está uma análise detalhada de cada argumento para te ajudar a personalizar as tuas definições de validação eficazmente.

ArgumentoTipoPredefiniçãoDescrição
datastrNoneEspecifica o caminho para o ficheiro de configuração do conjunto de dados (por exemplo, coco8.yaml). Este ficheiro deve incluir o caminho para os dados de validação.
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 com base nos recursos de hardware disponíveis.
save_jsonboolFalseSe True, guarda os resultados num ficheiro JSON para análise posterior, integração com outras ferramentas ou submissão a servidores de avaliação como COCO.
conffloat0.001Define o limiar mínimo de confiança para deteções. Valores mais baixos aumentam a recuperação (recall) mas podem introduzir mais falsos positivos. Usado durante a validação para calcular curvas de precisão-recuperação.
ioufloat0.7Define o limiar de Intersection Over Union 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 deteções por imagem. Útil em cenas densas para evitar deteções excessivas e gerir recursos computacionais.
halfboolFalseAtiva a computação de precisão média (FP16), reduzindo o uso de memória e aumentando potencialmente a velocidade com impacto mínimo na precisão.
devicestrNoneEspecifica o dispositivo para validação (cpu, cuda:0, npu, npu:0, etc.). Quando None, seleciona automaticamente o melhor dispositivo disponível. Múltiplos dispositivos CUDA podem ser especificados com separação por vírgula.
dnnboolFalseSe True, usa o módulo DNN do OpenCV para inferência de modelo ONNX, oferecendo uma alternativa aos métodos de inferência do PyTorch.
plotsboolTrueQuando definido como True, gera e guarda gráficos de predições versus verdade absoluta (ground truth), matrizes de confusão e curvas PR para avaliação visual do desempenho do modelo.
classeslist[int]NoneEspecifica uma lista de IDs de classe para avaliar. Útil para filtrar e focar apenas em certas classes durante a avaliação.
rectboolTrueSe True, usa inferência retangular para lotes, reduzindo o preenchimento (padding) e potencialmente aumentando a velocidade e eficiência ao processar imagens no seu rácio de aspeto original.
splitstr'val'Determina a divisão do conjunto de dados a usar para validação (val, test ou train). Permite flexibilidade na escolha do segmento de dados para avaliação de desempenho.
projectstrNoneNome do diretório do projeto onde os resultados da validação são guardados. Ajuda a organizar resultados de diferentes experiências ou modelos.
namestrNoneNome da execução da 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, exibe informações detalhadas durante o processo de validação, incluindo métricas por classe, progresso do lote e informações adicionais de depuração.
save_txtboolFalseSe True, guarda os resultados da deteção em ficheiros de texto, com um ficheiro por imagem, útil para análise posterior, pós-processamento personalizado ou integração com outros sistemas.
save_confboolFalseSe True, inclui valores de confiança nos ficheiros de texto guardados quando save_txt está ativado, fornecendo saída mais detalhada para análise e filtragem.
workersint8Número de threads de trabalho para 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, que pode ser mais estável em alguns ambientes.
augmentboolFalseAtiva a aumentação durante o teste (TTA) durante a validação, melhorando potencialmente a precisão da deteção ao custo da velocidade de inferência ao executar inferência em versões transformadas da entrada.
agnostic_nmsboolFalseAtiva a Supressão de Não-Máximos agnóstica à classe, que funde caixas sobrepostas independentemente da sua classe prevista. Útil para aplicações focadas em instâncias. Para modelos end-to-end (YOLO26, YOLOv10), isto apenas evita que a mesma deteção apareça com múltiplos rótulos de classe (duplicados IoU=1.0) e não realiza supressão baseada em 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 de classe não são importantes.
visualizeboolFalseVisualiza as verdades absolutas, verdadeiros positivos, falsos positivos e falsos negativos para cada imagem. Útil para depuração e interpretação do modelo.
compilebool ou strFalseAtiva a compilação de grafo 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". Retorna ao modo imediato (eager) com um aviso se não for suportado.
end2endboolNoneSubstitui o modo end-to-end em modelos YOLO que suportam inferência sem NMS (YOLO26, YOLOv10). Definir como False permite-te executar a validação usando o pipeline tradicional de NMS, permitindo adicionalmente usar o argumento iou.

Cada uma destas definições desempenha um papel vital no processo de validação, permitindo uma avaliação personalizada 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

Explora a validação de modelos e diferentes métodos de exportação no 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 ConfusionMatrix

Também podes guardar os resultados da ConfusionMatrix 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 de IoU 0.5) para todas as tarefas, exceto classificação. Acede a elas 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 para a imagem (tp / (tp + fp)).
recallPontuação de recall para a imagem (tp / (tp + fn)).
f1Média harmónica de precisão e recall.
tpNúmero de verdadeiros positivos para a imagem.
fpNúmero de falsos positivos para a imagem.
fnNúmero de falsos negativos para a imagem.

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

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

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

FAQ

Como valido o meu modelo YOLO26 com o Ultralytics?

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 maior personalização, podes ajustar vários argumentos como imgsz, batch e conf tanto nos modos Python como CLI. Consulta a secção Argumentos para a validação de modelos YOLO para a lista completa de parâmetros.

Que métricas posso obter da validação de modelos YOLO26?

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

  • mAP50 (mean Average Precision no limiar de IoU 0.5)
  • mAP75 (mean Average Precision no limiar de IoU 0.75)
  • mAP50-95 (mean Average Precision através de múltiplos limiares de 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, é crucial rever todas estas métricas. Para mais detalhes, consulta as Principais funcionalidades do modo Val.

Quais são as vantagens de usar o Ultralytics YOLO para validação?

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

  • Precisão: O YOLO26 oferece métricas de desempenho precisas, incluindo mAP50, mAP75 e mAP50-95.
  • Conveniência: Os modelos lembram-se das suas definições de treino, tornando a validação direta.
  • Flexibilidade: Podes validar com os mesmos conjuntos de dados e tamanhos de imagem ou com outros diferentes.
  • Hyperparameter Tuning: As métricas de validação ajudam a ajustar modelos para um melhor desempenho.

Estes benefícios garantem que os teus modelos sejam avaliados minuciosamente e possam ser otimizados para resultados superiores. Sabe mais sobre estas vantagens na secção Por que validar com o Ultralytics YOLO.

Posso validar o meu modelo YOLO26 usando um conjunto de dados personalizado?

Sim, podes validar o teu modelo YOLO26 usando um conjunto de dados personalizado. Especifica o argumento data com o caminho para o teu ficheiro de configuração do conjunto de dados. Este ficheiro deve incluir o caminho para os dados de validação.

Nota

A validação é realizada usando os nomes das classes do próprio modelo, que podes ver usando model.names, e que podem ser diferentes daqueles especificados no ficheiro de configuração do 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 mais opções personalizáveis durante a validação, vê a secção Exemplo de validação com argumentos.

Como guardo os resultados da validação num ficheiro JSON no YOLO26?

Para guardar 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

Esta funcionalidade é particularmente útil para análises posteriores ou integração com outras ferramentas. Consulta os Argumentos para a validação de modelos YOLO para mais detalhes.

Comentários