登录注册
论坛
一粒金砂(高级)
67
0
由于量化rknn模型需要相应图片集,因此我们先要获取相应的数据集进入mnist数据目录下,解压t10k-images-idx3-ubyte.gz,然后运行get_image.py,将原先压缩的数据转为图片,得到量化需要的dataset.txt文件。
import struct import numpy as np #import matplotlib.pyplot as plt import PIL.Image from PIL import Image import os os.system("mkdir ../MNIST_data/mnist_test") filename='../MNIST_data/t10k-images.idx3-ubyte' dataset = './dataset.txt' binfile=open(filename,'rb') buf=binfile.read() index=0 data_list = [] magic,numImages,numRows,numColumns=struct.unpack_from('>IIII',buf,index) index+=struct.calcsize('>IIII') for image in range(0,numImages): im=struct.unpack_from('>784B',buf,index) index+=struct.calcsize('>784B') im=np.array(im,dtype='uint8') im=im.reshape(28,28) im=Image.fromarray(im) im.save('../MNIST_data/mnist_test/test_%s.jpg'%image,'jpeg') data_list.append('../MNIST_data/mnist_test/test_%s.jpg\n'%image) with open(dataset,'w+') as ff: ff.writelines(data_list)
由于最先训练和onnx文件转换都是在windows平台进行的,后面转化rknn格式时遇到各种奇怪的问题。后来重新在Ubuntu平台从新训练并生成onnx文件,再进行rknn的转换就没遇到什么问题。
image.png (117.87 KB, 下载次数: 0)
下载附件 保存到相册
2024-5-30 17:33 上传
image.png (23.68 KB, 下载次数: 0)
2024-5-30 17:46 上传
转换脚本如下,基于官方脚本进行修改的。
import sys from rknn.api import RKNN DATASET_PATH = 'dataset.txt' DEFAULT_RKNN_PATH = 'mnist.rknn' DEFAULT_QUANT = False def parse_arg(): if len(sys.argv) < 3: print("Usage: python3 {} onnx_model_path [platform] [dtype(optional)] [output_rknn_path(optional)]".format(sys.argv[0])) print(" platform choose from [rk3562,rk3566,rk3568,rk3588,rk1808,rv1109,rv1126]") print(" dtype choose from [i8, fp] for [rk3562,rk3566,rk3568,rk3588]") print(" dtype choose from [u8, fp] for [rk1808,rv1109,rv1126]") exit(1) model_path = sys.argv[1] platform = sys.argv[2] do_quant = DEFAULT_QUANT if len(sys.argv) > 3: model_type = sys.argv[3] if model_type not in ['i8', 'u8', 'fp']: print("ERROR: Invalid model type: {}".format(model_type)) exit(1) elif model_type in ['i8', 'u8']: do_quant = True else: do_quant = False if len(sys.argv) > 4: output_path = sys.argv[4] else: output_path = DEFAULT_RKNN_PATH return model_path, platform, do_quant, output_path if __name__ == '__main__': model_path, platform, do_quant, output_path = parse_arg() # Create RKNN object rknn = RKNN(verbose=False) # Pre-process config print('--> Config model') rknn.config(target_platform=platform, mean_values=[[128]], std_values=[[128]]) print('done') # Load model print('--> Loading model') ret = rknn.load_onnx(model=model_path) if ret != 0: print('Load model failed!') exit(ret) print('done') # Build model print('--> Building model') if do_quant == True: ret = rknn.build(do_quantization=do_quant, dataset=DATASET_PATH) if ret != 0: print('Build model failed!') exit(ret) print('done') else: ret = rknn.build(do_quantization=do_quant) print('skip do_quantization') # Export rknn model print('--> Export rknn model') ret = rknn.export_rknn(output_path) if ret != 0: print('Export rknn model failed!') exit(ret) print('done') # Release rknn.release()
转换命令
python convert.py mnist.onnx rv1106 i8 mnist_i8.rknn
参考链接
2rknn.zip
2024-5-30 17:45 上传
点击文件名下载附件
7.47 MB, 下载次数: 3
扫一扫,分享给好友
五彩晶圆(高级)
6947
先要获取相应的数据集进入mnist数据目录下,再解压,然后运行,将原先压缩的数据转为图片,得到量化需要文件。
好吧,记住了
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »