🦺 PPE 21-attr SOTA 研究報告

2026-05-18 · cvat2 #12 partial-label test split (12,856 rows) · 8 hr autonomous research on 5090-2

核心結論:Phase 5 Ensemble 在 21 個可評估 attr 平均 recall @ precision≥0.95 達到 0.9142,比現役 v515b baseline (0.8062) 提升 +10.8 個百分點。

這次研究的主指標是 recall @ precision≥0.95(每個 attr 在 precision 鎖定 95% 下能拉到的 recall)— 這是「低誤報率」場景最相關的指標,比 mAP / F1 更貼近 production iSeek 通報需求。

📊 整體指標總覽

v515b baseline0.806mean R@P95
CvN-Base + TTA0.881+7.4 pp
CvN-Large + TTA0.882+7.6 pp
Phase 5 Ensemble ⭐0.914+10.8 pp
Stackmean R@P95mean F1maxmean AP推論成本備註
v504 (production)0.80590.9178MobileNetV3-L 21-attr
v515 multitask (22-attr)0.80070.9418strong aug + harness neg_w=20
v515b (22-attr)0.80620.93060.9616camaug + 對齊 v504
VLM Qwen2.5-VL-3B zero-shot0.19480.7149~5×3-point P-R curve 限制
ConvNeXt-Base (fine-tune)0.87290.94830.9723新訓,88M params
ConvNeXt-Base + hflip TTA0.88060.94910.9729+0.0077 free lift
ConvNeXt-Large (fine-tune)0.87100.94990.9724新訓,198M params,ep9 早停
ConvNeXt-Large + hflip TTA0.88220.95080.9731+0.0112 free lift
ViT-Base DINOv3 + TTA0.86760.9444新訓,frozen DINOv3 backbone
ViT-Large SigLIP + TTA0.83590.9290新訓,305M params
Phase 5 Ensemble ⭐0.91420.95860.97994-7×per-attr greedy logit-avg

🚀 主要進步來源

Ensemble 比單一最佳 model (CvN-L+TTA) 再提升 +3.2pp,主要 win 在以下 attr:
attrn_posbaseline (v515b)best singleEnsembleΔ vs baseline進步來源
no_safety_shoes180.7220.833 (CvN-B)0.944+0.222CvN-B + v515mt 投票,超低樣本 attr 互補
full_face_mask12100.9530.9840.988+0.035CvN-B+TTA + CvN-L
safety_glasses5950.8170.9920.995+0.178CvN-L + CvN-L+TTA (大 backbone 主要 win)
heartbeat1480.2970.6960.784+0.487DINOv3-B+TTA + SigLIP-L + CvN-L+TTA 多 backbone 互補
no_head_protection10700.8750.9780.981+0.106CvN-B+TTA + CvN-L+TTA + v504
safety_shoes880.5570.8300.830+0.273CvN-L 單模型已勝出
safety_vest17880.8290.9330.950+0.121CvN-L+TTA + v515mt + SigLIP-L+TTA
harness17480.7090.7430.784+0.075CvN-L+TTA + v504 + v515mt + CvN-L 四票
face_mask10890.9350.9980.998+0.063CvN-B+TTA 單模型已 ceiling
fall780.7950.9360.949+0.154CvN-B + SigLIP-L+TTA

🔍 完整 per-attr 對照(baseline vs SOTA Ensemble)

主指標 recall @ precision≥0.95;綠底=Ensemble win baseline ≥+0.05;紅底=沒進步 (Δ ≤ 0)。

