partial-label BCE / 19 binary heads / per-attr mask(unknown→mask=0 不算 loss/metric)
資料:cvat2 project 5(6 sources, 106,958 person crops)+ CPPE-5(1,444 person crops via YOLO mapping)= 108,402 total。
2026-04-26 過夜訓練。
v20260427_mobilenetv3l_cppe5 — 6 個版本中 三冠王(最高 val_mAP + 最少 params + 最快訓練)
checkpoint: 5090-2:~/factory_ppe/runs/factory_ppe_v20260427_mobilenetv3l_cppe5/best.pt
* test_mAP 只反映 raicvat_p2 part07,跨 source generalization 沒被測(見已知議題)。
| version | backbone | data | val_mAP | test_mAP | macro_f1 | params | epochs | time |
|---|---|---|---|---|---|---|---|---|
| v20260426_mobilenetv3l | MobileNetV3-L | base 6src | 0.6655 | 0.9850 | 0.9532 | 4.2M | 21 (best=13) | 22 min |
| v20260426_efficientnetb0 | EfficientNet-B0 | base 6src | 0.6512 | 0.9830 | 0.9611 | 4.0M | 33 (best=25) | 37 min |
| v20260426_convnexttiny | ConvNeXt-Tiny | base 6src | 0.6974 | 0.9880 | 0.9605 | 27.9M | 22 (best=16) | 68 min |
| v20260427_efficientnetb0_cppe5 | EfficientNet-B0 | +CPPE-5 | 0.7640 | 0.9829 | 0.9537 | 4.0M | 17 (best=9) | 19 min |
| v20260427_convnexttiny_cppe5 | ConvNeXt-Tiny | +CPPE-5 | 0.7602 | 0.9805 | 0.9421 | 27.9M | 11 (best=5) | 35 min |
| v20260427_mobilenetv3l_cppe5 ⭐ | MobileNetV3-L | +CPPE-5 | 0.7729 | 0.9788 | 0.9480 | 4.2M | 18 (best=10) | 19 min |
觀察:CPPE-5 整合普遍提升 +6~10% val_mAP;MobileNetV3-L 在 CPPE-5 環境下意外超越 ConvNeXt-Tiny。
虛線 = baseline (v20260426)、實線 = +CPPE-5 (v20260427);顏色對應 backbone。
Final epoch val_AP per attribute:
| attribute | v426 (base) | v427 (+CPPE-5) | delta |
|---|---|---|---|
| hard_hat 安全帽 | 0.9698 | 0.9484 | -0.0214 |
| no_head_protection 無護頭 | 0.9974 | 0.9973 | -0.0000 |
| full_face_mask 全面罩 | 0.1773 | 0.4242 | +0.2469 |
| face_mask 口罩 | 0.0711 | 0.9192 | +0.8481 |
| no_gloves 無手套 | 0.9836 | 0.9840 | +0.0004 |
| cotton_gloves 棉手套 | 0.0000 | 0.0000 | +0.0000 |
| rubber_gloves 橡膠手套 | 0.0000 | 0.0000 | +0.0000 |
| no_protective_clothing 無防護衣 | 0.0000 | 0.0000 | +0.0000 |
| cleanroom_suit 無塵衣 | 1.0000 | 1.0000 | +0.0000 |
| splash_proof_gown 防潑罩袍 | 1.0000 | 1.0000 | +0.0000 |
| safety_vest 反光背心 | 0.9730 | 0.9603 | -0.0127 |
| safety_shoes 安全鞋 | 0.0000 | 0.0000 | +0.0000 |
| no_safety_shoes 無安全鞋 | 0.2157 | 0.1586 | -0.0571 |
| no_sleeves 無絕緣袖 | 0.0000 | 0.0000 | +0.0000 |
| heartbeat 生命徵象器 | 0.0000 | 0.0000 | +0.0000 |
| sleeves 絕緣袖 | 0.0000 | 0.0000 | +0.0000 |
| safety_glasses 護目鏡 | 0.6750 | 0.7219 | +0.0468 |
| hair_cover 髮帽 | 0.0000 | 0.0000 | +0.0000 |
| helmet_goggles 頭盔護目 | 0.0000 | 1.0000 | +1.0000 |
關鍵突破:face_mask AP 從 0.07 → 0.92(+0.85);helmet_goggles 從 0 → 1.00(+1.0); full_face_mask 從 0.18 → 0.42(CPPE-5 沒直接補卻 transfer learning +0.25)。
v20260427_mobilenetv3l_cppe5 在 test split (raicvat_p2 part07, 6459 samples):
| attribute | AP | F1 | P | R | best_thr |
|---|---|---|---|---|---|
| hard_hat 安全帽 | 0.984 | 0.964 | 0.953 | 0.976 | 0.47 |
| no_head_protection 無護頭 | 0.979 | 0.946 | 0.959 | 0.933 | 0.51 |
| full_face_mask 全面罩 | val 無 mask=1 sample(無法評估) | ||||
| face_mask 口罩 | val 無 mask=1 sample(無法評估) | ||||
| no_gloves 無手套 | val 無 mask=1 sample(無法評估) | ||||
| cotton_gloves 棉手套 | val 無 mask=1 sample(無法評估) | ||||
| rubber_gloves 橡膠手套 | val 無 mask=1 sample(無法評估) | ||||
| no_protective_clothing 無防護衣 | val 無 mask=1 sample(無法評估) | ||||
| cleanroom_suit 無塵衣 | val 無 mask=1 sample(無法評估) | ||||
| splash_proof_gown 防潑罩袍 | val 無 mask=1 sample(無法評估) | ||||
| safety_vest 反光背心 | 0.973 | 0.934 | 0.935 | 0.933 | 0.58 |
| safety_shoes 安全鞋 | val 無 mask=1 sample(無法評估) | ||||
| no_safety_shoes 無安全鞋 | val 無 mask=1 sample(無法評估) | ||||
| no_sleeves 無絕緣袖 | val 無 mask=1 sample(無法評估) | ||||
| heartbeat 生命徵象器 | val 無 mask=1 sample(無法評估) | ||||
| sleeves 絕緣袖 | val 無 mask=1 sample(無法評估) | ||||
| safety_glasses 護目鏡 | val 無 mask=1 sample(無法評估) | ||||
| hair_cover 髮帽 | val 無 mask=1 sample(無法評估) | ||||
| helmet_goggles 頭盔護目 | val 無 mask=1 sample(無法評估) | ||||
用 5090-2:~/factory_ppe/scripts/infer_ppe_v427.py 對 GUANXI 商場路人 (task1639 frame 0 person 0) 預測:
# task1639_f000000_p0.jpg attribute prob pred no_protective_clothing 0.9999 yes ← no_gloves 0.9996 yes ← no_sleeves 0.9993 yes ← no_safety_shoes 0.9991 yes ← no_head_protection 0.9930 yes ← hard_hat 0.0078 no safety_vest 0.0039 no helmet_goggles 0.0003 no ... (其他 14 個 PPE positive 都是 no)
對「全裸路人」negative 預測完美,與 user 手動 review 結果一致。
所有 script 在 5090-2:~/factory_ppe/scripts/:
export_p5_v3.py — cvat2 project 5 → manifest_v3.csvcppe5_preprocess.py — CPPE-5 parquet → image + YOLO person + mappingcppe5_to_crops.py — 合成 manifest_v4.csv(manifest_v3 + 1444 cppe5)train_p9_attr_v4.py — 19-head BCE + per-attr mask 訓練infer_ppe_v427.py — 單張 inference helperplot_curves.py — 訓練曲線視覺化
報告生成時間:2026-04-26|過夜自動訓練(/loop dynamic mode)
詳細 markdown:5090-2:~/factory_ppe/v20260427_complete.md