2026-06-05 · 鏡頭:TC-1-102 / 頻道4-倉庫進料區 / 頻道5-倉庫大門口 · 模型:factory_ppe_v20260603 · cvat2 #12
堆高機場域判斷不準的根因不在模型、不在資料管線(已查證:export 沒 polygon bug、23/24 task 都進了 v603 訓練),而在標註的分布:① 安全帽「有戴」樣本太少且場域難(堆高機駕駛坐姿是分布外)→ 漏報;② 背心在頻道4/頻道5 大量沒標(unknown)且沒有「沒穿」樣本,模型學不到判別界線。先補標(尤其頻道4/5 的背心)+ 推廣 not_visible 值,再 per-site 微調。
| 值 | 意義 | 訓練處理 |
|---|---|---|
| yes | 有(戴帽 / 穿背心) | 正樣本 |
| no | 無 | 負樣本 |
| not_visible | 有看過但無法識別(太遠/遮擋/糊)— 新加 | 應 mask 不算 loss |
| unknown | 沒標記(cvat 預設值,標註者沒碰) | mask 不算 loss |
⚠️ not_visible 目前全 0——這個新值標註團隊還沒開始用。建議把「太遠/糊看不出」的人改標 not_visible(現在這些多半是 unknown 或被勉強標 yes/no,兩者都會污染訓練/評估)。
排查時一度懷疑「polygon 標註被 export 丟掉」,查證後排除:export_p12 的 bbox_of() 正確處理 polygon(外接 bbox),三鏡頭 23/24 task 都進了 v603 訓練。polygon 佔全 #12 的 30% 但全部正確進訓練。→ 問題在標註分布,不在資料管線。
cvat GT person bbox → factory_ppe_v603 推論 → 比對。注意:safety_vest 因小框被 eval skip、不足採信,請看下方「標註分布」。
| 鏡頭 | hard_hat 有效樣本 | AP | Precision | Recall | FP / FN |
|---|---|---|---|---|---|
| TC-1-102 | 472 | 0.93 | 0.96 | 0.68 | 7 / 73 |
| 頻道4-進料區 | 338 | 1.00 | 1.00 | 0.84 | 0 / 5 |
| 頻道5-大門口 | 660 | 0.99 | 0.97 | 0.88 | 2 / 9 |
AP 不差(0.93~1.0),但固定門檻 recall 偏低,TC-1-102 漏 32% 戴帽者。原因見下方 FN 案例。
一排堆高機駕駛坐姿,戴著黃色安全帽卻被判 no(信心 0.25)。crop 含大量方向盤/駕駛艙背景。→ 「坐姿駕駛 + 側面 + 駕駛艙」是訓練集罕見構圖(通用樣本多是站姿正面行人),分布外 → 漏報。
格式:yes / no / not_visible / unknown(未標)。可訓 = yes+no。
| task | 鏡頭 | subset | size | hard_hat | safety_vest |
|---|---|---|---|---|---|
| 4963 | TC-1-102 | Train | 574 | 29/95/0/13 | 0/137/0/0 |
| 4965 | TC-1-102 | Val | 1072 | 180/176/0/54 | 0/410/0/0 |
| 5171/5172/5173 | TC-1-102 | Tr/Val | 16×3 | 47/0/0/0 | 47/0/0/0 |
| 2823 | 頻道4-進料區 | Val | 91 | 0/0/0/61 | 0/0/0/61 |
| 4864 | 頻道4-進料區 | Train | 1060 | 0/228/0/61 | 0/0/0/289 |
| 4868 | 頻道4-進料區 | (空) | 235 | 0/0/0/0 | 0/0/0/0 |
| 4875 | 頻道4-進料區 | Test | 706 | 0/24/0/80 | 0/0/0/104 |
| 4903 | 頻道4-進料區 | Train | 91 | 0/54/0/9 | 0/0/0/63 |
| 5160/5161 | 頻道4-進料區 | Tr/Val | 16×2 | 32/0/0/0 | 32/0/0/0 |
| 2824/2825 | 頻道5-大門口 | Train | 64/95 | 0/0/0/306 | 0/0/0/306 |
| 4860 | 頻道5-大門口 | Train | 284 | 0/401/0/1 | 0/0/0/402 |
| 4866 | 頻道5-大門口 | Train | 178 | 0/0/0/32 | 0/0/0/32 |
| 4870 | 頻道5-大門口 | Train | 156 | 0/28/0/55 | 0/0/0/83 |
| 4886 | 頻道5-大門口 | Train | 273 | 0/95/0/212 | 0/0/0/307 |
| 4901 | 頻道5-大門口 | Val | 175 | 0/98/0/145 | 0/0/0/243 |
| 5162/5163 | 頻道5-大門口 | Tr/Val | 16×2 | 32/0/0/0 | 32/0/0/0 |
| 5177/5178/5179 | 頻道5-大門口 | Tr/Val | 16×3 | 44/0/0/20 | 0/0/0/64 |
| 鏡頭 | hard_hat(Y/N/未標) | safety_vest(Y/N/未標) | safety_vest 狀況 |
|---|---|---|---|
| TC-1-102 | 256 / 271 / 67 | 47 / 547 / 0 | ✅ 標註完整、有負樣本 |
| 頻道4-進料區 | 32 / 306 / 211 | 32 / 0 / 517 | 🔴 缺 no + 海量未標 |
| 頻道5-大門口 | 76 / 622 / 771 | 32 / 0 / 1437 | 🔴 缺 no + 海量未標 |
| 優先 | 缺口 | 具體 task / 動作 |
|---|---|---|
| P0 | 頻道4/5 背心海量未標 | 補標 #4864/#4875/#4886/#4901/#4860 等的 safety_vest(共 ~2700 個 person 待標) |
| P0 | 頻道4/5 背心無負樣本 | 補標時務必涵蓋「沒穿背心」的人(搬運工/訪客) |
| P1 | not_visible 沒人用 | 太遠/遮擋/糊看不出的人改標 not_visible(全場域適用,不只這三鏡頭) |
| P1 | hard_hat 頻道4/5「有戴」少 | 補標更多戴帽 frame,尤其駕駛坐姿 |
| P1 | Test split 缺 | 每鏡頭切獨立 Test(時序分割禁 hash) |
| P2 | 駕駛坐姿分布外 | 補標後 v603 base + 該場域 oversample 微調 |
資料來源:cvat2 #12 全 789 task 掃描 + factory_ppe_v20260603 推論。eval 工具 5090-2 eval_3cam.py / dist_detail.py 可複現。本版已修正前一版 safety_vest 統計錯誤(TC-1-102 實際有完整負樣本)。