📋 PPE 模型補資料策略(給標記師)

2026-05-18 v4 · 數據來自 cvat2 #12 全 151 task scan(不是舊 manifest snapshot)

v4 更正:之前報告數字錯誤,那些是「舊訓練 manifest 的子集」,不是 cvat2 上的真實標注狀況。
這版直接從 cvat2 #12 全部 151 task scan 22 個 attr 的 yes/no/unknown,得到正確的補資料優先序。

📊 cvat2 #12 全 project 真實狀況

項目數量
Total task151
Train subset50 task
Validation subset34 task
Test subset46 task
(empty) subset 未分 split21 task
21 個 (empty) subset 的 task 完全沒進訓練 / 驗證 / 測試流程。其中包括 task #2959 含 293 個 aluminized_apron=yes 的 polygon — 標完但被忽略。這些 task 必須分到 Train/Val/Test 才會被使用。

📋 完整 yes 數量表(cvat2 直接統計,22 attr × 4 subset)

attrTrain yesVal yesTest yes(empty) yesTOTAL yes
hard_hat16,5082,0612,11611320,798
no_head_protection16,0751,7421,833019,650
no_sleeves15,5771,6471,806019,030
no_protective_clothing15,3781,6071,789018,774
no_gloves15,0851,5781,738018,401
no_safety_shoes14,7561,5341,707017,997
harness6,25577183107,857
safety_vest3,89351647204,881
heartbeat88012014801,148
aluminized_apron27700293570
cleanroom_suit38945510485
safety_shoes44035450520
cotton_gloves214231710408
fall208159250392
splash_proof_gown30233310366
full_face_mask21529250269
face_mask1258490182
safety_glasses1389100157
rubber_gloves10913140136
sleeves5755067
hair_cover2933035
helmet_goggles1311015

紅底 = 該 split 個位數,數據統計上不穩。橘底 = TOTAL < 600,模型學不夠。綠底 = 數據夠用。

🔥 P0 必做(兩個關鍵動作)

1️⃣ aluminized_apron — 不是缺資料,是 split + manifest 問題

全 cvat2 已標 570 yes · 但 Train 只 277 yesVal 0 / Test 0

真實情況:之前報告寫「0 yes 完全缺資料」是錯的。cvat2 #12 上實際有 2 個 task 標好 570 yes:

標記師該做的:

  1. 把 task #2959 從 (empty) 切到 Test(這樣模型評估時才有 aluminized_apron test 樣本可看)
  2. 未來在 cvat2 新建場域 task 時主動標 aluminized_apron attr(不要留 unknown),補 Val / Test split

工程師該做的(標記師不必管):重 build crops manifest 把 #2960 / #2959 納入訓練。

2️⃣ 21 個 (empty) subset task 全部要分 split

21 個 task / 全部沒進 Train/Val/Test

cvat2 #12 內 21 個 task 沒有 subset,這些 task 內的所有標注 對訓練/評估完全無效。標記師需要逐個 task:

  1. 判斷該 task 內容(是測試場域、新場域、還是補強場域)
  2. 切到 Train / Validation / Test 其中一個(建議按 80/10/10 hash 自動分配)
  3. 特別注意:包含 aluminized_apron yes 標的 task 優先進 Test(因 Val/Test 全 0)
🔗 進 cvat2 #12 篩 subset = (empty)

🟡 P1 真實場域樣本不足的 attr

下面 7 個 attr 在 cvat2 真實場域標注 < 600,模型對「真實工廠的這些 attr」訓練不夠:

attrTrainValTestTOTAL怎麼補
helmet_goggles 護目鏡帽131115太少不可信,整體補 +200 yes
hair_cover 髮網293335食品廠 / 無塵室 / 醫療場景,+200 yes
sleeves 長袖575567實驗室 / 食品廠,+200 yes
rubber_gloves 橡膠手套1091314136化工 / 醫療場域真實工人,+400 yes
safety_glasses 護目鏡138910157多顏色 / 多款式,+400 yes
face_mask 口罩125849182真實工廠(非醫療),+400 yes
full_face_mask 全面罩2152925269+200 yes
注意:上表的 yes 數字只算 cvat2 #12 真實場域。模型訓練還有外部公開 dataset(R2PPE/SH17/CPPE-5)貢獻幾千張這些 attr 的 yes,所以模型本身不會完全不會。但真實工廠場域的這幾 attr 比例不夠,預測 production case 時不準。

