Estado da arte prático em 2026
Ultralytics YOLO (v8 em 2023, v10 em 2024) virou o padrão de facto para treino e deploy rápidos: API pythônica, export nativo pra ONNX/TensorRT/CoreML, suporta detection + segmentation + pose + classification. RT-DETR (Baidu 2023) é a alternativa transformer sem NMS, ótima quando latência é crítica e hardware é GPU moderna.
Ultralytics tem licença AGPL-3.0 — uso interno ou com fonte aberta é fine; SaaS fechado precisa de licença comercial paga. Leia antes de embarcar em produto.
Fine-tune YOLOv10 em dataset próprio
# dataset.yaml
path: ./datasets/meu-dataset
train: images/train
val: images/val
test: images/test
names:
0: capacete
1: colete
2: pessoa-sem-epifrom ultralytics import YOLO
model = YOLO("yolov10s.pt") # pretrained COCO
results = model.train(
data="dataset.yaml",
epochs=100,
imgsz=640,
batch=32,
device=0,
patience=20, # early stopping
optimizer="AdamW",
lr0=1e-3,
cos_lr=True,
augment=True,
project="runs/epi",
name="v10s-640",
)Validação e métricas
metrics = model.val(data="dataset.yaml", split="test")
print(f"mAP@0.5 = {metrics.box.map50:.3f}")
print(f"mAP@0.5:.95 = {metrics.box.map:.3f}")
print(f"precision = {metrics.box.mp:.3f}")
print(f"recall = {metrics.box.mr:.3f}")
# Por classe
for i, name in model.names.items():
print(f"{name}: AP50={metrics.box.ap50[i]:.3f}")Export ONNX e inferência em produção
# Export pra ONNX com NMS embutido
model.export(format="onnx", imgsz=640, dynamic=True, simplify=True, nms=True)
# Gera best.onnx pronto pra Triton, onnxruntime ou TensorRTimport onnxruntime as ort
import numpy as np, cv2
sess = ort.InferenceSession("best.onnx", providers=["CUDAExecutionProvider"])
def infer(img_bgr):
img = cv2.resize(img_bgr, (640, 640))
x = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32) / 255.0
x = x.transpose(2, 0, 1)[None]
outputs = sess.run(None, {"images": x})
return outputs[0] # [N, 6] = x1, y1, x2, y2, conf, classCiclo realista: coletar 500–2000 imagens rotuladas → fine-tune por 100 epochs → validar com mAP@0.5:0.95 em split de teste held-out → exportar ONNX com NMS embutido → benchmark latência em GPU alvo → só então decidir se precisa TensorRT.
Quando escolher RT-DETR
RT-DETR entrega mAP comparável a YOLOv8-L com menor latência em GPUs modernas e sem NMS. Vale quando: (1) pipeline não pode ter NMS como hiperparâmetro, (2) GPU alvo é A100/H100, (3) licença AGPL da Ultralytics é problema (RT-DETR tem Apache-2.0 via PaddleDetection).