Ultralytics YOLO27:
Get Started

Validação de modelos com Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introdução#

A validação é uma etapa crítica do pipeline de aprendizado de máquina, pois permite avaliar a qualidade dos modelos treinados. O modo Val do Ultralytics YOLO26 oferece um conjunto robusto de ferramentas e métricas para avaliar o desempenho dos modelos de detecção de objetos. Este guia é uma referência completa para entender como usar o modo Val com eficiência e garantir que seus modelos sejam precisos e confiáveis.

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



Assista: Tutorial dos modos do Ultralytics: validação

Por que validar com o Ultralytics YOLO?#

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

  • Precisão: obtém métricas precisas, como mAP50, mAP75 e mAP50-95, para avaliar o teu modelo de forma abrangente.
  • Praticidade: utiliza funcionalidades integradas que guardam 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, e com tamanhos de imagem iguais ou diferentes.
  • Ajuste de hiperparâmetros: utiliza métricas de validação para ajustar o teu modelo e obter 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 guardam as configurações de treino, permitindo validar com facilidade.
  • Suporte a várias métricas: avalia o teu modelo com base numa variedade de métricas de precisão.
  • CLI e API Python: escolhe entre a interface de linha de comandos ou a API Python para validar, conforme a tua preferência.
  • Compatibilidade de dados: funciona perfeitamente tanto com os conjuntos de dados usados durante o treino como com conjuntos de dados personalizados.
Dica
  • Os modelos YOLO26 guardam automaticamente as respetivas definições de treino, por isso yolo val model=path/to/best.pt ou YOLO("path/to/best.pt").val() valida com o tamanho de imagem usado no treino e com o conjunto de dados original. Os pesos oficiais recorrem ao conjunto de dados predefinido para a tarefa; passa data para o substituir.

Exemplos de uso#

Valida a precisão de um modelo YOLO26n treinado. Não são necessários argumentos, pois o model guarda os valores de data usados no treino e os argumentos como atributos do modelo: path/to/best.pt valida com o conjunto de dados usado no treino. Os pesos oficiais registam um caminho para um conjunto de dados de treino que não existe na tua máquina, por isso recorrem ao coco8.yaml predefinido para a tarefa, com um aviso. Passa data para validar com outro conjunto de dados. Consulta a secção Argumentos abaixo para ver a lista completa de argumentos de validação.

Erro de multiprocessamento no Windows

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

Exemplo
from ultralytics import YOLO

# Carregar um modelo
model = YOLO("yolo26n.pt")  # carrega um modelo oficial
model = YOLO("path/to/best.pt")  # carregar um modelo personalizado

# Valida o modelo
metrics = model.val()  # não são necessários argumentos; o conjunto de dados e as definições são guardados
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # uma lista com mAP50-95 para cada categoria
metrics.box.image_metrics  # dicionário de métricas por imagem com precisão, revocação, F1, TP, FP e 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 encontras uma descrição detalhada de cada argumento para personalizares eficazmente as definições de validação.

ArgumentoTipoPadrã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. Para classificação, use um diretório de conjunto de dados ou o nome de um conjunto de dados integrado (por exemplo, imagenet10).
imgszint640Define o tamanho das imagens de entrada. Todas as imagens são redimensionadas para essa 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 maiores aproveitam a memória da GPU com mais eficiência, mas exigem mais VRAM. Ajuste o valor de acordo com os recursos de hardware disponíveis.
save_jsonboolFalseSe True, salva os resultados em um arquivo JSON para análise adicional, integração com outras ferramentas ou envio a servidores de avaliação, como o COCO. Em conjuntos de dados de detecção, também avalia as predições com faster-coco-eval e informa o mAP para 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 detecções. Valores menores aumentam a revocação, mas podem gerar mais falsos positivos. As curvas precisão-revocação, o mAP e as matrizes de confusão da detecção usam esse valor; um conf mais alto, como 0.25, produz uma matriz mais próxima da saída da predição, mas pode reduzir o mAP. A precisão e a revocação resumidas usam a confiança de F1 máximo e, por isso, podem diferir dos valores derivados de confusion_matrix.png. O padrão é 0.01 para validação OBB, a fim de reduzir o uso de memória.
ioufloat0.7Define o limiar de Interseção sobre União para a Supressão Não Máxima. Controla a eliminação de detecções duplicadas.
max_detint300Limita o número máximo de detecções por imagem. Para detect, segment, pose e OBB, quando o valor é 300, ele é aumentado para a maior quantidade de objetos rotulados na divisão validada se uma imagem ultrapassar esse limite, com um aviso; qualquer outro valor é mantido, com um aviso de que a revocação pode ser limitada quando uma imagem ultrapassar esse valor.
quantizeint ou strNonePrecisão de validação: 16/"fp16" e 32/"fp32"/unset selecionam o cálculo em FP16 ou FP32 para modelos PyTorch e TorchScript (FP32 na CPU); os outros formatos usam a precisão selecionada pelo artefato e pelo ambiente de execução. Em 16, o OpenVINO ainda arredonda a entrada para FP16 no cliente e a converte de volta para FP32, sem alterar a precisão do ambiente de execução. A quantização INT8/PTQ é configurada durante a exportação e, em seguida, usada ao validar o modelo exportado. Substitui a flag obsoleta half.
devicestrNoneEspecifica o dispositivo para validação (cpu, cuda:0, npu, npu:0 etc.). Quando None, seleciona automaticamente o melhor dispositivo disponível. É possível especificar vários dispositivos CUDA, separando-os por vírgulas.
dnnboolFalseSe True, usa o módulo DNN do OpenCV para inferência com modelos ONNX, como alternativa aos métodos de inferência do PyTorch.
plotsboolTrueQuando definido como True, gera e salva gráficos de predições em comparação com a verdade fundamental, matrizes de confusão e curvas PR para a avaliação visual do desempenho do modelo.
classeslist[int]NoneEspecifica uma lista de IDs de classe a avaliar. Útil para filtrar e focar apenas em determinadas classes durante a avaliação.
rectboolTrueSe True, agrupa lotes com proporções semelhantes em formas retangulares. Adiciona metade de um stride antes de arredondar cada dimensão para cima até um múltiplo do stride (sem metade extra de stride para semantic). Com stride 32, uma imagem de 640×640 em imgsz=640 passa a ter 672×672, com um deslocamento de 16 px, enquanto predict usa 640×640, por isso as métricas podem ser diferentes. rect=False corresponde a predict para imagens quadradas. É ignorado para depth, que estica as imagens até um quadrado de imgsz.
splitstr'val'Determina a divisão do conjunto de dados a usar na validação (val, test ou train). Permite escolher com flexibilidade o segmento de dados para avaliar o desempenho.
fractionfloat, int ou list1.0Subconjunto da divisão validada. Com uma lista [train, val, test], aplica-se a entrada correspondente a split (1 = divisão completa; números inteiros acima de 1 = quantidade de imagens; entradas omitidas = divisão completa). Um valor escalar aplica-se somente a split=train; val e test usam então a divisão completa.
projectstrNoneNome do diretório do projeto onde as saídas da validação são salvas. Ajuda a organizar os resultados de diferentes experimentos ou modelos.
namestrNoneNome da execução de validação. Usado para criar um subdiretório dentro da pasta do projeto, onde os registros e as saídas da validação são armazenados.
verboseboolTrueSe True, exibe 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, salva os resultados da detecção em arquivos de texto, um arquivo por imagem, para análise adicional, pós-processamento personalizado ou integração com outros sistemas.
save_confboolFalseSe True, inclui valores de confiança nos arquivos de texto salvos quando save_txt está ativado, fornecendo uma saída mais detalhada para análise e filtragem.
workersint8Número de threads de trabalho para carregar dados. Valores maiores podem acelerar o pré-processamento dos 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, podendo melhorar a precisão da detecção à custa da velocidade de inferência, executando a inferência em versões transformadas da entrada. Disponível somente para modelos PyTorch da Ultralytics.
agnostic_nmsboolFalseAtiva a Supressão Não Máxima independente de classe, suprimindo caixas sobrepostas com pontuações menores, independentemente da classe prevista. Útil para aplicações focadas em instâncias. Com a inferência sem NMS (nms=False no YOLO26 ou YOLOv10), isso apenas impede que a mesma detecção apareça com vários rótulos de classe (duplicatas com IoU=1.0) e não aplica 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 detecção binária ou quando as distinções entre classes não são importantes.
visualizeboolFalseVisualiza as verdades fundamentais, os verdadeiros positivos, os falsos positivos e os falsos negativos de cada imagem. Útil para depuração e interpretação do modelo.
show_labelsboolTrueExibe os rótulos de classe nas visualizações de validação quando visualize=True. Define como False para facilitar a visualização das correspondências e dos erros.
show_confboolTrueExibe as pontuações de confiança nas visualizações de validação quando visualize=True. Define como False para facilitar a visualização 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 em formato de string, como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Se não for suportado, recorre à execução ansiosa e apresenta um aviso.
channels_lastboolNoneUsa o formato de memória channels_last (NHWC) para validação nativa com PyTorch. None ativa-o automaticamente em CPUs x86 com Linux e Windows compatíveis com oneDNN 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; durante o treinamento, a validação mantém o layout do modelo de treinamento.
nmsbool, opcionalNoneExecuta inferência de um para muitos com NMS por padrão (None ou True). Define False para usar a cabeça de um para um sem NMS quando disponível. Consulte o guia de detecção de ponta a ponta para obter detalhes.

