Validação de Modelo com Ultralytics YOLO#
Introdução#
A validação é um passo crítico no pipeline de aprendizado de máquina, permitindo que avalies 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 detecção de objetos. 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 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 de forma abrangente o teu modelo.
- 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 ou diferentes conjuntos de dados e tamanhos de imagem.
- Ajuste de Hiperparâmetros: Usa métricas de validação para afinar 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 memorizam as suas configurações de treino para uma validação simples.
- Suporte a Múltiplas Métricas: Avalia o teu modelo com base numa gama de métricas de precisão.
- CLI e Python API: Escolhe entre a interface de linha de comandos ou a API Python, dependendo da 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.
- Os modelos YOLO26 lembram-se automaticamente das suas configurações de treino, para que possas validar facilmente um modelo no mesmo tamanho de imagem e no conjunto de dados original com apenas
yolo val model=yolo26n.ptouYOLO("yolo26n.pt").val()
Exemplos de uso#
Valida a precisão de um modelo YOLO26n treinado no conjunto de dados COCO8. Nenhum argumento é necessário, pois o model retém o seu data de treino e os argumentos como atributos do modelo. Vê a seção de Argumentos abaixo para obter uma lista completa de argumentos de validação.
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 resolvê-lo.
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 FNArgumentos 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 encontra-se um detalhamento de cada argumento para te ajudar a personalizar as tuas definições de validação de forma eficaz.
| Argumento | Tipo | Predefinição | Descrição |
|---|---|---|---|
data | str | None | Especifica o caminho para o YAML do dataset (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 dataset ou o nome de um dataset integrado (por exemplo, imagenet10). |
imgsz | int | 640 | Define 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. |
batch | int | 16 | Define o número de imagens por lote. Valores mais altos utilizam a memória GPU de forma mais eficiente, mas requerem mais VRAM. Ajusta com base nos recursos de hardware disponíveis. |
save_json | bool | False | Se 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 o COCO. |
conf | float | 0.001 | Define o limite mínimo de confiança para detecções. Valores mais baixos aumentam o recall, mas podem introduzir mais falsos positivos. As curvas de precisão-recall usam por padrão 0.001; as matrizes de confusão de detecção usam um valor explícito conf, ou 0.25 quando ele é omitido. A precisão e o recall do resumo usam a confiança max-F1, portanto podem diferir dos valores derivados de confusion_matrix.png. O padrão é 0.01 para a validação de OBB para reduzir o uso de memória. |
iou | float | 0.7 | Define o limite de Intersection Over Union para a Non-Maximum Suppression. Controla a eliminação de detecções duplicadas. |
max_det | int | 300 | Limita o número máximo de deteções por imagem. Útil em cenas densas para evitar deteções excessivas e gerir recursos computacionais. |
quantize | int ou str | None | Precisão da validação: 16/"fp16" ativa a validação FP16 em GPUs suportadas; 32/"fp32"/não definido é FP32. A quantização INT8/PTQ é configurada durante a export e, em seguida, usada validando o modelo exportado. Substitui o sinalizador obsoleto half. |
device | str | None | Especifica 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 separados por vírgula. |
dnn | bool | False | Se 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. |
plots | bool | True | Quando definido como True, gera e salva gráficos de predições versus ground truth, matrizes de confusão e curvas PR para avaliação visual do desempenho do modelo. |
classes | list[int] | None | Especifica uma lista de IDs de classe para avaliar. Útil para filtrar e focar apenas em certas classes durante a avaliação. |
rect | bool | True | Se True, usa inferência retangular para o lote, reduzindo o preenchimento e potencialmente aumentando a velocidade e a eficiência ao processar imagens na sua proporção original. Ignorado para a validação depth, que estica cada imagem para um quadrado fixo imgsz em vez de preencher. |
split | str | 'val' | Determina a divisão do dataset a ser usada para validação (val, test ou train). Permite flexibilidade na escolha do segmento de dados para avaliação de desempenho. |
project | str | None | Nome do diretório do projeto onde os resultados da validação são salvos. Ajuda a organizar resultados de diferentes experimentos ou modelos. |
name | str | None | Nome da execução de validação. Usado para criar um subdiretório dentro da pasta do projeto, onde os registros e resultados da validação são armazenados. |
verbose | bool | True | Se 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_txt | bool | False | Se True, salva os resultados da detecção em arquivos de texto, com um arquivo por imagem, o que é útil para análises posteriores, pós-processamento personalizado ou integração com outros sistemas. |
save_conf | bool | False | Se 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. |
workers | int | 8 | Número de threads de trabalho para carregamento de dados. Valores maiores 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. |
augment | bool | False | Ativa a augmentação em tempo de teste (TTA) durante a validação, o que pode melhorar a precisão da deteção à custa da velocidade de inferência ao executar a inferência em versões transformadas da entrada. Apenas disponível para modelos PyTorch da Ultralytics. |
agnostic_nms | bool | False | Ativa a Supressão Não Máxima agnóstica de classes, suprimindo caixas sobrepostas com pontuações mais baixas, independentemente da classe prevista. Útil para aplicações centradas em instâncias. Para modelos de ponta a ponta (YOLO26, YOLOv10), isto apenas evita que a mesma deteção apareça com múltiplos rótulos de classe (duplicados com IoU=1.0) e não executa supressão baseada em limiar de IoU entre caixas distintas. |
single_cls | bool | False | Trata 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 de classe não são importantes. |
visualize | bool | False | Visualiza os ground truths, verdadeiros positivos, falsos positivos e falsos negativos para cada imagem. Útil para depuração e interpretação do modelo. |
show_labels | bool | True | Exibe rótulos de classe nas visualizações de validação quando visualize=True. Defina como False para uma visualização mais limpa de correspondências e erros. |
show_conf | bool | True | Exibe pontuações de confiança nas visualizações de validação quando visualize=True. Defina como False para uma visualização mais limpa de correspondências e erros. |
compile | bool ou str | False | Ativa a compilação de grafos PyTorch 2.x torch.compile com backend='inductor'. Aceita True → "default", False → desativa, ou um modo de string como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Retorna para o modo ávido (eager) com um aviso se não for suportado. |
channels_last | bool | False | Usa o formato de memória channels_last (NHWC) para convoluções durante a validação, acelerando GPUs CUDA Tensor Core sem alteração nos resultados. Aplica-se apenas a modelos nativos do PyTorch; ignorado para CPU, MPS e formatos exportados como TensorRT e ONNX. |
end2end | bool | None | Substitui o modo ponta a ponta em modelos YOLO que suportam inferência sem NMS (YOLO26, YOLOv10). Configurá-lo como False permite executar a validação usando o pipeline tradicional de NMS, permitindo adicionalmente o uso do argumento iou. |
Cada uma destas definições desempenha um papel vital 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
Os exemplos abaixo mostram a validação de modelos YOLO com argumentos personalizados em Python e CLI.
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")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())A validação armazena métricas de precisão, revocação, F1, TP, FP e FN por imagem (no limite de IoU de 0,5) para todas as tarefas
exceto classificação. Acede a elas através de results.box.image_metrics para detecçã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:
| Chave | Descrição |
|---|---|
precision | Pontuação de precisão para a imagem (tp / (tp + fp)). |
recall | Pontuação de revocação para a imagem (tp / (tp + fn)). |
f1 | Média harmónica da precisão e do recall. |
tp | Número de verdadeiros positivos para a imagem. |
fp | Número de falsos positivos para a imagem. |
fn | Número de falsos negativos para a imagem. |
Esta funcionalidade está disponível para tarefas de deteção, segmentação, pose e OBB.
| Método | Tipo de Retorno | Descrição |
|---|---|---|
summary() | List[Dict[str, Any]] | Converte os resultados da validação num dicionário resumido. |
to_df() | DataFrame | Devolve os resultados da validação como um Polars DataFrame estruturado. |
to_csv() | str | Exporta os resultados da validação em formato CSV e devolve a string CSV. |
to_json() | str | Exporta os resultados da validação em formato JSON e devolve a string JSON. |
Para mais detalhes, consulta a documentação da classe DataExportMixin.
O que vem a seguir#
Estás satisfeito com as métricas? Exporta o modelo para um formato de implantação. Se a precisão estiver incorreta, volta atrás e retreina com diferentes hiperparâmetros ou mais dados de treino.
FAQ#
Para validar o teu modelo YOLO26, podes usar o modo Val fornecido pela 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-95Em alternativa, podes usar a interface de linha de comandos (CLI):
yolo val model=yolo26n.ptPara mais personalização, podes ajustar vários argumentos como
imgsz,batcheconfnos modos Python e CLI. Consulta a seção Argumentos para Validação de Modelos YOLO para ver a lista completa de parâmetros.A validação do modelo YOLO26 fornece várias métricas-chave para avaliar o desempenho do modelo. Estas incluem:
- mAP50 (Precisão Média média com limiar de IoU de 0,5)
- mAP75 (Precisão Média média com limiar de IoU de 0,75)
- mAP50-95 (Precisão Média média 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 FNPara uma avaliação de desempenho completa, é crucial rever todas estas métricas. Para mais detalhes, consulta os Principais Recursos do Modo Val.
Usar 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 memorizam as suas definições de treino, tornando a validação simples.
- Flexibilidade: Podes validar contra os mesmos ou diferentes conjuntos de dados e tamanhos de imagem.
- Hyperparameter Tuning: As métricas de validação ajudam a ajustar os 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 seção Porquê Validar com o Ultralytics YOLO.
Sim, podes validar o teu modelo YOLO26 usando um custom dataset. Especifica o argumento
datacom o caminho para o YAML do teu dataset, que deve incluir o caminho para os validation data. A classificação, por outro lado, aceita um diretório de dataset ou o nome de um dataset incorporado (por exemplo,imagenet10).NotaA validação é efetuada utilizando os nomes de classes do próprio modelo, que podes ver utilizando
model.names, e que podem ser diferentes daqueles que o próprio dataset define.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-95Exemplo usando CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPara mais opções personalizáveis durante a validação, consulta a seção Exemplo de Validação com Argumentos.
Para guardar os resultados da validação num arquivo JSON, podes definir o argumento
save_jsoncomoTrueao executar a validação. Isto pode ser feito tanto na API Python quanto no 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 CLI:
yolo val model=yolo26n.pt save_json=TrueEsta funcionalidade é particularmente útil para análises adicionais ou integração com outras ferramentas. Consulta os Argumentos para Validação de Modelos YOLO para mais detalhes.