📦 模型下載https://pub-478929a98a5c440cb22c2241c0bde314.r2.dev/forklift_yolo26n_v20260528/best.pt

🚜 Forklift YOLO26n v20260528 @ imgsz 1280

訓練日期 2026-05-28 · 5090-2 GPU1 單卡 batch 32 · base yolo26n.pt · cvat #9 (dataset 沿用 v526_b,純改 imgsz+aug)

⭐ 結論:修好 cascade imgsz mismatch,1280 推論場景 mAP50-95 +17.4pp

診斷發現 forklift cascade 一直把 v526_b(訓練 imgsz 640)硬拉到 1280 推論,model 沒在該尺度學過 → mAP50-95 從 0.874 崩到 0.678(-20pp),這就是場域偵測「效果不好」的真兇。v528 直接訓練 imgsz=1280 對齊推論,同 test set @1280 達 mAP50-95 0.852,比 v526_b@1280 +17.4pp

🆚 Controlled Fair Eval(同 test set 2420 img / 2329 bbox)

Model推論 imgszmAP50mAP50-95PR
v526_b (訓640)6400.99410.87440.9890.981
v526_b (訓640)12800.94620.6777 ⚠️0.8820.923
v528 (訓1280)6400.99360.84700.9860.978
v528 (訓1280)12800.99250.8515 ✅0.9610.981

cascade 實際推論尺度是 1280。v526_b@1280 因 train/推論 mismatch 崩 20pp;v528 訓 1280 後完全對齊,@1280 穩定。v528 在 640 略低(0.847 vs 0.874)是為 1280 優化的代價,但 cascade 用 1280 不受影響。

📊 訓練收斂(v528 val @1280)

0.974
val mAP50 (ep100)
0.790
val mAP50-95
100/100
epoch (3.49hr)
20.4G
GPU mem (b32)

🔧 架構修正:handler 自動讀 imgsz

順手把 ForkliftPPEHandler.load() 改成從各 ckpt 自動讀訓練 imgsz(yolo.overrides["imgsz"]),model 訓多少就推多少,不再每個 register 手動 hardcode。新 cascade forklift_ppe_v528 因此自動用 forklift→1280 / person→640,徹底消除 mismatch hack。舊 v526/v526b entry 保留手動 1280 作對照。

⚙️ Hyperparams(vs v526_b 只動 imgsz + aug)

backbone: yolo26n.pt, imgsz: 1280 (was 640), batch: 32, epochs: 100, device: GPU1
cache: False (1280 cache ram 需 ~68GB,RAM 不夠)
aug: scale 0.7 (was 0.5), copy_paste 0.15 (was 0), perspective 0.0005 (was 0)
     mosaic 1.0, close_mosaic 10, fliplr 0.5, erasing 0.4, hsv(0.015/0.7/0.4)
optimizer: auto, lr0 0.01, lrf 0.01
dataset: forklift_v20260526_b(完全沿用,隔離變因)

📦 模型下載

forklift_yolo26n_v20260528/best.pt ⬇

← 訓練報告目錄