fix(actpred): 定位 HEF 输入不敏感根因,补齐归一化预训练链路
根因:预训练全零图像占位使 BN running_var 停在初始小值,推理时 特征放大至 ±1e6,DFC 在 token merge 点按最大幅度分配共享量化 scale,pred_token/act_tokens 全部被压成 0,HEF 输出对任何输入 恒定(详见 docs/reports/actpred_hef_insensitivity_rootcause_20260813.md) - export_deploy.py:新增 check_token_ranges 导出前 token 量级检查 (|img|>100 中止导出并提示微调;act/img 比例过大警告;归一化 模型在 z 空间采样,避免零方差列爆炸) - pretrain_mt.py:新增 --random-images(ImageNet 归一化噪声占位, 恢复 BN 统计)、--init-from(微调起点,含动作空间一致性警告)、 --normalize-actions 完整支持(训练集 stats 计算与保存、验证集复用) - gen_calibration.py:归一化模型的校准集自动 z-score 动作历史 - _onnx_validate.py / _npu_test.py:归一化模型适配(torch 参考 z-score、HailoPredictor 传 stats_path) - README:预训练章节补充新参数与 NPU 部署警告 - 单测 76/76 通过;冒烟验证:1 epoch 噪声微调后 |img| 2.46e5→8, 归一化后 |act| 694→2.9
This commit is contained in:
1 parent
8c58770280
commit
52c0ade3c4
8 files changed
+394
-27
No files matched your search
+14
-4
@@ -62,9 +62,7 @@ bash _run.sh pretrain --mt-dir ../bot4cj/scripts --epochs 200 --noise-std 1.0
|
||||
bash _run.sh pretrain --mt-dir ../bot4cj/scripts --epochs 200 --noise-std 1.0 \
|
||||
--resume checkpoints/pretrain_last.pt
|
||||
|
||||
# 用预训练权重作为微调起点
|
||||
# 注意:预训练在非归一化动作空间进行,微调时请勿开启 --normalize-actions,
|
||||
# 否则输入分布与预训练权重不匹配,预训练收益会大打折扣
|
||||
# 用预训练权重作为微调起点(pretrain 也支持 --init-from,行为同 train)
|
||||
bash _run.sh train --data-dir ./data --epochs 50 \
|
||||
--init-from checkpoints/pretrain_best_inference.pt
|
||||
```
|
||||
@@ -72,9 +70,21 @@ bash _run.sh train --data-dir ./data --epochs 50 \
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| `--mt-dir` | .mt 脚本目录(如 `../bot4cj/scripts`) |
|
||||
| `--noise-std` | 高斯噪声标准差(数据增强,建议 0.5~2.0) |
|
||||
| `--noise-std` | 高斯噪声标准差(数据增强,建议 0.5~2.0;与 `--normalize-actions` 联用时按 z-score 单位,建议 0.05~0.2) |
|
||||
| `--random-images` | 用 ImageNet 归一化均匀噪声替代全零图像占位,**恢复 BN 统计**(详见下方警告) |
|
||||
| `--init-from` | 预训练 checkpoint 路径,作为微调起点(strict=False;与当前运行动作空间不一致时打印 WARNING) |
|
||||
|
||||
> **注意**:.mt 脚本列数(12)与 `action_dim`(18)不一致时自动补零。预训练保存到 `checkpoints/pretrain_best_inference.pt`。
|
||||
> 预训练与微调必须使用**同一动作空间**(`--normalize-actions` 同时开或同时关),
|
||||
> 否则输入分布与权重不匹配,预训练收益会大打折扣。
|
||||
|
||||
> **警告(2026-08-13 实测)**:全零图像占位会让 BN `running_var` 停在初始小值,
|
||||
> 推理时特征放大到 ±1e6,**HEF uint8 量化不可行**(输出对输入不敏感)。
|
||||
> 面向 NPU 部署的预训练/微调请务必使用 `--random-images`(或真实数据微调),
|
||||
> 导出时 `export_deploy.py` 的 `check_token_ranges` 会拦截退化的 checkpoint。
|
||||
> 详见 [根因分析报告](../docs/reports/actpred_hef_insensitivity_rootcause_20260813.md)。
|
||||
> 建议同时开启 `--normalize-actions`:z-score 后 act_tokens 与 img_tokens 同量级,
|
||||
> 避免 HEF merge 点共享量化 scale 粗量化图像路径。
|
||||
|
||||
## 数据格式
|
||||
|
||||
|
||||
Reference in new issue
Block a user