NuMarkdown-8B-Thinking-Rkllm / export_vision_rknn.py
Prince-1's picture
Upload folder using huggingface_hub
b7dca43 verified
from rknn.api import RKNN
import numpy as np
import os
import argparse
argparse = argparse.ArgumentParser()
argparse.add_argument('--path', type=str, default='./onnx/qwen2_5-vl-3b_vision.onnx', help='model path', required=False)
argparse.add_argument('--model_name', type=str, default='qwen2_5-vl-3b', help='model name', required=False)
argparse.add_argument('--target-platform', type=str, default='rk3588', help='target platform', required=False)
argparse.add_argument('--batch_size', type=int, default=1, help='batch size', required=False)
argparse.add_argument('--height', type=int, default=448, help='image height', required=False)
argparse.add_argument('--width', type=int, default=448, help='image width', required=False)
args = argparse.parse_args()
model_path = args.path
target_platform = args.target_platform
modelname = args.model_name
if 'qwen2' in model_path.lower():
mean_value = [[0.48145466 * 255, 0.4578275 * 255, 0.40821073 * 255]]
std_value = [[0.26862954 * 255, 0.26130258 * 255, 0.27577711 * 255]]
elif 'internvl3' in model_path.lower():
mean_value = [[0.485 * 255, 0.456 * 255, 0.406 * 255]]
std_value = [[0.229 * 255, 0.224 * 255, 0.225 * 255]]
else:
mean_value = [[0.5 * 255, 0.5 * 255, 0.5 * 255]]
std_value = [[0.5 * 255, 0.5 * 255, 0.5 * 255]]
if modelname == 'qwen2_5-vl-3b':
inputs = ['pixel', 'grid_thw']
input_size_list = [[args.batch_size, 3, args.height, args.width], [1,3]]
grid_t = args.batch_size//2 if args.batch_size % 2 == 0 else (args.batch_size + 1)//2
input_initial_val = [None, np.array([[grid_t, args.height//14, args.width//14]], dtype=np.int64)]
op_target = {"/vpm/patch_embed/proj/Conv_output_0_conv_tp_sw": 'cpu'}
elif modelname == 'qwen3-vl':
inputs = ['pixel', 'grid_thw']
input_size_list = [[args.batch_size, 3, args.height, args.width], [1,3]]
grid_t = args.batch_size//2 if args.batch_size % 2 == 0 else (args.batch_size + 1)//2
input_initial_val = [None, np.array([[grid_t, args.height//16, args.width//16]], dtype=np.int64)]
op_target = None
else:
inputs = ['pixel']
input_size_list = [[args.batch_size, 3, args.height, args.width]]
input_initial_val = None
op_target = None
if modelname == 'deepseekocr':
disable_rules=['convert_rs_add_rs_to_rs_gather_elements']
else:
disable_rules=[]
rknn = RKNN(verbose=False)
rknn.config(disable_rules=disable_rules, target_platform=target_platform, mean_values=mean_value, std_values=std_value, op_target=op_target)
rknn.load_onnx(model_path, inputs=inputs, input_size_list=input_size_list, input_initial_val=input_initial_val)
rknn.build(do_quantization=False, dataset=None)
os.makedirs("rknn", exist_ok=True)
rknn.export_rknn("./rknn/" + os.path.splitext(os.path.basename(model_path))[0] + "_{}.rknn".format(target_platform))