attrn_posv504v515bCvN-L+TTAEnsembleΔ (Ens − v515b)判斷
hard_hat34890.9910.9880.9970.998+0.010已近 ceiling
no_head_protection10700.9020.8750.9760.981+0.106大幅進步
full_face_mask12100.7500.9530.9830.988+0.035進步
face_mask10890.9490.9350.9960.998+0.063進步
no_gloves4790.8230.9621.0001.000+0.038ceiling 達成
cotton_gloves1710.1350.0820.0470.135+0.053⚠️ 全模型都拉胯,真實弱點
rubber_gloves6321.0001.0001.0001.000+0.000ceiling
no_protective_clothing6681.0000.9960.9991.000+0.004ceiling
cleanroom_suit511.0001.0001.0001.000+0.000ceiling
splash_proof_gown5401.0001.0001.0001.000+0.000ceiling
safety_vest17880.8750.8290.9330.950+0.121大幅進步
safety_shoes880.1360.5570.8180.830+0.273大幅進步
no_safety_shoes180.7780.7220.5560.944+0.222大幅進步
no_sleeves1170.8210.7180.8380.863+0.145進步
heartbeat1480.5810.2970.6490.784+0.487巨幅進步
sleeves51.0000.6000.8001.000+0.400樣本太少噪音大
safety_glasses5950.9160.8170.9900.995+0.178大幅進步
hair_cover31.0001.0001.0001.000+0.000樣本=3 雜訊
helmet_goggles2221.0001.0001.0001.000+0.000ceiling
harness17480.7300.7090.7430.784+0.075進步
fall780.8970.7950.9100.949+0.154進步
aluminized_apron0test set 全 unknown 無法評
MEAN (21 OK attrs)0.80590.80620.88220.9142+0.1080+10.8 pp

⚠️ 真實弱點 — 模型沒辦法救要補資料的 attr

cotton_gloves:所有 11 個 candidate 的 R@P95 都在 0.04 – 0.14 之間。Ensemble 也只到 0.135(基本就是 DINOv3-B single model 結果)。原因:模型對 cotton_gloves 的 prob 對真陽性常常落在 P=0.95 閾值之下(灰色棉手套 vs 一般灰色手部容易混淆)→ 高 FP rate 把 threshold 推太高 → recall 死。光靠 ensemble + TTA + 大 backbone 沒救,必須:
  1. cvat2 #12 補更多 cotton_gloves 正樣本(現有 n_pos=171/394 valid)
  2. 補容易混淆的 hard negative(裸手沾灰、其他材質灰手套、空白灰背景手)
  3. 可能需要 per-attr 加 contrastive loss 或 hard negative mining
aluminized_apron:整個 test split 12,856 rows 都是 unknown。先前 LoRA 合成路線(v1/v2 兩次失敗)就是想補這個 attr 的 yes 樣本,但合成失敗。下一步:實際標真實 cvat2 task 累積 yes 樣本 → 用本次 SOTA 重新 evaluate。

🧠 VLM zero-shot 嘗試(部分有信號)

Qwen2.5-VL-3B 對 1499 stratified samples 跑 22 個 attr 的 yes/no/unclear prompt:整體 R@P95 = 0.195,遠低於 fine-tuned model。 主因是 hard yes/no 只給 3 點 P-R 曲線,多數 attr 達不到 P≥0.95 閾值。但少數 attr 仍有信號:
attrVLM R@P95VLM F1max觀察
hard_hat0.8240.896大 attr 仍辨識得到
rubber_gloves0.8240.904顏色/材質明顯
harness0.4490.610中等信號
full_face_mask0.0000.851F1 高但 P=0.95 達不到
cotton_gloves0.0000.525VLM 也救不了
VLM 可能用法:conservative trigger — 只在「fine-tuned 模型說 yes」+「VLM 也說 yes」時才報 alarm。對 hard_hat / rubber_gloves / harness 三個關鍵 attr 預期可進一步降 FP,但需 production trial 驗證。

🏆 Top-3 部署選項

