我来帮你排查这个问题。先搜索社区是否有类似案例和解决方案。
根据文档和搜索结果,我来帮你分析这个问题:
结论
是的,HAT (Horizon Algorithm Toolkit) 目前只在 GPU Docker 中提供。CPU Docker 不包含 HAT 模块,这是设计上的限制。
问题分析
-
CPU Docker 限制:
- CPU Docker (
ai_toolchain_ubuntu_22_s100_s600_cpu_v3.7.0.tar) 主要用于模型转换、编译和推理 - 不包含训练相关的 HAT 模块
horizon_model_train_sample/scripts文件夹在 CPU 包中确实不存在
- CPU Docker (
-
GPU Docker 才有 HAT:
- HAT 是训练工具包,依赖 GPU 环境
- 即使使用 J6 的 CPU Docker,也找不到 HAT 模块
解决方案
方案 1:使用 PTQ 的精度评估工具(推荐)
对于 QAT 模型的精度评估,可以借用 PTQ 的精度评估流程:
# 1. 在 CPU Docker 中,使用 hb_eval_preprocess 工具预处理数据
hb_eval_preprocess -m stereonetplus_mixvargenet_sceneflow \
-i /path/to/sceneflow/left \
-o ./pre_sceneflow_left
hb_eval_preprocess -m stereonetplus_mixvargenet_sceneflow \
-i /path/to/sceneflow/right \
-o ./pre_sceneflow_right
# 2. 生成 lst 文件
find ./pre_sceneflow_left -name "*.bin" | sort > ./pre_sceneflow_left.lst
find ./pre_sceneflow_right -name "*.bin" | sort > ./pre_sceneflow_right.lst
# 3. 在板端运行 accuracy.sh 获取 eval.log
cd /userdata/qat/script/disparity_pred/stereonetplus_mixvargenet_sceneflow
sh accuracy.sh
# 4. 使用 PTQ 的精度计算脚本(需要找对应的评估脚本)
# 对于深度估计模型,可能需要自定义评估脚本
方案 2:手动编写数据预处理脚本
如果不依赖 HAT,可以自己编写预处理脚本:
# 参考文档中的预处理逻辑,手动实现
# 1. 读取 SceneFlow 数据集
# 2. 按照模型输入要求进行 resize、normalize 等处理
# 3. 保存为 bin 格式
# 4. 生成 val_gt_infos.pkl 文件用于精度计算
方案 3:临时使用 GPU Docker 做数据预处理
# 1. 启动 GPU Docker(即使没有 GPU,部分预处理脚本可能可以运行)
docker run -it docker_open_explorer_ubuntu_22_j6_gpu_v3.7.0.tar.gz
# 2. 运行预处理脚本
cd /open_explorer/samples/ai_toolchain/horizon_model_train_sample
python3 tools/bpu_val_preprocess.py \
-c configs/disparity_pred/stereonet/stereonetplus_mixvargenet_sceneflow.py \
--save-path ./data/sceneflow/
# 3. 将预处理后的数据导出,在 CPU Docker 中进行推理评估
建议
- 优先尝试方案 1:使用
hb_eval_preprocess工具,这是 CPU Docker 支持的标准工具 - 查看 Model Zoo 文档:StereoNetPlus 参考算法 可能有具体的精度评估方法
- 联系地平线技术支持:如果上述方案都不可行,建议在社区发帖或联系官方获取 QAT 精度评估的标准流程
关键提示
- QAT 模型的精度评估流程和 PTQ 类似,核心是:数据预处理 → 模型推理 → 精度计算
- HAT 主要用于训练阶段的数据处理,推理阶段的精度评估可以不依赖 HAT
- 对于 SceneFlow 数据集的深度估计模型,可能需要自定义精度评估指标(如 EPE、D1 等)
你可以先尝试用 hb_eval_preprocess 处理数据,看看能否走通整个流程。如果需要具体的预处理参数配置,可以查看模型的配置文件或参考 PTQ 示例。