堆高機(forklift)進度報告

2026-08-05 · cvat #9 · in-scope = ISMS「PM 視角:🧠 訓練/驗證 (172 隻)」中「堆高機工安」6 支鏡頭
一句話結論:三支 VALIDATING 鏡頭已拿到可信的驗收數字(mAP50 0.980、乾淨 test 1,634 張、 train/test 完全不同日期);宏全三支仍是 TRAINING 階段、資料不足(缺約 1,507 frames)。 另已完成 2,699 張堆高機 crop 的 SAM3 person 預標並上傳 cvat,18 個 task 等標記師標安全裝備
乾淨 test mAP50
0.980
1,634 張,未進過 train
乾淨 test mAP50-95
0.824
舊版高估 6.6pp
待標記 task(#12)
18
3,050 個 person
待確認 task(#1)
18
2,699 張 crop

🔴 需要標記:安全裝備(cvat #12)

每張圖上的 person 已用 SAM3 預先框好,不必畫框,只要填屬性:hard_hatsafety_vest (可選 unknown / yes / no / not_visible)。
目前全部是 unknown — 這是刻意的,沒改到的不會被當成錯誤負樣本(unknown 不進 loss)。
⚠ 已知問題:SAM3 偶爾會框到背景路人(不在堆高機上的人)。這種需要處理規則 — 建議直接刪除該 polygon,但待 operator 確認
鏡頭批次張數person網址
FOX_[TC-1-102]1155206tasks/11144
FOX_[TC-1-102]2152190tasks/11146
FOX_[TC-1-102]3147211tasks/11148
FOX_[TC-1-102]4158222tasks/11150
FOX_[TC-1-102]5165233tasks/11179
FOX_[TC-1-102]6168236tasks/11154
FOX_[TC-1-102]75064tasks/11156
IRODA_[頻道4-倉庫進料區]1109154tasks/11164
IRODA_[頻道4-倉庫進料區]2119168tasks/11166
IRODA_[頻道4-倉庫進料區]378105tasks/11168
IRODA_[頻道5-倉庫大門口]1163230tasks/11170
IRODA_[頻道5-倉庫大門口]2160228tasks/11172
IRODA_[頻道5-倉庫大門口]3148198tasks/11174
IRODA_[頻道5-倉庫大門口]4148217tasks/11176
IRODA_[頻道5-倉庫大門口]5135177tasks/11178
HONCHUAN_[物流A倉充電站]14754tasks/11158
HONCHUAN_[物流A倉出貨]17098tasks/11160
HONCHUAN_[自動倉北側]13359tasks/11162
合計 18 task2,2053,050

需要確認:person 分割預標(cvat #1)

同一批 crop,含沒偵到人的空車(#12 只放有人的)。SAM3 polygon 品質請抽查確認, 確認後才決定要不要納入 person 模型訓練。
兩邊 subset 都刻意留空 + 命名帶 FKCROP 前綴,現階段不會被既有 export 收進正式訓練集。
鏡頭批次張數person網址
FOX_[TC-1-102]1175206tasks/11143
FOX_[TC-1-102]2175190tasks/11145
FOX_[TC-1-102]3175211tasks/11147
FOX_[TC-1-102]4175222tasks/11149
FOX_[TC-1-102]5175233tasks/11151
FOX_[TC-1-102]6175236tasks/11153
FOX_[TC-1-102]75464tasks/11155
IRODA_[頻道4-倉庫進料區]1175154tasks/11163
IRODA_[頻道4-倉庫進料區]2175168tasks/11165
IRODA_[頻道4-倉庫進料區]398105tasks/11167
IRODA_[頻道5-倉庫大門口]1175230tasks/11169
IRODA_[頻道5-倉庫大門口]2175228tasks/11171
IRODA_[頻道5-倉庫大門口]3175198tasks/11173
IRODA_[頻道5-倉庫大門口]4175217tasks/11175
IRODA_[頻道5-倉庫大門口]5158177tasks/11177
HONCHUAN_[物流A倉充電站]113154tasks/11157
HONCHUAN_[物流A倉出貨]110398tasks/11159
HONCHUAN_[自動倉北側]15559tasks/11161
合計 18 task2,6993,050
另有 pilot 驗證 task(12 張手挑樣本,含正確/誤判各種情況,適合先看這個了解 SAM3 表現): tasks/11142

一、盤點發現的三個問題

① train/test 有結構性 leak

標註流程把同一鏡頭同一天的影片切成 _001/_002/_003 三個 task,再分別指派 Train / Validation / Test。 94 個「(鏡頭,日期)」群組裡有 40 組橫跨 train+test。dHash 實證:

子集與 train 完全相同 dHash漢明距離 ≤5(近似重複)
val(1,735 張)31.5%58.8%
test(2,416 張)22.1%37.1%

② test 集有 80% 是外部公開資料集

舊 test 2,416 張裡有 1,929 張是 Roboflow/Kaggle 公開資料集,場域只佔 487 張;扣掉 leak 後 可信的場域樣本只剩 51 張。帳面 0.994 主要在量公開資料集,不是量場域。

③ 誤報分析:真誤報為主,類型集中

in-scope test 在 conf 0.25 下只漏 5/395(1.3%),14 個「偵到但無標註」的框逐一目視後:

判定數量內容
確定漏標1task 8455 frame 5(整張 GT=0,卻有清晰堆高機)已刪除
疑似漏標2task 9862 f3、task 5661 f2已刪除
重複偵測/定位偏差3多台並排、逆光重疊處
真誤報8機車/電動車 ×2、木棧板堆、手推板車、垃圾桶、料桶、貨車駕駛座、橘色托板

→ 真誤報類型集中在「有輪子/方形結構/橘紅色系」的物體。補 hard negative(該鏡頭有機車但無堆高機的畫面)是零成本解法。

漏偵測的根因:遮擋,不是小目標

5 個漏偵測全部集中在 物流A倉充電站(漏 4/32 = 12.5%),實際畫面都是多台堆高機並排充電、互相遮擋只露門架, 加上該鏡頭逆光過曝。漏掉的 bbox 面積中位數 2.57%,與全體 GT 的 2.49% 幾乎相同 —— 不是小目標問題

二、修正與重訓結果

新 export export_p9_v20260804.py:split 改用「(鏡頭,日期) → subset」映射表,同一天絕不跨 subset; 只有三支 VALIDATING 鏡頭切 train/val/test,宏全三支(仍 TRAINING)+ 公開資料集全進 train; API 加 retry + fail-loud。產出 train 15,865 / val 1,798 / test 1,634 張,零錯誤

同一個乾淨 test 集對照(1,634 張,v804 完全沒看過)

子集張數v20260728 mAP50v20260728 mAP50-95v20260804 mAP50v20260804 mAP50-95Δ mAP50-95
全部1,6340.98720.88950.98000.8237−0.0658
FOX_[TC-1-102]6330.99500.92090.99490.8592−0.0617
IRODA_[頻道4-倉庫進料區]5910.96870.89710.96340.8651−0.0320
IRODA_[頻道5-倉庫大門口]4100.98810.82840.98250.7718−0.0566
怎麼讀這張表:v728 的 train 包含這些 test 日期的其他 frame,所以它在此 test 上的分數是虛高的; v804 沒看過任何一張,分數才是真實泛化能力。
mAP50 幾乎沒差(−0.007) → 「有沒有堆高機」的偵測能力,leak 影響很小。
mAP50-95 掉 6.6pp → 被高估的是定位精度(bbox 貼合度)。
結論:三支 VALIDATING 鏡頭的可信 mAP50 是 0.980(各鏡頭 0.963–0.995),recall 0.945–0.992。

三、SAM3 在堆高機 crop 上偵測人

管線:整張畫面 → forklift 偵測 → 切 crop(pad 15%、上緣多 10%)→ SAM3 person → PPE 屬性

6,364in-scope 堆高機 bbox 總數
2,699濾掉短邊 <96px + dHash 去重後的有效 crop
2,205(81.7%)SAM3 偵到 person 的 crop
3,050person polygon 總數

SAM3 對坐在駕駛座、只露上半身、被方向盤和車體遮擋的人表現很好,pilot 的 12 張裡 score 多在 0.88–0.96。

但暴露一個 cascade 設計問題:crop 內偵到人 ≠ 那個人在堆高機上。
pilot 有 2 例是框到背景走動的工人(駕駛座其實空的)。若管線直接採「crop 內有 person → 檢查 PPE」, 會去檢查一個根本沒在開堆高機的人。需要加一道位置判準(例如 person polygon ∩ forklift bbox 的面積比 + 駕駛座區域限制)。

四、待決事項

  1. SAM3 框到背景路人時,標記師怎麼處理?(建議直接刪 polygon)—— 這會影響 cascade 判準的設計
  2. 宏全三支要不要現在開錄? 三支 RTSP 實測全通。缺口 1,507 frames,且充電站/出貨各只有 2 個有效日期 (切乾淨 split 至少要 6 天)。日期只能一天天累積,是整條路徑最慢的一環,越早開始越好。
  3. 生成資料:pilot 30 張已完成($2.12,穿戴組合 30/30 命中)。但實測 images.edits 會位移堆高機、 bbox 不能沿用;且生成速度約 60 秒/張,補滿 1,500 張要 25 小時。定位為「補難例(遮擋/逆光)且只進 train」。
  4. hard negative:從 TC-1-102 撈「有機車/棧板/推車但無堆高機」的畫面,零成本,可直接降真誤報。

五、宏全三支現況(仍 TRAINING)

鏡頭framesshapes有效日期現成待標缺口
物流A倉充電站3333032200缺 417f + 5 個日期
物流A倉出貨208198235缺 542f + 5 個日期
自動倉北側2022081216缺 548f

目標:每支 train ≥600 + 乾淨 test ≥150。現成待標的 251 frames(cvat 上已有影像,jobs 還是 annotation/new)標完即可用。


產出:export_p9_v20260804.py · train_forklift_v20260804.py · ckpt ~/runs_new/forklift_v20260804/run/weights/best.pt · crop ~/sam3_gradio/fk_crop_all/ · 網址列表 fk_task_urls.md
訓練 imgsz 1280 / 推論 imgsz 1280(cascade 對齊,規則 18)· yolo26n · ep100 patience30 batch32