Computer Vision2025Team course project · manuscript public
Semi-Supervised PPE Detection
Finds missing safety gear on construction sites, trained with hand labels on only 20% of the images.
Detects helmets and safety vests in construction-site footage, then marks each worker compliant or in violation. Trained on the public SH17 dataset. The 50-epoch training log and the manuscript are public.
mAP@50 by epoch
View as table
| Epoch | mAP@50 | mAP@50-95 | Precision | Recall |
|---|---|---|---|---|
| 1 | 0.373 | 0.220 | 0.545 | 0.368 |
| 2 | 0.372 | 0.221 | 0.593 | 0.361 |
| 3 | 0.389 | 0.231 | 0.569 | 0.379 |
| 4 | 0.392 | 0.232 | 0.498 | 0.376 |
| 5 | 0.422 | 0.255 | 0.569 | 0.399 |
| 6 | 0.422 | 0.257 | 0.549 | 0.416 |
| 7 | 0.445 | 0.267 | 0.626 | 0.428 |
| 8 | 0.478 | 0.292 | 0.603 | 0.447 |
| 9 | 0.470 | 0.289 | 0.594 | 0.442 |
| 10 | 0.502 | 0.311 | 0.623 | 0.470 |
| 11 | 0.504 | 0.313 | 0.577 | 0.507 |
| 12 | 0.513 | 0.321 | 0.606 | 0.493 |
| 13 | 0.523 | 0.328 | 0.661 | 0.494 |
| 14 | 0.528 | 0.332 | 0.666 | 0.485 |
| 15 | 0.536 | 0.336 | 0.642 | 0.502 |
| 16 | 0.538 | 0.344 | 0.681 | 0.498 |
| 17 | 0.553 | 0.345 | 0.673 | 0.515 |
| 18 | 0.544 | 0.349 | 0.727 | 0.480 |
| 19 | 0.558 | 0.355 | 0.667 | 0.510 |
| 20 | 0.545 | 0.353 | 0.674 | 0.520 |
| 21 | 0.547 | 0.351 | 0.662 | 0.517 |
| 22 | 0.572 | 0.367 | 0.703 | 0.535 |
| 23 | 0.563 | 0.361 | 0.668 | 0.530 |
| 24 | 0.571 | 0.371 | 0.666 | 0.533 |
| 25 | 0.567 | 0.363 | 0.665 | 0.543 |
| 26 | 0.578 | 0.372 | 0.681 | 0.547 |
| 27 | 0.587 | 0.381 | 0.669 | 0.545 |
| 28 | 0.581 | 0.381 | 0.677 | 0.555 |
| 29 | 0.590 | 0.382 | 0.746 | 0.523 |
| 30 | 0.597 | 0.390 | 0.702 | 0.545 |
| 31 | 0.593 | 0.386 | 0.729 | 0.537 |
| 32 | 0.600 | 0.392 | 0.734 | 0.554 |
| 33 | 0.594 | 0.392 | 0.699 | 0.556 |
| 34 | 0.601 | 0.393 | 0.678 | 0.568 |
| 35 | 0.587 | 0.384 | 0.724 | 0.539 |
| 36 | 0.606 | 0.401 | 0.689 | 0.573 |
| 37 | 0.606 | 0.398 | 0.685 | 0.575 |
| 38 | 0.605 | 0.395 | 0.715 | 0.562 |
| 39 | 0.606 | 0.395 | 0.685 | 0.582 |
| 40 | 0.621 | 0.407 | 0.751 | 0.559 |
| 41 | 0.605 | 0.394 | 0.678 | 0.576 |
| 42 | 0.597 | 0.397 | 0.739 | 0.533 |
| 43 | 0.606 | 0.403 | 0.718 | 0.560 |
| 44 | 0.611 | 0.403 | 0.725 | 0.557 |
| 45 | 0.613 | 0.408 | 0.739 | 0.558 |
| 46 | 0.611 | 0.408 | 0.717 | 0.558 |
| 47 | 0.611 | 0.406 | 0.742 | 0.553 |
| 48 | 0.613 | 0.408 | 0.722 | 0.564 |
| 49 | 0.614 | 0.408 | 0.728 | 0.562 |
| 50 | 0.614 | 0.409 | 0.704 | 0.573 |
+0.128
mAP@50 gained by pseudo-labeling at the best epoch, with the same hand labels.
- Supervised10% labels0.371
- Supervised20% labels0.493
- Semi-supervised20% labels0.621
How it works
01Baseline
Train YOLOv9-c on the 20% labeled split.
02Pseudo-label
Run the baseline over the other 80% and keep detections above a confidence threshold.
03Retrain
Train again on labeled and pseudo-labeled data together.
04Comply
Match each PPE box to a person by IoU, then mark that worker compliant or in violation.