fix(actpred): 修复 HEF 帧归一化误判与部署图数值不等价,补齐 P3 审计项
- hailo_infer: 帧归一化判定改为量化网格 dequant(0)(旧启发式把归一化 帧当原始像素喂入,图像路径饱和破坏;实机 max_diff 2.55→0.37, img 敏感性 1.44→22.26) - export_deploy: pool kernel 由卷积真实输出尺寸探测(H//16 在 1080 高度下静默丢弃末行);mobilenet backbone 给出明确报错 - mt_parser: @Action 为文件末位块时解析成功,不再静默丢数据 - config: checkpoint train 段未知键/非 dict 校验;init-from 兼容性 警告助手(normalize/action_dim),train 与 pretrain 共用 - dataset: stats 文件形状校验;predict: 移除误导性 --action-dim - dfc_compile: --frame-count 参数化(原硬编码 3 帧) - gen_calibration: 旧模式校准图像改分块 memmap 生成(1080p 原一次性 分配 ~600MB) - _npu_test: torch 参考反归一化对齐后再与 HEF 比较 - 单测 81→90 全过;README 与测速报告更新为验证轮次数据
This commit is contained in:
1 parent
316758d80e
commit
823e91a30e
14 files changed
+381
-62
No files matched your search
@@ -93,11 +93,33 @@ NPU 部署轮次以 224×224 的 `pretrain_best_inference.pt` 为准(HEF 编
|
||||
| ONNX Runtime CPU | 224×224 | 10.7 ms | 纯 `session.run`(预缩放输入) |
|
||||
| Hailo-10 NPU(actpred HEF,首版) | 64×64 | 6.3 ms | 含预处理 + 量化/反量化,驱动 5.3.0 |
|
||||
|
||||
注:本组 ONNX 纯推理(10.7ms)与 §2 的 5.9ms(同为 224 模型)存在
|
||||
差异,未追根(torch≥2.12 dynamo 导出路径、系统负载、ORT 线程调度均
|
||||
可能影响),以本组实测为准;ONNX 仍比 PyTorch 快约 2 倍。NPU 首版
|
||||
HEF 因编译侧输入断开输出恒定,仅作封装性能基线,数值有效性待重编译
|
||||
后复验(见 hailo 调研报告)。
|
||||
### 6.1 归一化轮次 HEF 复测(2026-08-13 同日,输入连通性验证通过后)
|
||||
|
||||
同一轮次对通过 `_npu_test.py` 验收的归一化轮次 HEF
|
||||
(224×224,`hailo_infer.py` 帧归一化判定修复后)实测,预热 5 次取
|
||||
50 次均值(纯 NPU run 取 200 次):
|
||||
|
||||
| 方案 | 输入分辨率 | 延迟 | 备注 |
|
||||
|---|---|---|---|
|
||||
| Hailo-10 NPU 端到端 predict | 224×224 | 10.5 ms | 含预处理 + 量化/反量化 |
|
||||
| Hailo-10 NPU 纯 run(绑定后循环) | — | 4.4 ms | Python API/PCIe 开销主导,HEF 计算本身远小于此 |
|
||||
| Hailo-10 NPU 预处理(3 帧 resize+归一化) | 224×224 | 3.4 ms | PIL resize 为主 |
|
||||
| PyTorch CPU(同机复测) | 224×224 | 22.4 ms | 含预处理 |
|
||||
| ONNX Runtime CPU(同机复测) | 224×224 | 11.0 ms | 含预处理,重新导出的当前 checkpoint |
|
||||
|
||||
**结论**:
|
||||
|
||||
1. 224×224 下 NPU 端到端(10.5ms)与 ONNX Runtime(11.0ms)基本持平,
|
||||
纯 NPU run 的 4.4ms 是 Python 绑定/PCIe 同步开销主导(对照 §2
|
||||
resnet50 串行单帧同为 4.29ms,而 actpred 计算量仅其 ~1/55)。
|
||||
后续可用 `run_async` 流水线把预处理与 NPU 执行重叠。
|
||||
2. NPU 的价值不在绝对延迟而是**把推理从 CPU 卸载**,让 4×A76 专注
|
||||
pybot 主控循环;CPU 侧 ORT 仍是有效的纯软件方案。
|
||||
3. **1080p 采集是最大瓶颈**:预处理随输入像素量增长,实测
|
||||
640×480 输入 11.8ms、960×540 输入 15.7ms、1080p 输入 45.0ms
|
||||
(端到端分别 18.6 / 22.8 / 51.7ms)。部署建议摄像头以
|
||||
640×480 或更低分辨率采集(或 224×224 中心裁剪 ROI),
|
||||
而不是全分辨率后缩放。
|
||||
|
||||
## 参考
|
||||
|
||||
|
||||
Reference in new issue
Block a user