Link to this sectionValidação de Modelo com Ultralytics YOLO#
Link to this sectionIntrodução#
A validação é uma etapa crítica no pipeline de machine learning, permitindo que tu 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 object detection. Este guia serve como um recurso completo para entender como usar efetivamente o modo Val para garantir que os teus modelos sejam precisos e confiáveis.
Watch: Ultralytics Modes Tutorial: Validation
Link to this sectionPor que Validar com Ultralytics YOLO?#
Aqui está o porquê de usar o modo Val do YOLO26 ser 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 incorporadas que memorizam as definições de treino, simplificando o processo de validação.
- Flexibilidade: Valida o teu modelo com os mesmos ou diferentes datasets e tamanhos de imagem.
- Hyperparameter Tuning: Usa métricas de validação para ajustar o teu modelo para um melhor desempenho.
Link to this sectionPrincipais Características 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 Multi-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 Python API com base na tua preferência para validação.
- Compatibilidade de Dados: Funciona perfeitamente com datasets usados durante a fase de treino, bem como com datasets personalizados.
- Os modelos YOLO26 memorizam automaticamente as suas definições de treino, por isso podes validar um modelo facilmente com o mesmo tamanho de imagem e no dataset original apenas com
yolo val model=yolo26n.ptouYOLO("yolo26n.pt").val()
Link to this sectionExemplos de Utilização#
Valida a accuracy de um modelo YOLO26n treinado no dataset COCO8. Não são necessários argumentos, uma vez que o model retém os seus data e argumentos de treino 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 iniciar a validação como um script. Adiciona um bloco if __name__ == "__main__": antes do teu código de validação para o resolver.
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 FNLink to this sectionArgumentos para Validação de Modelo 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, processamento em lote e limiares de desempenho. Abaixo tens uma análise detalhada 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 ficheiro de configuração do dataset (por exemplo, coco8.yaml). Este ficheiro deve incluir o caminho para os validation data. |
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 elevados utilizam a memória da GPU de forma mais eficiente, mas requerem mais VRAM. Ajusta com base nos recursos de hardware disponíveis. |
save_json | bool | False | Se definido como 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 o COCO. |
conf | float | 0.001 | Define o limiar de confiança mínimo para deteções. Valores mais baixos aumentam o recall, mas podem introduzir mais falsos positivos. Usado durante a validation para calcular curvas de precisão-recall. Por defeito, é 0.01 para validação OBB para reduzir a utilização de memória. |
iou | float | 0.7 | Define o limiar de Intersection Over Union para a Non-Maximum Suppression. 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 em meia-precision (FP16), reduzindo o uso de memória e potencialmente aumentando a velocidade com impacto mínimo na accuracy. |
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 definido como True, utiliza o módulo DNN do OpenCV para 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 guarda gráficos de previsõ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 classes para avaliar. Útil para filtrar e focar apenas em certas classes durante a avaliação. |
rect | bool | True | Se definido como True, usa inferência retangular para processamento em lote, reduzindo o preenchimento e potencialmente aumentando a velocidade e eficiência ao processar imagens na sua proporção original. |
split | str | 'val' | Determina a divisão do dataset 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 os 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 definido como True, apresenta informações detalhadas durante o processo de validação, incluindo métricas por classe, progresso do lote e informações de depuração adicionais. |
save_txt | bool | False | Se definido como 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 definido como True, inclui valores de confiança nos ficheiros de texto guardados quando save_txt está ativado, fornecendo resultados mais detalhados para análise e filtragem. |
workers | int | 8 | Número de threads de trabalho para carregamento de dados. Valores mais elevados 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 o aumento de teste (TTA) durante a validação, potencialmente melhorando a precisão da deteção à custa da velocidade de inferência, ao executar a inferência em versões transformadas da entrada. |
agnostic_nms | bool | False | Ativa a Non-Maximum Suppression agnóstica de 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últiplas etiquetas de classe (duplicados IoU=1.0) e não realiza supressão baseada em limiar 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 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 | Apresenta etiquetas de classe em visualizações de validação quando visualize=True. Define como False para uma vista mais limpa de correspondências e erros. |
show_conf | bool | True | Apresenta pontuações de confiança em visualizações de validação quando visualize=True. Define como False para uma vista mais limpa de correspondências e erros. |
compile | bool ou str | False | Ativa a compilação de gráfico 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". Volta ao modo 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). Defini-lo como False permite que corras a validação usando o pipeline NMS tradicional, permitindo adicionalmente que utilizes o 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.
Link to this sectionExemplo 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 do modelo 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 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 da 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 resultados de validação em um 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, consulte a documentação da classe DataExportMixin.
Link to this sectionFAQ#
Link to this sectionComo valido meu modelo YOLO26 com Ultralytics?#
Para validar seu modelo YOLO26, você pode usar o modo Val fornecido pela Ultralytics. Por exemplo, usando a API Python, você pode 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-95Alternativamente, você pode usar a interface de linha de comando (CLI):
yolo val model=yolo26n.ptPara maior personalização, você pode ajustar vários argumentos como imgsz, batch e conf tanto no modo Python quanto no modo CLI. Verifique a seção Argumentos para Validação de Modelo YOLO para a lista completa de parâmetros.
Link to this sectionQuais métricas posso obter da validação do modelo YOLO26?#
A validação do modelo YOLO26 fornece várias métricas importantes para avaliar o desempenho do modelo. Elas incluem:
- mAP50 (mean Average Precision no limiar de IoU de 0.5)
- mAP75 (mean Average Precision no limiar de IoU de 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, você pode acessar essas 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 revisar todas essas métricas. Para mais detalhes, consulte os Principais Recursos do Modo Val.
Link to this sectionQuais são as vantagens de usar Ultralytics YOLO para validação?#
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 lembram suas configurações de treinamento, tornando a validação simples.
- Flexibilidade: Você pode validar em relação a conjuntos de dados e tamanhos de imagem iguais ou diferentes.
- Ajuste de Hiperparâmetros: As métricas de validação ajudam a ajustar modelos para um melhor desempenho.
Esses benefícios garantem que seus modelos sejam avaliados minuciosamente e possam ser otimizados para resultados superiores. Saiba mais sobre essas vantagens na seção Por que validar com Ultralytics YOLO.
Link to this sectionPosso validar meu modelo YOLO26 usando um conjunto de dados personalizado?#
Sim, você pode validar seu modelo YOLO26 usando um conjunto de dados personalizado. Especifique o argumento data com o caminho para o seu arquivo de configuração do conjunto de dados. Este arquivo deve incluir o caminho para os dados de validação.
A validação é realizada usando os próprios nomes de classe do modelo, que você pode visualizar usando model.names, e que podem ser diferentes daqueles especificados no arquivo 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 CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPara mais opções personalizáveis durante a validação, consulte a seção Exemplo de Validação com Argumentos.
Link to this sectionComo salvo os resultados da validação em um arquivo JSON no YOLO26?#
Para salvar os resultados da validação em um arquivo JSON, você pode definir o argumento save_json como True ao executar a validação. Isso pode ser feito tanto na API Python quanto 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 CLI:
yolo val model=yolo26n.pt save_json=TrueEsta funcionalidade é particularmente útil para análises posteriores ou integração com outras ferramentas. Verifique os Argumentos para Validação de Modelo YOLO para mais detalhes.