Vigilante.AI — PPE Detection (YOLOv8s)

Detector YOLOv8s treinado especificamente para o Vigilante.AI, plataforma de monitoramento em tempo real de uso de Equipamentos de Proteção Individual (EPI) em canteiros de obra e ambientes industriais.

Detecta o EPI e a violação em streams RTSP, webcams e imagens. Roda em produção como parte do stack do Vigilante.AI alimentando um painel multi-tenant de compliance.

Architecture: YOLOv8s-P2 (Ultralytics) fine-tuned from COCO weights. A cabeça extra de stride 4 existe porque um capacete em câmera de obra ocupa 10-25 px: em stride 8 uma caixa de 12 px cobre ~1.5x1.5 células e quase não recebe âncoras.

Por que a violação é uma classe, e não uma inferência

A versão anterior deste modelo tinha 2 classes e derivava a violação da ausência de detecção: nenhuma caixa de capacete sobre a cabeça implicava "capacete ausente". Medido em 2.808 frames de 10 obras reais onde todos os trabalhadores usavam EPI (portanto toda acusação é erro por construção), esse esquema errava de 26% a 96% conforme o portão de detecção abria. Cada falha de detecção virava acusação contra alguém em conformidade.

As classes 2 e 3 substituem esse palpite por evidência: uma cabeça descoberta precisa ser vista. Na mesma footage, com os pesos deste card, a acusação por detecção direta errou 0 de 641.

Classes

id name description
0 helmet Capacete de segurança
1 vest Colete de alta visibilidade
2 head Cabeça SEM capacete, ou seja a violação
3 no_vest Torso SEM colete, ou seja a violação

Validation metrics (final epoch)

Metric Value
Precision 0.8097
Recall 0.7706
mAP@0.5 0.8064
mAP@0.5:0.95 0.5555
Epochs trained 117

Per-class, held-out test split (1.828 imagens, 6.021 caixas)

class gt P R mAP@0.5 mAP@0.5:0.95
helmet 4390 0.923 0.945 0.975 0.650
vest 292 0.845 0.846 0.901 0.631
head 1319 0.882 0.913 0.939 0.645
no_vest 20 0.807 0.650 0.650 0.377

tem apenas 20 caixas de ground truth no teste. Trate esse número como indicativo, não como medida.

Recall vs escala do objeto

Métrica in-domain é medida em imagens onde a cabeça ocupa ~1% da área. Numa câmera de obra real ela ocupa 0,01% a 0,09%, duas ordens de grandeza a menos. O teste abaixo mantém os rótulos e encolhe os pixels, colocando cada imagem de teste reduzida num canvas 960x720:

escala helmet vest head no_vest
1.0 0.896 0.822 0.841 0.550
0.5 0.928 0.781 0.879 0.400
0.3 0.898 0.753 0.845 0.250
0.2 0.818 0.668 0.757 0.090

sobrevive à redução de 5x. desmorona e por isso não deve dirigir alertas sozinho.

Limitações

  • Recall em domínio real não foi medido. As tabelas acima usam imagens do dataset, encolhidas ou não. Footage pública de obra é 100% em conformidade, então serve para medir alarme falso mas não recall de violação. Fechar isso exige footage rotulada com violações reais em ângulo de CCTV.
  • O split de validação sai das mesmas fontes do treino, então mAP alto aqui não prova desempenho em campo. A versão anterior marcou mAP@0.5 = 0.944 e falhava quase por completo em câmera real.
  • é fraco. Em produção o Vigilante.AI o mantém fora das classes de violação confiáveis e continua inferindo colete por ausência.

Training setup

Param Value
Base model yolov8s-p2.yaml
Pretrained yolov8s.pt (COCO)
Image size 960
Batch size 12
Optimizer SGD
Initial LR 0.01, cosine
Epochs 117
scale 0.9
mosaic 1.0, close_mosaic 20

é a escolha que mais importa. sorteia em uniform(1-s, 1+s), então 0.9 espalha um capacete frontal de 60 px entre 6 e 114 px e cobre a faixa de deploy. O valor anterior, 0.5, parava em 30 px, o dobro do que a câmera entrega.

Dataset

Merged from public PPE datasets on Roboflow Universe, mapped onto the 4-class schema:

  • Personal Protective Equipment Combined Model
  • Hard Hats
  • Hard Hat Universe
  • Safety Vests
  • vest-qf3av
  • vest-pbrbu

68.141 pares imagem+rótulo coletados, dos quais a deduplicação por average-hash removeu 31.567 (46%), sobrando 36.574 imagens: train 29.260, val 5.486, test 1.828.

Essas fontes já traziam as classes de violação (, , ) e o merge anterior as descartava. Recuperá-las adicionou ~42.700 caixas de cabeça descoberta sem baixar um único dataset novo.

Distribuição no train: helmet 68.149, head 20.480, vest 4.631, no_vest 282. O desbalanceamento não foi corrigido por oversampling: na versão anterior a classe minoritária teve desempenho melhor que a majoritária, o que indica que o gargalo é resolução, não frequência.

Augmentation

YOLO built-ins apenas: mosaic, HSV jitter, perspective, scale, translate, horizontal flip. Sem Albumentations offline. , e ficaram em zero de propósito: os dois últimos são no-ops silenciosos em rótulos que só têm caixa.

Quick start

Download

Drop into the Vigilante.AI backend

Intended use

Construído para monitoramento de compliance de EPI em tempo real no Vigilante.AI — canteiros de obra, fábricas, galpões e ambientes industriais. Otimizado para streams RTSP / IP-cam, mas funciona em qualquer fonte de imagem suportada pelo Ultralytics (vídeo, webcam, imagem).

Use cases cobertos pelo Vigilante.AI usando este modelo:

  • Detecção em tempo real de trabalhadores sem capacete ou colete
  • Geração de alertas com snapshot do frame para revisão por supervisor
  • Active learning loop: feedback (correto / falso positivo) gera amostras YOLO para retreino
  • Reporting multi-tenant de compliance por câmera / site / período

Limitations

  • Trained on 4 classes only (helmet, vest, head, no_vest). Does not detect gloves, boots, glasses, masks, etc.
  • Performance degrades under extreme occlusion, very low resolution (< 320 px), or unusual viewpoints not represented in training data.
  • May confuse high-vis clothing that is not a vest (e.g., jackets) with the vest class.
  • No bias evaluation across demographics has been performed.

Citation / créditos

Modelo treinado para o projeto Vigilante.AI — sistema completo de monitoramento de EPI com backend FastAPI multi-tenant, frontend Next.js, simulador RTSP via mediamtx, observabilidade com Prometheus + structlog, e pipeline de active learning integrado.

Repositório: https://github.com/badmuriss/vigilante-ai

License

AGPL-3.0 (inherited from Ultralytics YOLOv8).

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