SafeSight PPE β€” Construction Site Safety Detector (YOLOv8)

A YOLOv8 model fine-tuned to detect personal protective equipment (PPE) and safety violations on construction sites. Built as part of SafeSight, an AI-powered construction safety monitoring system.

Why this model

Most public PPE datasets only cover a handful of classes (hard hat, vest, person). They don't cover the full range of equipment and violations that real construction safety monitoring needs. No single existing dataset covered everything required for this project, so multiple datasets were combined and the model was fine-tuned on the merged set.

Classes (19 total)

ID Class ID Class
0 Boots 10 No-Helmet
1 Ear-Protection 11 No-Mask
2 Glass 12 No-Vest
3 Glove 13 Worker
4 Hard_hat 14 Vest
5 Mask 15 Circular_Saw
6 No-Boots 16 Fire_Extinguisher
7 No-Ear-Protection 17 Fire_prevention_Net
8 No-Glass 18 Welding_Equipment
9 No-Glove

The model detects both presence of PPE (e.g. Hard_hat) and absence/violations (e.g. No-Helmet) as distinct classes, plus site equipment relevant to hazard context (fire extinguishers, welding equipment, saws).

Training

  • Base model: YOLOv8
  • Epochs: 60
  • Dataset size: ~13,000 training images, combined from multiple sources (primarily Roboflow, plus at least one additional GitHub-sourced dataset)
  • Full training config in args.yaml

Results

Metric Value
mAP50 ~0.76
mAP50-95 ~0.43
Precision ~0.81
Recall ~0.72

See results.png for full training curves and confusion_matrix.png / confusion_matrix_normalized.png for per-class performance.

Example Detections

Validation predictions

Known limitations

  • Ear-Protection class is underrepresented β€” significantly fewer correct detections than other classes, likely due to limited examples in the combined dataset. Treat predictions for this class with caution.
  • Background false negatives β€” several classes (notably Boots, No-Ear-Protection, No-Glove) are sometimes missed entirely rather than misclassified, suggesting the model under-detects in certain conditions rather than confusing classes.
  • Training was stopped at 60 epochs while loss was still decreasing. Further training on a larger/more balanced dataset would likely improve mAP50-95 further, particularly for underrepresented classes.
  • Performance has not been validated on construction sites outside the source datasets' geography/conditions.

Usage

from ultralytics import YOLO

model = YOLO("best.pt")
results = model.predict("path/to/image.jpg")

for r in results:
    r.show()  # display detections
    print(r.boxes)  # class ids, confidence, bounding boxes

License

Apache 2.0. Base YOLOv8 architecture by Ultralytics (AGPL-3.0 for their own codebase β€” check Ultralytics licensing if using their training pipeline commercially). Training data combined from multiple public sources; individual dataset licenses may apply to the underlying data, not to these fine-tuned weights.

Downloads last month
60
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support