OptionStackmean R@P95推論成本complexity推薦度
AConvNeXt-Base 單模型0.8731× (88M params)簡單輕量 立即可上
BConvNeXt-Large + hflip TTA0.8822× (198M params)簡單推薦 sweet spot
C3-model min-stack: DINOv3-B+TTA + CvN-L+TTA + CvN-L~0.913-6×平衡
DPhase 5 Full Ensemble (per-attr greedy)0.9144-7×極致 適合離線 audit
推薦先走 Option B:ConvNeXt-Large + hflip TTA 比 v515b 提升 +7.6pp recall@P=0.95,單 ckpt 部署簡單,2× inference cost 對 RTSP demo 仍可接受。先實際部署看 production iSeek FP / FN 變化,再決定要不要往 C/D 走。

📦 訓練 stack 詳細(4 個新 ckpt)

項目CvN-BaseCvN-LargeDINOv3-BSigLIP-L
backboneconvnext_base.fb_in22k_ft_in1kconvnext_large.fb_in22k_ft_in1kvit_base_patch14_dinov2.lvd142mvit_large_patch16_siglip_384
params88M198M86M (frozen)305M
img_size[384, 192][384, 192][384, 192][384, 192]
train rows40,254 (crops_v515 Train)40,25440,25440,254
val rows9,1249,1249,1249,124
test rows12,856 (crops_v515 Test)
epochs run159 (ep6 best)1510
val R@P950.9430.9560.9400.913
test R@P950.8730.8710.8700.832
ckpt size350.5 MB785.2 MB342.7 MB1213.8 MB
ckpt path~/runs_new/ppe_sota_v515/ckpts/<tag>/best.pt on 5090-2
val → test 約掉 7-8 pp:不是 overfitting,因為 baselines 也呈現同樣 gap(v515b val=0.99 → test=0.81)。原因是 test split 中 8006/12856 是 other source(與 train 主流 cvat2/p9/p17 不完全同分布),是 domain shift 不是過擬合。

🚫 已知 limitations(誠實列)

🎯 下一步建議(按 ROI 排序)

  1. 高 ROI 部署 Option B (CvN-L + hflip TTA) 到 model_viewer / ppe-demo,跑 1 週收 production iSeek FP / FN 對比 baseline → 證實效益
  2. 高 ROI 補 cotton_gloves hard negative + positive,cvat2 #12 加標 200-500 張 → 重訓並重評。這個 attr 是 ensemble 也救不了的真實弱點
  3. 中 ROI aluminized_apron 真實標注累積(放棄合成路線後的剩下選項),cvat2 #12 補 200+ 張 yes 樣本後重評
  4. 中 ROI CvN-Large 長 schedule 重訓(patience 16 + cosine LR),預期可再 +0.01-0.02 R@P95
  5. 低 ROI 跑剩下的 VLM(Qwen3-VL-8B / InternVL-2.5-8B),主要驗證 conservative trigger 對 hard_hat/rubber_gloves/harness 有沒有真實 FP 降幅
  6. 中 ROI 改 PPE21Handler 支援 ensemble(多 ckpt logit-avg),給 Option C/D 開門

📁 產出 artefacts

類別檔案內容
主報告~/runs_new/ppe_sota_v515/SOTA_REPORT.md原始 18.2KB Markdown 報告
新 ckpt × 4ckpts/<tag>/best.ptconvnext_base / convnext_large / vit_base_dinov3 / vit_large_siglip
per-model metricsresults/metrics_<tag>.json每個 model 的 per-attr P/R/F1 + R@P95
preds npzresults/preds_<tag>.npz每個 model 在 test set 上的 raw probs
Ensemble metadataresults/phase5_ensemble.jsonper-attr greedy add 選出的 stack 組合
test manifestresults/test_manifest.json12,856 rows 的 source / attr labels
VLM raw outputresults/vlm_raw_qwen25vl3b.json1499 sample × 22 attr 的 yes/no/unclear
研究在 5090-2 tmux session apron_research 內 autonomous 跑 ~6 hr 完成(預算 8hr)。完整原始 markdown 報告在 ~/runs_new/ppe_sota_v515/SOTA_REPORT.md