RoI Align mobilenetv3-large cvat2 project 8 + 10 jitter v2 augment 訓練日期:2026-05-02 | 5090-2 GPU1 batch 16-32 | epochs 40 (early stop)
v20260502_p10_hd(1280×720 + 外擴)為本次冠軍,已上線 ppe-demo 主版。
HD 較 640 提升 4.5 pp AP;外擴消融顯示外擴貢獻 +1.2 pp AP 與 +4 pp Precision(FP 從 395 降到 293)。
| 模型 | 全圖 | 外擴 (X / Y_top / Y_bot) | AP | F1 | P | R | 備註 |
|---|---|---|---|---|---|---|---|
v20260502_p10 | 640×640 | 1.0 / 0.2 / 1.5 | 0.8450 | 0.8162 | 0.750 | 0.895 | 640 × 640,外擴 1.0/0.2/1.5 |
v20260502_p10_hd | 1280×720 | 1.0 / 0.2 / 1.5 | 0.8898 | 0.8426 | 0.831 | 0.854 | 1280 × 720,外擴 1.0/0.2/1.5 |
v20260502_p10_hd_noexp | 1280×720 | 0.0 / 0.0 / 0.0 | 0.8776 | 0.8305 | 0.790 | 0.876 | 1280 × 720,不外擴 0/0/0 |
| CLIP zero-shot — per-person crop | — | 0.6734 | 0.6613 | 0.603 | 0.732 | 不訓練、CLIP ViT-B/16 + 多 prompt 集成 | |
| CLIP zero-shot — 全圖紅框指認 | — | 0.5323 | 0.5859 | 0.448 | 0.846 | 同上,但餵全圖 + 紅框 | |
RoI Align 不是「全圖看完 → 分類」,是「從 backbone feature map 嚴格按 ROI 範圍 pool cells」。 mobilenetv3 stride 16 → 1280×720 圖產出 80×45 feature grid,每個 cell 雖有大 receptive field,但 pooling 階段嚴格依 person bbox 範圍取對應 cells,bbox 外的 cells 不會進到分類 head。
繩子的關鍵視覺證據常在 person bbox 外:
y_top 0.2× 外擴y_bot 1.5× 外擴x ±1.0× 外擴本次 ablation 證實: 即便 mobilenetv3 receptive field 大、不外擴版仍能拿到部分 context(test AP 0.878),但 外擴版精準度高 4 pp(Precision 0.831 vs 0.790),FP 從 395 降到 293,這在實務通報場景至關重要。
測試 CLIP ViT-B/16 不經訓練、直接用 prompt 推論的效果(4 條 positive prompt + 4 條 negative 集成):
CLIP image encoder + RoI Align + 重訓 head 或走 SAM-style prompt encoder(未來實驗)。
safety_rope_correct 機率(≥ thr 0.459 視為正確使用)import torch
from ultralytics import YOLO
# load
ckpt = torch.load("safety_rope_v20260502_p10_hd.pt", map_location="cuda", weights_only=False)
img_w, img_h = ckpt["img_size"] # (1280, 720)
expand = (ckpt["expand_x"], ckpt["expand_y_top"], ckpt["expand_y_bot"]) # (1.0, 0.2, 1.5)
thr = ckpt["thr"] # 0.459
# 詳細 cascade 邏輯參見 model_viewer/app.py SafetyRopeHandler
ppe-demo 同時上線 3 版 safety_rope,可即時切換比對:
safety_rope = HD(主)safety_rope_p10 = 640 對照safety_rope_v502 = 舊版對照