🔵 P2 其他需要補強的

attrTOTAL yes狀態怎麼補
fall392夠用但 Test 25 太少+50 yes 給 test
splash_proof_gown366夠用多樣式(補不同顏色 / 廠商)+ 200 yes
cotton_gloves408夠用但模型 R@P95 卡 13% → 需 hard negative+400 hard-neg(灰裸手 / 灰塑膠手套)
cleanroom_suit485夠用多場域(半導體不同廠)+ 300 yes
safety_shoes520夠用但 Val/Test 各 35/45 不足+200 yes 多顏色 + Val/Test 切分
heartbeat1148數量夠不必補

🟢 已飽和不必補(8 個 attr)

下面這些 attr 的 cvat2 yes 數量 > 4,000,標記師不必再標這幾個

attrTOTAL yes
hard_hat20,798
no_head_protection19,650
no_sleeves19,030
no_protective_clothing18,774
no_gloves18,401
no_safety_shoes17,997
harness7,857
safety_vest4,881

🎯 標記師接下來的優先序

步驟動作目標
1把 21 個 (empty) subset task 分到 Train/Val/Test解鎖已標好但浪費的 task
2task #2959 切到 Testaluminized_apron 終於有 Test 樣本
3P1 七個 attr 補 yes(按上表 quota)真實場域樣本到位
4未來新建 raicvat task 時主動標 22 個 attr避免又是 partial-label
5cotton_gloves hard negative 補強降 FP,解開 R@P95 卡住

❓ FAQ

Q1:為什麼之前報告寫 aluminized_apron 是 0?

之前報告數字來自「模型訓練 manifest」(crops_v515) — 那是訓練時的 snapshot。snapshot build 後標記師又補了 #2959/#2960 兩個 task 共 570 yes,但 manifest 沒重 build,所以模型「不知道」這些 yes 存在。直接從 cvat2 看才是真實狀況。

Q2:為什麼某些 attr cvat2 看很少(如 no_safety_shoes 17,997 但之前報告 231)?

cvat2 #12 上幾乎每個 task 都會標 no_safety_shoes(每個工人都有腳),所以實際很多。之前報告的「231 yes」是 crops_v515 manifest 內「同時也是 raicvat 真實 source 的 person crop」— 那是子集。cvat2 直接 scan 數字才是該 attr 真實的訓練樣本量。

Q3:21 個 (empty) task 怎麼分配 split?

原則:

不確定的請 ping 工程師判斷。

Q4:補完一個 attr 我怎麼知道有沒有幫上忙?

每補 200-500 張工程師會重訓並對比補資料前 / 後,1-2 週發新版報告。直接從報告看該 attr 的「抓到率」變化。

Q5:unknown 樣本會被模型錯誤學習嗎?

不會。工程師已確認訓練時 unknown 完全 skip,不參考、不扣分。所以唯一需要做的是把 unknown 變成 yes 或 no,模型才學得到。

Q6:標到一半遇到不確定的怎麼辦?

直接留 unknown,ping 工程師確認標準。留 unknown 不會扣分,但標錯會扣分

有任何分類疑問請直接 ping 工程師,特別是 cotton_gloves 的 hard negative 和 aluminized_apron 容易混淆的全身防護衣 — 這兩個的判定標準對最後模型影響最大。

🎨 進階:影像合成嘗試(選做)

如果你想嘗試用 AI 合成補某個 attr(例如 aluminized_apron 真實樣本難取得時)— 以下是 5090-2 上的合成環境位置 + 給你的 Claude / 工程助手的操作 playbook

