🦺 Safety Rope v9 — 8hr 自主研究新冠軍

version: v20260503_v9_classweighted · 訓練日 2026-05-03 · backbone vit_small_patch16_dinov3 22M @ 1280×720
arch: ViT-S patch16 + RoIAlign + MLP 2-cls + 外擴 1.0 / 0.2 / 1.5
data: manifest_v3_clean.csv 226 task / 12291 train / 2953 val / 4863 test
關鍵差異:class-weighted CE (wrong class 1.5×) + init from v7b ckpt

TL;DR — 純改 loss 一個權重,FP -24%

0.9336
test AP
vs v7b: +0.5pp
0.8770
F1
vs v7b: +2.0pp
0.894
Precision
vs v7b: +3.1pp
0.861
Recall
vs v7b: +1.0pp
191
FP(誤報)
vs v7b 251: -24%
259
FN(漏報)
vs v7b 277: -7%
核心發現:在 v7b 同 backbone / 同 data / 同 aug 條件下,僅在 CrossEntropyLoss 加 class_weights = [1.5, 1.0](wrong/correct)做 fine-tune,test_AP +0.5pp、FP -60 (-24%)、F1 +2.0pp。所有指標全方位提升,沒有任何 trade-off。

8-hr 自主研究:跑了 12 個變體,cw=1.5 是唯一甜蜜點

版本settingtest_APF1PRFPFN結論
v7bbaseline0.92830.85740.8630.851251277起點
v9+cw=1.50.93360.87700.8940.861191259冠軍 ⭐
v10+focal γ=20.93180.86510.8320.901340184反方向
v11+label smooth 0.10.93440.86330.8260.905356178反方向
v12+cw=2.00.92990.86780.8660.870252242沒效
v13+cw=3.00.93910.87400.8850.864210254AP 高 FP 略升
v14+cw=1.30.93970.87630.8840.869212245AP 最高
v15+cw=1.70.92530.86740.8650.870254242outlier
v16cw=1.5+erase30%0.92750.87010.8890.852198276沒幫助
v17cw=1.5+rot±10°0.90890.86150.8620.861257259太強反劣
v18DINOv3-B 87M cw=1.50.89750.79430.7310.869595244大 backbone 慘敗 ⚠
v20cw=1.5 from scratch0.93930.87640.8530.901290184AP 高但 FP+99

關鍵洞察

  1. Class-weighted CE (wrong=1.5×) 是降 FP 唯一銀彈:純改 loss、不改架構/資料/aug,FP 直接 -24%。其他 loss 變體(focal / label smoothing)都反方向。
  2. wrong weight 非 monotonic:1.5 是甜蜜點,1.7/2.0 反而劣化(best ep 選到不好點),3.0 才又拉回但 FP 仍高於 1.5。
  3. Augmentation 變化已飽和:在 cw=1.5 上加 stronger erase / wider rotation 都無增益,rotation ±10° 反而過頭。
  4. Backbone 容量過大反過擬合:DINOv3-B 87M 在 12K 訓練樣本上 underfit + 不穩,FP 飆到 595(v9 的 3.1×)。22M ViT-S 是甜蜜點。
  5. Temporal smoothing 跟 cw=1.5 互斥:cw 已抑制 FP,再 smooth 反 dilute precision(FP 從 97 升到 184+)。對 v6 有效對 v9 沒用。
  6. 4-ensemble (v9+v14+v13+v20) FP 額外 -4,AP +1.3pp,但 4× 推論。對 user 主場景不划算。

📦 模型下載

檔案大小下載
safety_rope_v20260503_v9_classweighted/best.pt (fp32)86 MBR2 link
safety_rope_v20260503_v9_classweighted/best_fp16.pt43 MBR2 link
summary.json5 KBR2 link
person_yolo11n_v20260501/best.pt5.5 MBR2 link

🧪 推論差異(vs v7b)

v9 跟 v7b 的推論 pipeline 完全相同,差別只是 ckpt:

# 唯一改動:ckpt 換 v9
curl -L -o best_fp16.pt https://pub-478929a98a5c440cb22c2241c0bde314.r2.dev/safety_rope_v20260503_v9_classweighted/best_fp16.pt
# Model class / forward 完全同 v6/v7b 報告(複用 SafetyRopeModel + infer())
ck = torch.load("best_fp16.pt", map_location=DEVICE, weights_only=False)
THR = float(ck["thr"])  # v9 thr=0.79(比 v7b 0.43 高,反映更嚴格)

場域部署不要搭 temporal median smoothing wrapper(對 cw 模型反劣化)。直接用單張推論。

下一步

  1. 場域實測 v9 vs v7b(mac model_viewer 主版已切 v9)
  2. e2e audit on clean manifest 看 YOLO 真實漏框/假框(v9 部分已大幅改善)
  3. YOLO 改善(real bottleneck):conf 0.35→0.5 / imgsz 640→1280 / 加場域 hard-neg 重訓
  4. (長線)clip-aware end-to-end fine-tune 第二輪(5/3 v8 跑得太保守,lr 1e-5 + patience 8 + 10+ep 看是否突破)

8-hr 自主研究 cycle 紀錄: 12 個訓練變體 + ensemble eval + temporal grid。Loop end @ 2026-05-04 06:00 CST。
對照 v7b 報告: v7b_clean_report