Validação de modelo com Ultralytics YOLO
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.
- 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.ptouYOLO("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.
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.
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 está uma análise detalhada de cada argumento para te ajudar a personalizar as tuas definições de validação eficazmente.
| Argumento | Tipo | Predefinição | Descrição |
|---|---|---|---|
data | str | None | Especifica 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. |
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 da GPU de forma mais eficiente, mas exigem mais VRAM. Ajusta com base nos recursos de hardware disponíveis. |
save_json | bool | False | Se 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. |
conf | float | 0.001 | Define 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. |
iou | float | 0.7 | Define o limiar de Intersection Over Union para a Supressão de Não-Máximos. Controla a eliminação de deteçõ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. |
half | bool | False | Ativa 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. |
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 com separação por vírgula. |
dnn | bool | False | Se 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. |
plots | bool | True | Quando 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. |
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 lotes, reduzindo o preenchimento (padding) e potencialmente aumentando a velocidade e eficiência ao processar imagens no seu rácio de aspeto original. |
split | str | '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. |
project | str | None | Nome do diretório do projeto onde os resultados da validação são guardados. Ajuda a organizar resultados de diferentes experiências ou modelos. |
name | str | None | Nome 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. |
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, 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_conf | bool | False | Se 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. |
workers | int | 8 | Nú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. |
augment | bool | False | Ativa 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_nms | bool | False | Ativa 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_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 deteção binária ou quando as distinções de classe não são importantes. |
visualize | bool | False | Visualiza as verdades absolutas, verdadeiros positivos, falsos positivos e falsos negativos para cada imagem. Útil para depuração e interpretação do modelo. |
compile | bool ou str | False | Ativa 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. |
end2end | bool | None | Substitui 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
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, 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:
| Chave | Descrição |
|---|---|
precision | Pontuação de precisão para a imagem (tp / (tp + fp)). |
recall | Pontuação de recall para a imagem (tp / (tp + fn)). |
f1 | Média harmónica de precisão e 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 | Retorna os resultados da validação como um Polars DataFrame estruturado. |
to_csv() | str | Exporta os resultados da validação em formato CSV e retorna a string CSV. |
to_json() | str | Exporta 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-95Em alternativa, podes usar a interface de linha de comandos (CLI):
yolo val model=yolo26n.ptPara 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 FNPara 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.
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-95Exemplo usando a CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPara 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=TrueEsta 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.