訓練日期 2026-05-28 · 5090-2 GPU1 單卡 batch 32 · base yolo26n.pt · cvat #9 (dataset 沿用 v526_b,純改 imgsz+aug)
診斷發現 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。
| Model | 推論 imgsz | mAP50 | mAP50-95 | P | R |
|---|---|---|---|---|---|
| v526_b (訓640) | 640 | 0.9941 | 0.8744 | 0.989 | 0.981 |
| v526_b (訓640) | 1280 | 0.9462 | 0.6777 ⚠️ | 0.882 | 0.923 |
| v528 (訓1280) | 640 | 0.9936 | 0.8470 | 0.986 | 0.978 |
| v528 (訓1280) | 1280 | 0.9925 | 0.8515 ✅ | 0.961 | 0.981 |
cascade 實際推論尺度是 1280。v526_b@1280 因 train/推論 mismatch 崩 20pp;v528 訓 1280 後完全對齊,@1280 穩定。v528 在 640 略低(0.847 vs 0.874)是為 1280 優化的代價,但 cascade 用 1280 不受影響。
順手把 ForkliftPPEHandler.load() 改成從各 ckpt 自動讀訓練 imgsz(yolo.overrides["imgsz"]),model 訓多少就推多少,不再每個 register 手動 hardcode。新 cascade forklift_ppe_v528 因此自動用 forklift→1280 / person→640,徹底消除 mismatch hack。舊 v526/v526b entry 保留手動 1280 作對照。
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(完全沿用,隔離變因)