先聲明:之前已嘗試 2 輪 LoRA 合成(v1 4.7% / v2 10% 成功率)都失敗,主要原因是 reference set 髒(爬蟲爬到 cosplay / 整套防護衣 / 電商水印)。合成不會比真實標注快,重啟條件是「標記師親自挑乾淨 reference set」。

🔌 連線資訊

5090-2 SSH access 需要工程師私下提供,請 ping 工程師取得:

給你的 Claude 的初始指示:
請連進 5090-2,讀 /home/ubuntu/runs_new/apron_synth_v515/V2_FAIL_ANALYSIS.md 和 V2_RESEARCH_REPORT.md,理解之前 2 輪失敗的原因,然後幫我跑一輪新合成(用我準備的 reference set)。

📂 環境位置(已就緒,不必重建)

路徑內容
~/runs_new/apron_synth_v515/v1 完整合成資料 + 報告 + 6 個版本 script (v2-v7)
~/runs_new/apron_synth_v515/scripts_v2/v2 完整 pipeline(p1a-p5 共 11 個 script,可參照修改)
~/runs_new/apron_synth_v515/prod/v1 量產 43 張(4.7% 成功,當 baseline 對照)
~/runs_new/apron_synth_v515/V2_FAIL_ANALYSIS.md必讀:v2 為何失敗 + 不要再踩的坑
~/runs_new/apron_lora_v1/aluminized_apron_v515/v1 LoRA weights (89 MB, trigger token alumap)
~/runs_new/apron_lora_v2/aluminized_apron_v2/v2 LoRA weights (89 MB, trigger token silverbib)
~/hf_cache/144 GB:SDXL inpaint / ControlNet OpenPose / IP-Adapter / Qwen2.5-VL 都已下載

🖥️ Tmux session

5090-2 上有現成 tmux session 可重用,不要新開

session用途怎麼用
apron_research之前 v1/v2/SOTA 都在這跑,現 idletmux attach -t apron_research/clear → 部署新 brief
apron_v2v2 訓練專用 session備用,預設用上面那個
mf-3dgen / mf-web❌ 別人的 (mf project)不要動

⚠️ 已知狀況

項目狀態處置
Disk free7.6 GB / 937 GB (100% used)跑新合成前先請工程師清 hf_cache(不要自己砍)
GPU2× RTX 5090 (31 GB each)GPU 0 上 ppe-demo / hunyuan worker 已占 18GB,必須加 enable_model_cpu_offload()
cvat2 APIsystem / 91QeHAkke4Xa, project 12合成完上 subset=AI 給標記師 audit,不要進 Train/Val/Test

🛠️ 建議步驟(給你的 Claude 的 playbook)

Step 1 — 讀 v2 失敗分析(必做)

cat ~/runs_new/apron_synth_v515/V2_FAIL_ANALYSIS.md
cat ~/runs_new/apron_synth_v515/V2_RESEARCH_REPORT.md

理解:(1) garment_set 為何要嚴格清乾淨 (2) SDXL inpaint prior 為何偏 hooded coverall (3) 為何 CLIP eval 失效

Step 2 — 準備乾淨的 reference set(標記師親手挑)

Step 3 — 重訓 LoRA(沿用 v2 script 改 reference path)

cd ~/runs_new/apron_synth_v515/scripts_v2
# 修改 p2a_caption.py 指向 garment_set_v3_human/
# 修改 p2b_train_lora.py output 指向 ~/runs_new/apron_lora_v3/
python3 p2a_caption.py
python3 p2b_train_lora.py   # ~13 min on RTX 5090

Step 4 — 小規模合成 + 立即標記師 audit

# 參考 ~/runs_new/apron_synth_v515/prod/ 怎麼跑 v1
# 跑 20-50 張 → 上傳 cvat2 #12 subset=AI 命名 AI_v3_human_ref_<ts>
# 標記師逐張審 → 算成功率
# 成功率 < 50% → 停止,回 Step 2 改 reference set

Step 5 — 規模化(僅當小規模 > 50% 成功)

🚫 不要踩的坑(v1/v2 教訓)

提醒:如果 Step 4 小規模成功率不過 50%,立即停止,回標記師補 reference set 或乾脆放棄合成走真實標注。