Instructions to use badmuriss/ppe-detection-yolov8s with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use badmuriss/ppe-detection-yolov8s with ultralytics:
from ultralytics import YOLOvv8 model = YOLOvv8.from_pretrained("badmuriss/ppe-detection-yolov8s") source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
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)
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