Pre-trained Model 跑起來了,Threshold 到底要怎麼定?
前幾天,我們終於把 Pre-trained Model 放進 QCS6490。
經過 Model Format、Input / Output、Pre-processing、Quantization、QNN、HTP 等一連串調整後,Model 終於可以正常跑在 Edge Device 上。
Camera 進來,AI 開始偵測。
畫面上出現:
Person
Confidence: 0.82
看到這裡,很容易覺得:
完成了。
但以我是 AI PM,我會馬上問一個問題:
0.82 是什麼意思?
那如果今天是:
Person
Confidence: 0.62
算不算?
0.48 呢?
0.31 呢?
這時候我們就遇到一個看起來很小,但其實很重要的問題:
Confidence Threshold 到底應該設多少?
一開始很多人很容易有這種直覺:
Confidence > 0.5
→ Accept
Confidence < 0.5
→ Reject
看起來很合理。
但問題是:
為什麼是 0.5?
0.5 是 Model 的標準答案嗎?
不是。
0.7 一定比 0.5 好嗎?
也不是。
0.9 一定最準嗎?
更不一定。
真正的問題應該是:
這個 Model 在我們的實際場域裡,Confidence 分布是什麼樣子?
這也是為什麼我覺得 Pre-trained Model 很方便,但不能「下載完就相信」。
我們現在的做法是:
使用 Pre-trained Model → 部署到 QCS6490 → 接實際 Camera → 做 Unmanned Area Detection。
但是 Model 原本看到的資料,跟我們現場可能完全不同。
例如:
同樣是一個 Person,Model 可能得到:
正常光線 0.93
稍微背光 0.81
遠距離 0.68
部分遮擋 0.57
非常模糊 0.41
所以真正值得問的不是:
「這個 Model 的 Threshold 是多少?」
而是:
「這個 Model 在我們的真實環境裡,Threshold 應該是多少?」
所以我們開始改變思考方式。
不是 PM 直接指定:
Confidence Threshold = 0.5
而是:
Real-world Data
↓
Pre-trained Model
↓
Inference
↓
Confidence
↓
Threshold Evaluation
↓
False Positive / False Negative
↓
Product Decision
這才是比較完整的流程。
假設我們拿一批實際工廠 Camera 的影像。
裡面有:
然後讓 Pre-trained Model 全部跑一次。
這時候我們開始看到 Confidence 的分布。
例如真正的 Person:
0.95
0.91
0.88
0.84
0.79
0.73
0.68
0.61
0.55
而錯誤偵測可能是:
0.72
0.64
0.58
0.49
0.37
這時候問題就變得有趣了。
假設:
Threshold = 0.5
那麼:
0.91 → Accept
0.84 → Accept
0.73 → Accept
0.61 → Accept
0.55 → Accept
但另一邊:
0.72 → False Positive
0.64 → False Positive
0.58 → False Positive
代表雖然我們抓到了很多 Person,
但也可能一直誤報。
我們再試一次:
Threshold = 0.7
可能變成:
真正 Person
0.95 → Accept
0.91 → Accept
0.88 → Accept
0.84 → Accept
0.79 → Accept
0.73 → Accept
0.68 → Reject
0.61 → Reject
False Positive 可能降低。
但同時也可能漏掉一些真正的人。
這就是典型的:
False Positive vs. False Negative Trade-off。
這也是我覺得 AI Product 跟單純 Model Demo 很不一樣的地方。
如果只是 Demo:
「看!AI 可以抓到人。」
就結束了。
但如果是 Product,就會開始問:
「漏掉一個人會怎樣?」
「誤報一次會怎樣?」
「客戶一天收到幾次 Alert 才不會覺得煩?」
「如果是工廠安全場景,False Negative 能接受多少?」
這些問題已經不是單純的 AI Model 問題。
而是 Product Decision。
假設今天有兩個 Threshold:
Threshold A
Accuracy:95%
Threshold B
Accuracy:93%
看起來 A 比較好。
但如果:
那到底哪一個比較適合?
不能只看 Accuracy。
因為不同 Use Case,錯誤的成本不一樣。
我們的情境是:
偵測非工作時間的人員入侵。
那麼:
False Positive
→ 多通知一次
→ 多看一次 Camera
跟:
False Negative
→ 根本沒有發現有人進入
這兩個錯誤的 Business Impact 並不一定相同。
因此 Threshold 的選擇,最後應該回到:
Customer Scenario + Real-world Data + Business Risk
而不是單純:
Model 建議 0.5,所以我們用 0.5。
這時候我們又發現一件事情。
即使:
Person
Confidence = 0.82
我們也不能直接說:
Intrusion!
因為 AI 只告訴我們:
「我看到一個 Person。」
但是產品真正想知道的是:
「這個 Person 有沒有進入禁止區域?」
所以後面還需要:
Person Detection
↓
Confidence Check
↓
Geofence Check
↓
Tracking / Frame Validation
↓
Business Rule
↓
Event
這也是為什麼我開始覺得:
Confidence 不應該直接等於 Event。
到了這裡,我們的架構開始慢慢變成:
Camera
↓
AI Model
↓
Detection
↓
Confidence
↓
Rule
↓
Event
↓
Action
例如:
Camera
↓
Person Detection
↓
Confidence > Threshold
↓
Person inside Geofence
↓
Intrusion Event
↓
Alert + Recording
這時候 AI 才真正開始有「產品行為」。
我不需要自己訓練 YOLO。
也不需要自己寫 QNN。
但我需要跟 Engineer 一起把問題定義清楚:
我們要用什麼資料驗證?
要測哪些 Threshold?
例如:
0.3
0.4
0.5
0.6
0.7
0.8
不能只看 FPS。
還要看:
最後再問:
這個 Use Case 最不能接受的是什麼?
是誤報太多?
還是漏掉真正的事件?
以前很容易把 Pre-trained Model 想成:
「別人已經訓練好了,我拿來用就好。」
但真正放到產品裡之後才發現:
Pre-trained Model
↓
Model Deployment
↓
Real-world Data
↓
Validation
↓
Threshold Tuning
↓
Rule
↓
Event
↓
Product
所以 Pre-trained Model 幫我們省掉的是:
從零開始訓練 Model 的成本。
但它沒有幫我們解決:
這個 Model 在我們的實際產品場景裡,到底夠不夠好?
這件事情還是要靠 Data 驗證。
Confidence 是 Model 的輸出,但 Threshold 是 Product 的 Decision。
而這個 Decision,不應該憑感覺。
應該來自:
Real-world Data → Model Performance → False Positive / False Negative → Business Risk → Product Decision
這也是我做 Edge AI 之後越來越深的感受:
AI Product 最難的地方,往往不是讓 Model 跑起來,而是知道什麼時候可以相信它。