📝 前言与场景
在昇腾边缘计算(如 Atlas 200I DK A2 / Orange Pi AI Pro)的开发中,我们通常采用**“PC 端交叉编译与模型转换,边缘端直接部署运行”**的模式。 本文基于 Windows WSL2 (Ubuntu) 和 CANN 8.0.0.alpha001,手把手教你完成环境搭建,并将前沿的 YOLOv26-Pose 姿态估计模型从 .pt 转化为 .om 模型。文末附带全套血泪避坑指南。
🛠️ 第一阶段:WSL 交叉编译堡垒搭建
1. 系统级依赖安装 (WSL 终端)
安装交叉编译器和构建工具,为后续编译 ARM 架构的可执行文件做准备:
sudo apt-get update
sudo apt-get install -y build-essential cmake g++-aarch64-linux-gnu gcc-aarch64-linux-gnu wget curl
sudo apt install python3-pip -y
# 安装模型转换所需工具
pip3 install ultralytics onnx onnxsim "numpy==1.26.4" decorator sympy scipy attrs pyyaml protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple --user
sudo apt-get install -y libgl1-mesa-glx libglib2.0-0
# 加载环境
export PATH=$HOME/.local/bin:$PATH
2. 安装 CANN Toolkit (PC 端必须装 x86_64 版)
虽然目标是跑在 ARM 板子上,但在 PC 端作转换,必须安装 x86_64 版本:
⚠️ 路径避坑: 在 WSL 中,Windows D 盘路径必须写 /mnt/d/,绝对不能写 D:/。
# 进入安装包目录,比如
cd /mnt/d/work/Ascend/CANN
# 赋权限
chmod +x Ascend-cann-toolkit_8.0.0.alpha001_linux-x86_64.run
# 检查
./Ascend-cann-toolkit_8.0.0.alpha001_linux-x86_64.run --check
# 安装
./Ascend-cann-toolkit_8.0.0.alpha001_linux-x86_64.run --install

🔑 第二阶段:ATC 环境激活(每次必做)
在 WSL 中每次新开终端准备转换模型前,必须依次执行以下命令。建议写入 ~/.bashrc。
# 注入 CANN 官方环境变量
source ~/Ascend/ascend-toolkit/set_env.sh
# source ~/home/xjh/Ascend/ascend-toolkit/8.0.0.alpha001/x86_64-linux/script/set_env.sh
# 补全深层驱动模拟库路径 (解决 libascend_hal.so 找不到)
export LD_LIBRARY_PATH=$HOME/Ascend/ascend-toolkit/latest/x86_64-linux/devlib/linux/x86_64:$LD_LIBRARY_PATH
export ASCEND_HOME=/usr/local/Ascend/ascend-toolkit/8.0.0/aarch64-linux
export PATH=$ASCEND_HOME/atc/bin:$ASCEND_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ASCEND_HOME/lib64:$ASCEND_HOME/atc/lib64:$LD_LIBRARY_PATH
# 查看当前环境变量
echo $ASCEND_HOME/
# 限制编译并发数防内存打满导致崩溃
export TE_PARALLEL_COMPILER=2

⚙️ 第三阶段:模型锻造 (PT -> ONNX -> OM)
步骤 1:一键导出 ONNX
# opset=12 保证兼容性,simplify=True 开启算子精简(必开)
cd /mnt/d/work/Ascend/model
yolo export model=yolo26s-pose.pt format=onnx opset=12 simplify=True

步骤 2:执行 ATC 最终转换
# 验证atc是否启动
atc --version
# 模型转换
atc --model=yolo26s-pose.onnx \
--framework=5 \
--output=yolo26s-pose \
--input_format=NCHW \
--input_shape="images:1,3,640,640" \
--log=error \
--soc_version=Ascend310B4


看到 ATC run success,即可在当前目录收获神装 yolo26s-pose_aipp.om!
🩸 第四阶段:血泪避坑指南 (Troubleshooting)
❌ 报错 1:libascend_hal.so: cannot open shared object file
-
根因: 环境变量未激活,或 CANN 脚本漏掉了
devlib。 -
方案: 执行【第二阶段】的补丁 1。
❌ 报错 2:AttributeError: np.float_ was removed in the NumPy 2.0 release
-
根因: NumPy 版本过高,ATC 的 TBE 算子融合脚本使用旧接口。
-
方案: 暴力回退
pip install numpy==1.26.4。
❌ 报错 3:ATC 运行中途多进程崩溃 main process disappeared
-
根因: YOLO-Pose 模型复杂,WSL2 内存分配不足导致系统 OOM Killer 杀掉主进程。
-
方案: 执行【第二阶段】的补丁 2 (
export TE_PARALLEL_COMPILER=2),限制并发数慢慢转。
❌ 警告 4:成功但提示 W11001: Op [/model.23/Mod] does not hit the high-priority operator... 及 tiling offset out of range
-
说明: 只要最终看到
ATC run success,完全无需理会! -
解析: 1.
tiling警告是因为检测头算子碎,但在限制了并发数后内存挺过去了。 2.W11001是提醒模型中有个别生僻算子(如求余 Mod)未命中底层汇编优化,回退到了普通 CPU 计算。这仅仅会让单次推理多花 0.几毫秒,对模型精度和可用性没有任何影响。安心使用!


没有回复内容