ILD

convert siglip2 onnx model to rknn
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2026-10-26 站点:Inside Linux Development

前几篇文章,将siglip2转成了onnx格式,并且使用onnx runtime进行了推理验证。

手上有rk3588的开发版,尝试使用rknn-toolkit2将其转换成rknn的模型,在rk3588上使用NPU进行推理。


下载rknn-toolkit2

https://github.com/airockchip/rknn-toolkit2

从release里面下载最新的2.5版本。目前不支持windows下的python。放到linux中,解压。

$ ls ~/rknn/

rknn-toolkit2-2.5.0  rknn-toolkit2-2.5.0.tar.gz 


参考文档:

doc/CN/02_RKNN2_SDK_开发指南_V2.5.0.pdf


安装conda环境

由于主机的python版本是3.14,rknn最高支持的版本是3.12,所以使用conda创建一个隔离的3.12 python环境。


$ wget -c https://github.com/condaforge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh

$ bash Miniforge3-Linux-aarch64.sh

注意安装的时候,不要选择初始化shell环境,否则进入shell的时候,会默认切到conda。

比如的安装路径是:~/rknn/miniforge3


创建一个环境

~/rknn $ ./miniforge3/condabin/conda create -n rknn python=3.12


激活环境

yuanjp@vm:~/rknn$ . miniforge3/bin/activate rknn

(rknn) yuanjp@vm:~/rknn$


直接使用 activate命令会报错

$ ./miniforge3/condabin/conda activate rknn

CondaError: Run 'conda init' before 'conda activate'


安装rknn-toolkit2

进到解压的目录,下面的rknn-toolkit2目录。


在conda环境,先安装依赖:

(rknn) yuanjp@vm:~/rknn/rknn-toolkit2-2.5.0/rknn-toolkit2$ 

pip install -r packages/x86_64/requirements_cp312.txt


在安装

pip install packages/x86_64/rknn_toolkit2-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl


确认,安装成功

$ python3

Python 3.12.15 (main, Oct 13 2026, 16:52:04) [GCC 15.3.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> from rknn.api import RKNN

>>>



转换模型

#!/usr/bin/env python

from rknn.api import RKNN

platform = "rk3588"
model_path = "onnx/siglip_image_embed.onnx"
output_path = "rknn/siglip_image_embed.rknn"
width = 500
height = 500
do_quant = False

rknn = RKNN(verbose=False)

rknn.config(target_platform=platform,
	mean_values=[[0.48145466*255, 0.4578275*255, 0.40821073*255]],
	std_values=[[0.26862954*255, 0.26130258*255, 0.27577711*255]])

ret = rknn.load_onnx(model=model_path)
if ret != 0:
	print('Load model failed!')
	exit(ret)

ret = rknn.build(do_quantization=do_quant)
if ret != 0:
	print('Build model failed!')
	exit(ret)

ret = rknn.export_rknn(output_path)
if ret != 0:
	print('Export rknn model failed!')
	exit(ret)

# Release
rknn.release()



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.