Cada uma destas definições desempenha um papel fundamental no processo de validação, permitindo uma avaliação personalizável e eficiente dos modelos YOLO. Ajustar estes parâmetros às 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#



Assista: Como exportar os resultados de validação do modelo em CSV, JSON, SQL, DataFrame do Polars e muito mais

Explore model validation and different export methods in Google Colab

Os exemplos abaixo mostram como validar modelos YOLO com argumentos personalizados em Python e na CLI.

Exemplo
from ultralytics import YOLO

# Carregar um modelo
model = YOLO("yolo26n.pt")

# Personaliza as definições de validação
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 de ConfusionMatrix em diferentes formatos com 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, revocação e F1 por imagem

A validação guarda métricas de precisão, revocação, F1, TP, FP e FN por imagem (com limiar IoU de 0.5) para todas as tarefas, exceto classificação. Acede a estas métricas através de results.box.image_metrics para deteção e OBB, de results.seg.image_metrics para segmentação e de results.pose.image_metrics para pose, depois de a validação terminar.

from ultralytics import YOLO

# Carregar um modelo
model = YOLO("yolo26n.pt")

# Valida e acede às métricas por imagem
results = model.val(data="coco8.yaml")

# image_metrics é um dicionário com os nomes dos ficheiros de imagem como chaves
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Acede às métricas de uma imagem específica
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 revocação da imagem (tp / (tp + fn)).
f1Média harmónica da precisão e da revocação.
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 devolvido também disponibiliza métodos de exportação para análise posterior:

MétodoTipo devolvidoDescriçã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 estruturado de Polars.
to_csv()strExporta os resultados da validação em formato CSV e devolve a cadeia CSV.
to_json()strExporta os resultados da validação em formato JSON e devolve a cadeia JSON.

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

O que fazer a seguir#

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 com mais dados de treino.

Perguntas frequentes#

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

    from ultralytics import YOLO
    
    # Carregar um modelo
    model = YOLO("yolo26n.pt")
    
    # Valida o modelo
    metrics = model.val()
    print(metrics.box.map)  # map50-95

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

    yolo detect val model=yolo26n.pt data=coco8.yaml

    Para personalizar ainda mais, podes ajustar vários argumentos, como imgsz, batch e conf, tanto no modo Python como na CLI. Consulta a secção Argumentos para a validação de modelos YOLO para ver 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 média com limiar IoU de 0.5)
    • mAP75 (precisão média média com limiar IoU de 0.75)
    • mAP50-95 (precisão média média em vários limiares IoU, de 0.5 a 0.95)

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

    metrics = model.val()  # pressupõe que `model` já foi carregado
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # lista de mAP50-95 para cada categoria
    print(metrics.box.image_metrics)  # dicionário de métricas por imagem com precisão, revocação, F1, TP, FP e FN

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

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

    • Precisão: o YOLO26 fornece métricas de desempenho precisas, incluindo mAP50, mAP75 e mAP50-95.
    • Praticidade: os modelos guardam as definições de treino, o que simplifica a validação.
    • Flexibilidade: podes validar com os mesmos conjuntos de dados ou com conjuntos diferentes, e com tamanhos de imagem iguais ou diferentes.
    • Ajuste de hiperparâmetros: as métricas de validação ajudam a ajustar os modelos para obter melhor desempenho.

    Estas vantagens garantem uma avaliação completa dos teus modelos e permitem otimizá-los para obter resultados superiores. Descobre mais sobre estas vantagens na secção Por que validar com o Ultralytics YOLO.

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

    Nota

    A validação é feita com os nomes de classe do próprio modelo, que podes consultar com model.names e que podem ser diferentes dos nomes definidos pelo próprio conjunto de dados.

    Exemplo em Python:

    from ultralytics import YOLO
    
    # Carregar um modelo
    model = YOLO("yolo26n.pt")
    
    # Valida com um conjunto de dados personalizado
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    Exemplo com a CLI:

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

    Para ver mais opções de personalização durante a validação, consulta a secção Exemplo de validação com argumentos.

  • Para guardar os resultados da validação num ficheiro JSON, define o argumento save_json como True ao executar a validação. Podes fazê-lo tanto na API Python como na CLI.

    Exemplo em Python:

    from ultralytics import YOLO
    
    # Carregar um modelo
    model = YOLO("yolo26n.pt")
    
    # Guarda os resultados da validação em JSON
    metrics = model.val(save_json=True)

    Exemplo com a CLI:

    yolo val model=yolo26n.pt save_json=True

    Em conjuntos de dados de deteção, save_json=True também apresenta o mAP de objetos pequenos, médios e grandes através de faster-coco-eval. Consulta Argumentos para a validação de modelos YOLO para mais detalhes.

Comentários