🪢 安全繩使用偵測 — raicvat#12 設計簡報 v2

資料源:raicvat#12「hatch」project (168 tasks / ~3125 frames,中油 / siemens / jujia 工地)

TL;DR — 用 raicvat#12 既有圖,跑 YOLO person detector 自動生 person bbox,新建 cvat2 project「safety_rope」加標 safety_rope_use attribute (3 態 select)。LLM 預標 + 人工抽查 → 訓練擴大 crop binary classifier。
注意:raicvat#12 原 schema 只有 door-open / door-close / lock / unlock 4 個 polygon label,沒有 person bbox。要做安全繩判定必須先「無中生有」person bbox。

1️⃣ 任務定義

項目說明
判斷單位每個 person(從原圖偵測得到)
輸出三態 select:correct 正確使用|wrong 錯誤使用(沒戴/拿手上/沒掛勾)|unknown 非高處作業 / 鏡頭遠看不清
資料源raicvat#12 168 tasks ~3125 frames(中油 / siemens / jujia)
樣本量預估~3125 frames × avg 1-2 人/frame = ~3000-6000 person bbox

2️⃣ 視覺特殊性 — 為何要擴大區域

安全繩會從 person 身上 延伸到結構物(horizontal lifeline、scaffold、anchor point),標準 person bbox 切不到 anchor 端。

原 person bbox
只看到 person + harness
⚠️
看不到繩錨點
擴大 bbox 左右 +100%
看到 rope + lifeline
能判斷 correct vs wrong

3️⃣ 兩種架構方案

A. 擴大 person crop(先試)

YOLO person detect → 擴大 bbox 1.0× → resize 384×192 → 分類器

建議:先 A 跑通驗證量級,不夠再升級 B。

4️⃣ Cvat 端組織

新建 cvat2 project「safety_rope」

不要污染現有 project 5(factory_ppe)或 project 7(hatch),新開 project 8:

cvat2 project 8: safety_rope
  labels:
    - person (rectangle)
        + safety_rope_use:
            type: select
            values: [unknown, correct, wrong]
            default: unknown

圖片來源(共用 cvat_share)

位置說明
/mnt/ssd/cvat2/data/cvat_share/external_datasets/hatch_p12/task_*/frame_*.jpg剛剛 hatch pipeline 已下載 168 tasks 的圖到 cvat_share

Task 結構

3 個 cvat2 task(沿用 raicvat#12 subset):

tasksubsetframes
safety_rope_part01of03Train1,305 frames
safety_rope_part02of03Validation663 frames
safety_rope_part03of03Test1,157 frames

5️⃣ Person bbox 取得

raicvat#12 沒 person 標註,要自動生成:

3125 frames
YOLO11n person
(person_seg_yolo11n_v20260415.pt)
~3000-6000 person bbox
PUT 到 cvat2

注意:YOLO 偵測可能漏(small / 遮擋),但工地高處作業多有大尺寸 person,預期準度足夠。

6️⃣ 標註流程

1
創 project 8
2
YOLO person
產生 bbox
3
LLM 預標
safety_rope_use
4
review tool
人工抽查
5
訓練

Step 3 LLM prompt(範例)

對下列 person crop(已含周圍上下文)判斷高處作業安全繩使用:
- correct: 繩子掛勾固定到結構/lifeline 上
- wrong: 沒繩、繩拿在手上、繩掛在自己身上、沒掛勾
- unknown: 非高處作業 / 鏡頭遠看不清 / 沒看到繩

回單字: correct / wrong / unknown
~3-6k
總 person 樣本
~$1-2
Gemini Flash 預標成本
~30 min
LLM 跑時間
~1-2 hr
人工 spot check

7️⃣ 訓練(獨立 model)

跟現有 PPE 21 attr classifier 解耦,因為:

safety_rope_classifier:
  backbone: mobilenetv3_large_100 (pretrained, ~4M params)
  head: nn.Linear(1280, 3)  # 3-cls softmax: correct/wrong/unknown
  loss: CrossEntropyLoss (only on labeled samples)
  input: person crop expanded (CROP_PAD=1.0), 384×192, ImageNet normalize

部署: ppe_service stage 3
  Stage 1: person_seg YOLO → person bbox
  Stage 2: PPE 21-attr classifier (現有 v20260501)
  Stage 3: safety_rope_classifier (新)
  for each person: stage 2 output 21 attrs + stage 3 output rope_use 3-cls

8️⃣ 推薦時程

步驟內容預估
1等 hatch pipeline 完(168 tasks 下載完,圖已在 cvat_share)跑中
2cvat2 創 project 8 「safety_rope」(person rect + safety_rope_use attr)5 min
3跑 YOLO11n person detect 對 3125 frames,生 person bbox10 min
4上傳 3 個 cvat2 task(含 person bbox annotation)10 min
5LLM (Gemini Flash) 預標 safety_rope_use(~5k crops)30 min
6review tool 加 attribute 顯示 + 人工抽查1-2 hr
7export manifest + 訓 v20260502_safety_rope40 min
8HTML report + R2 + Pages10 min

總工時:~3-4 小時(不含人工 spot check)

9️⃣ 風險與待釐清

🔟 開始執行的最低決策

  1. 確認 schema 三態定義(correct/wrong/unknown)
  2. 確認用 raicvat#12 圖夠用,還是要混合 raicvat_p17 / 中油其他資料?
  3. YOLO bbox 用 v20260415 person_seg(既有)vs 訓新 person detector?
  4. 方案 A vs B 起手 — 推薦 A 先跑通

生成 2026-04-27 v2 (raicvat#12 only)| v20260501 modellabel guide舊版 (raicvat_p17)