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:
qing committed 2026-08-13 15:22:34 +08:00
1 parent 316758d80e
commit 823e91a30e
14 files changed
+381 -62

No files matched your search

+8 -4
View File
@@ -34,11 +34,15 @@ def parse_mt_action(path) -> np.ndarray:
# 先去除整行注释(# 开头),避免注释中的 @Action 干扰正则匹配
text = re.sub(r"(?m)^[ \t]*#.*$", "", text)
match = re.search(r"@Action\s+(.*?)\s*@", text, re.DOTALL)
if not match:
start_m = re.search(r"@Action\s+", text)
if not start_m:
raise ValueError(f"未找到 @Action 块: {path}")
block = match.group(1)
# 块结束于下一个 @ 段标记;@Action 为文件最后一个块时取到文末
# (旧正则 @Action\s+(.*?)\s*@ 要求后续必有 @,末位块会解析失败)
block = text[start_m.end():]
end_m = re.search(r"\s*@", block)
if end_m:
block = block[:end_m.start()]
rows = []
for line in block.split("\n"):