本文详细记录一次将 PyTorch 模型 (.pth.tar) 转换为 Rockchip 平台专用 RKNN 模型 (.rknn) 的完整流程。涉及环境配置、依赖冲突以及最终的解决方案,希望能为面临类似任务的开发者提供一份详尽的参考。
0 前言
0.1 最终目标
源模型: 一个基于 PyTorch、以 ResNet 为骨干网络的检测模型。
目标格式: 适用于 Rockchip RK3576 芯片的 RKNN 2.1 版本模型。
核心需求: 模型需经过 INT8 量化以在嵌入式端达到高性能。
0.2 最终成功的环境配置
经过多次尝试,以下是最终确定的、能够稳定运行所有转换任务的环境版本组合。
基础环境:
Linux (e.g., Ubuntu)
Python: 3.6
核心AI框架:
PyTorch: 1.13.1 (cu117)
TorchVision: 0.14.1
TorchAudio: 0.13.1
模型转换工具:
ONNX: 1.12.0
ONNX Runtime: 1.12.0
RKNN-Toolkit2: 2.3.2
关键依赖库:
NumPy: calibration.lst[/code]准备转换脚本 convert_to_rknn.py (内容见下一节)
1.5 执行模型转换
由于系统 PATH 变量可能存在问题,建议使用Python解释器的绝对路径来确保调用正确的环境。
查找您的Python解释器绝对路径- conda create -n rknn_py36_env python=3.6 pip -y
复制代码 (假设输出为 /path/to/your/anaconda3/envs/rknn_py36_env/bin/python)
使用绝对路径运行脚本 (请替换为上一步的实际输出)- conda activate rknn_py36_env
复制代码 成功后,项目目录下会生成最终的 acm_model_256.rknn 文件。
2 模型转换脚本
点击展开查看完整的Python脚本- cd ~/your/rknn-toolkit2-v2.3.2-2025-04-09/
复制代码 3 排错历程与问题归纳
[table][tr]错误现象 (Symptom)根本原因 (Root Cause)最终解决方案 (Final Solution)[/tr][tr][td]ModuleNotFoundError (e.g., torch, cv2)[/td][td]Conda环境中缺少必需的Python库。[/td][td]在激活的环境中使用 pip install 或 conda install 安装缺失的包。[/td][/tr][tr][td]FileNotFoundError (e.g., config.json, 图片, .lst文件)[/td][td]文件路径错误、文件名不匹配、或数据加载代码有缺陷。[/td][td]修正脚本/配置文件中的路径,重命名文件,或修改数据加载器代码以正确拼接扩展名。[/td][/tr][tr][td]IndentationError[/td][td]编辑代码时混用了Tab和空格,或意外删除了函数体。[/td][td]使用编辑器的“将缩进转换为空格”功能统一代码格式,或补全缺失的代码。[/td][/tr][tr][td]pip安装成功但python找不到模块[/td][td]PATH环境变量配置错误,导致终端优先调用了Conda环境之外的另一个Python解释器。[/td][td][临时方案]使用Python解释器的绝对路径来执行命令。[根本方案]修改~/.bashrc文件,注释掉错误的PATH设置.[/td][/tr][tr][td]Solving environment: failed (Conda错误)[/td][td]底层网络问题(代理/防火墙)导致Conda无法下载或解析包索引;或极其复杂的依赖冲突。[/td][td][网络]联系管理员配置网络代理。[依赖]彻底重建环境,并采用分步或手动指定所有版本号的方式安装。[/td][/tr][tr][td]AttributeError: 'onnx' has no attribute 'mapping'[/td][td]RKNN-Toolkit2代码与过新版的onnx库不兼容。[/td][td]将 onnx 和 onnxruntime 降级到 1.12.0 版本。[/td][/tr][tr][td]...requires onnx>=1.16.1, but you have onnx 1.12.0...[/td][td]RKNN-Toolkit2安装元数据与其代码的实际运行要求自相矛盾。[/td][td]安装rknn-toolkit2的.whl文件时,使用 --no-dependencies 参数忽略其错误的依赖检查。[/td][/tr][tr][td]RuntimeError: ... no kernel image is available ...[/td][td]PyTorch版本过旧,不兼容新版GPU的计算能力。[/td][td]安装与GPU硬件匹配的、更新的PyTorch GPU版本。[/td][/tr][tr][td]A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0.x[/td][td]NumPy 2.0 引入了不向后兼容的API改动。[/td][td]将NumPy降级到2.0以下的版本 (pip install numpy" |