PavimentOS-YOLO11l (H100) — Detector de Defeitos em Pavimentos

Curvas de treino

Detector de objetos baseado na arquitetura YOLO11l (Ultralytics) treinado para identificar cinco categorias de defeitos em pavimentos urbanos a partir de imagens de superfície rodoviária. Treinado em NVIDIA H100 80GB (Lightning AI) com dataset consolidado de 7 países (RDD2022) + imagens brasileiras (Roboflow). Versão de alta precisão — modelo irmão menor (yolo11s, Colab/T4) está disponível para inferência em CPU de baixo custo.

Sumário Executivo

Item Valor
Arquitetura YOLO11l
Parâmetros 25.3M
GFLOPs 86.6
Resolução de treino 640x640
Resolução de inferência 640x640
Classes 5
Dataset de teste 2.465 imagens / 6.063 instâncias
mAP@0.5 0.637
mAP@0.5:0.95 0.325
Precision 0.664
Recall 0.586
GPU de treino NVIDIA H100 80GB HBM3 (Lightning AI)
Épocas 15 (interrompidas por tempo — early stop em 30)
Velocidade de inferência (val) 2.8ms / imagem (H100)

Classes

ID Classe Descrição
0 buraco Degradamento profundo do pavimento (buraco / pothole)
1 trinca_longitudinal Trinca no sentido da via
2 trinca_transversal Trinca perpendicular à via
3 trinca_malha Trinca em malha / couro de jacaré (alligator cracking)
4 tampa_bueiro Tampa de bueiro / grelha de drenagem

Métricas por Classe (conjunto de teste)

Classe Precision Recall mAP@0.5 mAP@0.5:0.95
all 0.664 0.586 0.637 0.325
buraco 0.631 0.401 0.493 0.219
trinca_longitudinal 0.632 0.528 0.569 0.302
trinca_transversal 0.586 0.521 0.553 0.257
trinca_malha 0.701 0.608 0.680 0.357
tampa_bueiro 0.770 0.871 0.890 0.489

Matriz de Confusão (normalizada)

Matriz de confusão

Curva Precision-Recall

Curva PR

Amostras de Predição (validação)

Predições

Como Usar

Python (Ultralytics)

from ultralytics import YOLO

# Carrega direto do Hugging Face
model = YOLO("hf://Kodjaoglanian/pavimentos-yolo11x-v2/weights/best.pt")

results = model("imagem.jpg", conf=0.25, imgsz=640)
for r in results:
    for box in r.boxes:
        cls_id = int(box.cls[0])
        conf = float(box.conf[0])
        x1, y1, x2, y2 = box.xyxy[0].tolist()
        print(f"{model.names[cls_id]}: {conf:.2f} {[round(v) for v in [x1,y1,x2,y2]]}")

ONNX Runtime (CPU, sem PyTorch)

import onnxruntime as ort
import cv2, numpy as np

session = ort.InferenceSession("best.onnx")
img = cv2.imread("imagem.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (640, 640))  # resolução fixa
img = (img.astype(np.float32) / 255.0)[None].transpose(0, 3, 1, 2)
out = session.run(None, {session.get_inputs()[0].name: img})

CLI (Ultralytics)

yolo predict model=hf://Kodjaoglanian/pavimentos-yolo11x-v2/weights/best.pt source=./imagens/ imgsz=640

Detecção em vídeo (script incluído)

Os scripts detectar_video.py e rodar_modelo.py (neste projeto) fazem inferência em tempo real:

huggingface-cli download Kodjaoglanian/pavimentos-yolo11x-v2 exports/best.torchscript --local-dir ./modelo
python detectar_video.py --model ./modelo/best.torchscript --video rua.mp4 --imgsz 416

Nota sobre formatos: ONNX e OpenVINO foram exportados com entrada fixa em 640x640. Para inferência em resolução variável, use best.torchscript (TorchScript) ou o .pt original.

Formatos Disponíveis

Formato Tamanho Caminho no repo Entrada
PyTorch 145 MB weights/best.pt Dinâmica
TorchScript 97 MB exports/best.torchscript Dinâmica
ONNX 97 MB exports/best.onnx Fixa 640x640
OpenVINO 97 MB exports/best_openvino_model/ Fixa 640x640

TensorRT não foi incluído pois a instalação do tensorrt-cu12 falhou no ambiente da H100 (Lightning AI).

Detalhes do Treino

Dataset

Imagens consolidadas a partir de duas fontes:

  • RDD2022 — 7 países (Japão, Índia, República Tcheca, Noruega, EUA, China motorbike, China drone)
  • Brasil — Imagens brasileiras via Roboflow

Após mapeamento de classes (consolidando rótulos distintos para um esquema unificado) e remoção de 4 classes com anotações insuficientes (remendo, afundamento, desgaste, poça de água), o dataset final tem:

Split Imagens Instâncias
Treino ~45.000 ~110.000
Validação ~2.500 ~6.000
Teste 2.465 6.063

Hiperparâmetros

Parâmetro Valor
Modelo base yolo11l.pt (pré-treinado COCO)
Épocas planejadas 30
Épocas executadas 15 (interrompidas por orçamento de créditos)
Early stopping (patience) 15
Tamanho de imagem 640
Batch auto (~24 na H100)
Otimizador auto (SGD c/ momentum)
LR inicial 0.01
LR final 0.01 (coseno)
Cache de dados disk
Dropout 0.1
Mosaic 1.0 (fecha na época 10)
Mixup 0.15
Copy-paste 0.3
HSV (H/S/V) 0.015 / 0.7 / 0.4
Rotação (degrees) 10.0
Flip horizontal 0.5
Auto-augment randaugment
Erasing 0.4
Workers 16

Hardware

  • GPU: NVIDIA H100 80GB HBM3 (Lightning AI cloud)
  • Memória usada: ~24 GB (batch auto)
  • Tempo por época: ~6min42s (1186 batches)
  • Créditos: 11 créditos a $4.50/h (~2h44min)
  • Treino total executado: 15 épocas (~1h41min)
  • Pós-processamento: validação + exportação + upload automáticos (finalizar_treino.py)

Aumento de Dados

Toda a augmentação é feita online na GPU durante o treino (Ultralytics nativo): mosaic, mixup, copy-paste, HSV jitter, rotação (até 10°), flip horizontal, escala/translação, randaugment e erasing. Sem augmentação offline (Albumentations) — o pipeline na GPU é mais rápido e não desperdiça espaço em disco.

Estrutura do Repositório

weights/
  best.pt                 Pesos PyTorch (melhor época 15)
  last.pt                 Pesos da última época
exports/
  best.onnx               ONNX (opset 12, entrada fixa 640x640)
  best.torchscript        TorchScript (entrada dinâmica)
  best_openvino_model/    OpenVINO IR (.xml/.bin/.yaml)
runs/
  args.yaml               Configuração completa do treino
  results.csv             Métricas por época (1-15)
  confusion_matrix.png            Matriz de confusão
  confusion_matrix_normalized.png Matriz de confusão (normalizada)
  BoxPR_curve.png         Curva Precision-Recall
  BoxF1_curve.png         Curva F1
  BoxP_curve.png          Curva Precision
  BoxR_curve.png          Curva Recall
  labels.jpg              Distribuição de labels no dataset
  val_batch0_labels.jpg   Validação: ground-truth
  val_batch0_pred.jpg     Validação: predições
  val_batch1_labels.jpg   (mais amostras)
  val_batch1_pred.jpg
  val_batch2_labels.jpg
  val_batch2_pred.jpg
  train_batch0.jpg        Lotes de treino (com augmentação)
  train_batch1.jpg
  train_batch2.jpg

Treino — Evolução das Métricas

Época mAP50 mAP50-95 Precision Recall
1 0.355 0.153 0.469 0.376
5 0.438 0.198 0.504 0.443
10 0.579 0.288 0.634 0.540
12 0.610 0.307 0.647 0.564
15 (final) 0.644 0.330 0.689 0.574

Curva de treino ainda em subida quando interrompida — com as 30 épocas planejadas, projetava-se mAP@0.5 entre 0.65 e 0.68.

Comparação com modelo yolo11s (Colab/T4)

Modelo irmão menor, treinado em Google Colab (Tesla T4) com dataset apenas brasileiro:

Métrica yolo11l (este, H100) yolo11s (Colab/T4)
Parâmetros 25.3M 9.4M
GFLOPs 86.6 21.3
Resolução de treino 640 512
Dataset RDD2022 7 países + Brasil Apenas Brasil
Imagens de teste 2465 1317
mAP50 0.637 0.594
mAP50-95 0.325 0.293
Precision 0.664 0.642
Recall 0.586 0.550
Treino (H100 vs T4) ~1h41 / 15 épocas ~2h48 / 30 épocas

O yolo11l é ~2.7x mais pesado mas ganha ~4% de mAP50 — a recomendação é: use yolo11l (H100) quando precisar da melhor precisão e tiver GPU/CPU potente; use yolo11s (Colab) para inferência em CPU local em tempo real ou dispositivos embarcados.

Licença

A arquitetura YOLO11 é licenciada sob AGPL-3.0 pela Ultralytics. O dataset RDD2022 possui seus próprios termos. Para uso comercial, consulte a licença em docs.ultralytics.com/license.

Citação

@software{pavimentos_yolo11l_h100,
  author  = {Bruno Kodjaoglanian Cardoso Tulux},
  title   = {PavimentOS-YOLO11l — Pavement Defect Detection},
  year    = {2026},
  url     = {https://huggingface.co/Kodjaoglanian/pavimentos-yolo11x-v2}
}

Referências

Downloads last month
136
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support