Product & Environment
- Board: Regulus RA
- OS: Mobilint Yocto Distro v3.4.0
- qbcompiler: 1.2.0
- qbruntime: v1.2.0
- Architecture: aarch64
- Device/Core/Bundle: device 0 / Cluster0-Core0 / bundle 0
- CPU offload: disabled
- 실행 API: synchronous `Model.infer()`
문의
Regulus RA에서 qbcompiler로 생성한 MXQ를 qbruntime NPU-only로 실행하고 있습니다. 동일한 ONNX의 CPU 결과와 비교할 때 정확도가 크게 낮아 문의드립니다.
측정 결과:
-
ResNet50
-
CPU ONNX Top-1: 77.03%
-
CPU ONNX Top-5: 92.90%
-
Regulus MXQ Top-1: 55.37%
-
Regulus MXQ Top-5: 78.77%
-
-
YOLOv5m
-
YOLOv8s-pose
-
CPU ONNX OKS mAP: 0.6567
-
Regulus MXQ OKS mAP: 0.0000
-
-
YOLOv9m 튜토리얼 재현
공식 튜토리얼의 compilation/object_detection/model_compile.py를
수정하지 않고 다음 조건으로 실행했습니다.
-
model: YOLOv9m ONNX
-
target:
regulus-ra -
calibration: COCO 500장
-
method=1, output=1, percentile=0.9999, topk_ratio=0.01
컴파일은 성공했고 출력 shape도 정상입니다.
(80,80,64), (80,80,80)
(40,40,64), (40,40,80)
(20,20,64), (20,20,80)
하지만 공식 Python runtime 실행 결과:
No detections found.
동일 이미지의 CPU ONNX는 3개 검출, 최대 confidence 0.9164입니다.
Regulus MXQ class head는 sigmoid 후 최대값이 약 0.03 수준입니다.
또한 동일 입력을 반복 Model.infer()했을 때 YOLO raw head 간 최대 절대 차이가 약 4.8~13.6으로 측정된 경우도 있습니다.
질문:
-
Regulus RA에서 정확도가 검증된 공식 YOLO/ResNet MXQ 또는 권장 compiler recipe가 있나요?
-
동일 입력에 대한 qbruntime v1.2.0 synchronous
Model.infer()raw output 변동이 알려진 현상인가요? -
Regulus RA용 calibration, input quantization, preprocessing 추가 설정이 필요한가요?
-
ONNX → MBLT → MXQ numerical equivalence를 확인할 수 있는 Mobilint 권장 도구나 절차가 있나요?
-
현재 현상이 calibration, compiler backend, NPU quantization, runtime 중 어느 단계에서 발생하는지 확인할 방법이 있을까요?
Logs & Attachments
[Compilation]
The original tutorial file was used without modification:
compilation/object_detection/model_compile.py
Command:
python model_compile.py \
--onnx-path yolov9m.onnx \
--calib-data-path coco-selected \
--save-path yolov9m.mxq \
--mblt-path yolov9m.mblt \
--target-device regulus-ra
Calibration:
- 500 COCO images
- method=1
- output=1
- mode=1
- percentile=0.9999
- topk_ratio=0.01
- letterbox: 640x640, padValue=114
- Uint8InputConfig(apply=True)
Compiler log:
strip_yolo_decode_transform | Applying YOLO decode removal rules.
Input Shape:
(1, 640, 640, 3)
Output Shapes:
(1, 80, 80, 64)
(1, 80, 80, 80)
(1, 40, 40, 64)
(1, 40, 40, 80)
(1, 20, 20, 64)
(1, 20, 20, 80)
[2026-08-05 12:39:56.283] Compilation was successful.
[Regulus tutorial runtime]
I0805 12:40:39.107 model_impl.cc:1025] Model constructed.
I0805 12:40:39.255 model_impl.cc:1357] Model launched.
I0805 12:40:39.463 model_impl.cc:1376] Model disposed.
No detections found. Saved the original image.
[Raw output diagnostic]
0 (80, 80, 64) float32
min=-4.4738 max=14.8038 mean=0.9950
1 (80, 80, 80) float32
min=-25.7085 max=-3.4774 mean=-14.0829
sigmoid_max=0.02996
2 (40, 40, 64) float32
min=-8.4007 max=12.9718 mean=0.9811
3 (40, 40, 80) float32
min=-22.5100 max=-3.5294 mean=-10.8660
sigmoid_max=0.02849
4 (20, 20, 64) float32
min=-1.7253 max=4.3897 mean=0.9982
5 (20, 20, 80) float32
min=-13.3648 max=-5.1569 mean=-10.4256
sigmoid_max=0.00573
Postprocess result:
detections: (0, 7)
[CPU ONNX reference]
Ultralytics YOLOv9m ONNX inference:
onnx_detections 3
conf_max 0.9164232015609741
classes [29.0, 16.0, 2.0]
[Model comparison summary]
ResNet50:
CPU ONNX Top-1: 77.03%
CPU ONNX Top-5: 92.90%
Regulus MXQ Top-1: 55.37%
Regulus MXQ Top-5: 78.77%
YOLOv5m:
CPU ONNX mAP@0.5: 0.9154
Regulus MXQ mAP@0.5: 0.0000
YOLOv8s-pose:
CPU ONNX OKS mAP: 0.6567
Regulus MXQ OKS mAP: 0.0000
YOLOv9m:
CPU ONNX detections: 3
Regulus MXQ detections: 0