💨 純煙偵測 smoke_only v20260618 — 新模型線(基線)
MobileNetV3-L · single-head smoke binary · cvat #2 · 「無明火純煙」資料集(task 層級排除含 fire 標記的 task)
定位:全新獨立模型線,非取代現役 fire_smoke。 目標為偵測無明火伴隨的煙(陰燃 / 工業排煙 / 早期煙)。
本版為基線:test smoke_AP 0.8867,但 P@R90 precision 偏低(0.728,FP 894)且高度集中少數場景(top10 task 佔 66%)。尚未上 production / ppe-demo。
📊 結果(cvat #2 純煙集 test split)
| 指標 | 值 | 說明 |
| test smoke_AP | 0.8867 | pos 2664 / neg 7081 |
| train smoke_AP(抽樣 8k) | 0.9773 | train-test gap +0.091(中度,非純背書) |
| P@R90 | P=0.728 | thr=0.068 · R=0.900 · FP=894 TP=2398 FN=266 |
🎯 誤報根因分析(SOP 3.5)
| FP 場景 top(task) | FP | neg | FP-rate |
| task 979 | 334 | 605 | 0.55 |
| task 5370 | 52 | 142 | 0.37 |
| task 1497 | 38 | 38 | 1.00 |
| task 661 / 3019 / 1481 / 728 | ~20 each | — | 1.00 |
- FP 高度集中:top10 task = 587/894 = 66%;單一 task 979 就佔 37%(334 FP)。多個場景 FP-rate=1.00(整場負樣本全誤判)。
- train-test gap +0.091:train 0.977 非 1.0 → 非單純背訓練集,補資料 + hard-neg 對泛化有部分空間(非全靠 aug/ensemble)。
- shortcut/模糊推測:FP-rate=1.00 的場景很可能是蒸氣 / 雲霧 / 粉塵 / 逆光背景被當煙,或標註本身模糊(不可消除上限)——需人工 audit task 979 / 1497 / 661 等。
- 下一步:針對 task 979 等高 FP 場景挖 hard-neg ×oversample 重訓;audit FP-rate=1.00 場景量化標註模糊比例。
📦 訓練 stack
- Backbone:MobileNetV3-L(4.20M params)· single-head smoke binary(num_classes=1)· BCE pos_weight=4.17
- Aug:camaug(photometric + EMA-free)· mixup 0.2 · drop 0.3
- Hyperparams:25 ep / patience 3 / batch 96 / AdamW lr 5e-4 wd 0.05 — best ep2(early stop ep5,收斂偏快,val 略 noisy)
- 訓練 imgsz:224×224 推論 imgsz:224×224
🗂️ 資料集設計(關鍵)
- task 層級排除含 fire 的 task(operator 拍板):cvat #2 共 1415 task,排除含任一 fire 標記的 209 個 task,保留純煙集。
- 純煙集 96,530 frame(train 80,743 / val 6,042 / test 9,745),fire 正樣本=0(完全乾淨)。
- 設計代價:task 層級排除丟掉約 64% 的 smoke 正樣本(60,829 → 21,782,因真實火災「煙火並存」場景連同 fire 一起被排)。換得「無明火純煙」乾淨訓練集,避開 fire=1 但 smoke=0 的漏標污染(task 613 漫天濃煙未標 smoke 型)。
- build:
build_p2_manifest_smoke_only_v20260618.py(含 video-mode 抽 frame + deleted_frames + acceptance 過濾)· train:train_fs_smoke_only.py