前幾天我們終於把 QCS6490 的 NPU 跑起來。
這時候一個很自然的想法出現:
那我去 Qualcomm AI Hub 找 Model,不就好了?
答案是:
沒有這麼簡單。
AI Hub Workbench 確實可以幫忙做 Model compile、optimization、profile,也可以產生 QNN、ONNX、LiteRT 等不同 Runtime 的資產。
但對我們來說:
「AI Hub 有這個 Model」≠「這個 Model 可以直接丟進我們的 QCS6490 Edge AI Application」。
中間還有一段 Model Onboarding。
例如我們拿到一個 pretrained YOLO:
model.pt
第一件事不是直接部署。
而是先確認:
Model Format
Input
Output
Operator
Datatype
Shape
Pre-processing
Post-processing
例如:
Input:
640 × 640
RGB
FP32
NCHW
但我們 Camera 進來可能是:
1920 × 1080
NV12 / YUV
這中間就需要:
Camera
↓
Color Convert
↓
Resize / Letterbox
↓
Normalize
↓
Tensor
↓
Model
Model 要吃什麼,跟 Camera 給什麼,不一定是一樣的。
Pre-trained Model 看起來只是一個 .pt 或 .onnx。
但裡面其實是一整張 computation graph。
例如:
Conv
↓
BatchNorm
↓
SiLU
↓
Concat
↓
Resize
↓
Sigmoid
↓
...
所以我們要確認:
這些 Operator 能不能被 Qualcomm Runtime / HTP 正確處理?
如果某個 Operator 不支援,就可能需要:
Qualcomm 的 Model Onboarding 文件也把 Model Conversion、Unsupported Layer、Custom Operation 列為部署流程中的重要工作。
這也是為什麼:
「可以 Compile」
跟
「可以高效跑在 HTP」
不是完全相同的事情。
這個地方非常容易出錯。
假設 Model Output 是:
[1, 8400, 84]
但 Application 預期的是:
[x1, y1, x2, y2, confidence, class_id]
那中間還需要做 Output Decode。
例如:
QNN Output
↓
Decode
↓
Confidence Filter
↓
NMS
↓
Class Filter
↓
Bounding Box
最後才會得到我們真正需要的:
Person
Confidence = 0.87
BBox = (x1, y1, x2, y2)
所以 Model Output 的格式,其實也是 Product Integration 的一部分。
如果要進一步把 Model 做成 INT8:
FP32
↓
Calibration Dataset
↓
Quantization
↓
INT8
↓
QNN / HTP
這裡還要確認:
Accuracy 有沒有掉?
因為我們真正關心的不是:
INT8 比 FP32 快多少?
而是:
速度提升之後,Person Detection 還能不能達到產品需要的準確度?
Qualcomm AI Hub Workbench 目前也提供 quantization workflow,使用 AIMET 進行 calibration / quantization。
完成前面的確認後,才進 Qualcomm 的 compile flow:
Pre-trained Model
↓
Model Adaptation
↓
ONNX / Supported Format
↓
AI Hub Workbench / QNN
↓
Compile
↓
QNN Model / DLC / Context Binary
↓
QCS6490
↓
HTP
這裡又有一個很重要的差異。
QNN Context Binary 是針對特定 SoC 的。
所以不是:
「我在某個 Qualcomm Device 上 compile 成功。」
就代表:
「拿到另一個 Qualcomm Device 一定可以直接用。」
Qualcomm 文件明確說明,Context Binary 是 SoC-specific,而且針對特定硬體編譯後預期部署到相同裝置。
到了這一步,我才會把 Model 放進我們的 Application:
RTSP
↓
GStreamer
↓
Decode
↓
Pre-processing
↓
QNN / HTP
↓
Post-processing
↓
Person Detection
↓
Geofence
↓
Intrusion Event
然後開始量:
FPS
Latency
CPU
NPU
Memory
Frame Drop
Accuracy
Stability
如果這些都 OK,
這時候我才會說:這個 Model 可以 Deploy。
不是沒用。
反而非常有用。
它可以幫我們省掉很多 Model conversion、optimization、profiling 的工作。AI Hub Workbench 本身就是用來做 Qualcomm 裝置上的 model optimization、validation 和 deployment。
但 AI PM要注意的是:
AI Hub 解決的是 Model 優化與 Qualcomm Runtime 的一大段工作,不是直接替我們完成整個 Product Integration。
因為最後還是要接回:
Model → QNN → HTP → GStreamer → Application → Rule → Event
Pre-trained Model 不是拿來就用。
真正把一個 Model 放進 Edge Device,中間還要處理:
Format → Operator → Input → Pre-process → Compile → Quantization → Runtime → Output → Post-process → Application
這也是為什麼我們在做 Edge AI Product 時,
「Model 能不能跑」其實只是第一關。
下一關才是:
「這個 Model 能不能變成我們產品真正可以交付的功能?」