Qwen3-ASR-1.7B-RKLLM / convert /audio_encoder /export_audio_encoder_rknn.py
happyme531's picture
更新转换脚本和文档(claude写的,感觉也不是特别好)
b70ae8e verified
Raw
History Blame Contribute Delete
1.7 kB
import argparse
from pathlib import Path
import numpy as np
from rknn.api import RKNN
def parse_args():
parser = argparse.ArgumentParser(description="Convert Qwen3-ASR audio encoder ONNX to RKNN.")
parser.add_argument(
"--onnx-path",
type=str,
default="rknn_deploy/audio_encoder/onnx/qwen3_asr_audio_chunk100.onnx",
help="Path to exported ONNX model.",
)
parser.add_argument("--target-platform", type=str, default="rk3588", help="RK target platform.")
parser.add_argument("--chunk-frames", type=int, default=100, help="Fixed mel chunk length.")
parser.add_argument(
"--savepath",
type=str,
default="rknn_deploy/audio_encoder/rknn/qwen3_asr_audio_chunk100_rk3588.rknn",
help="Output RKNN path.",
)
return parser.parse_args()
def main():
args = parse_args()
savepath = Path(args.savepath)
savepath.parent.mkdir(parents=True, exist_ok=True)
rknn = RKNN(verbose=False)
rknn.config(target_platform=args.target_platform)
ret = rknn.load_onnx(
model=args.onnx_path,
inputs=["input_features", "feature_len"],
input_size_list=[[1, 128, args.chunk_frames], [1]],
input_initial_val=[None, np.asarray([args.chunk_frames], dtype=np.int32)],
)
if ret != 0:
raise SystemExit(f"rknn.load_onnx failed: {ret}")
ret = rknn.build(do_quantization=False, dataset=None)
if ret != 0:
raise SystemExit(f"rknn.build failed: {ret}")
ret = rknn.export_rknn(savepath.as_posix())
if ret != 0:
raise SystemExit(f"rknn.export_rknn failed: {ret}")
print(f"saved: {savepath}")
if __name__ == "__main__":
main()