1*4882a593Smuzhiyunimport numpy as np 2*4882a593Smuzhiyunimport cv2 3*4882a593Smuzhiyunfrom rknn.api import RKNN 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun 6*4882a593Smuzhiyundef show_outputs(outputs): 7*4882a593Smuzhiyun output = outputs[0].reshape(-1) 8*4882a593Smuzhiyun output_sorted = sorted(output, reverse=True) 9*4882a593Smuzhiyun top5_str = 'mobilenet_v2\n-----TOP 5-----\n' 10*4882a593Smuzhiyun for i in range(5): 11*4882a593Smuzhiyun value = output_sorted[i] 12*4882a593Smuzhiyun index = np.where(output == value) 13*4882a593Smuzhiyun for j in range(len(index)): 14*4882a593Smuzhiyun if (i + j) >= 5: 15*4882a593Smuzhiyun break 16*4882a593Smuzhiyun if value > 0: 17*4882a593Smuzhiyun topi = '{}: {}\n'.format(index[j], value) 18*4882a593Smuzhiyun else: 19*4882a593Smuzhiyun topi = '-1: 0.0\n' 20*4882a593Smuzhiyun top5_str += topi 21*4882a593Smuzhiyun print(top5_str) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun 24*4882a593Smuzhiyunif __name__ == '__main__': 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun # Create RKNN object 27*4882a593Smuzhiyun rknn = RKNN(verbose=True) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun # Pre-process config 30*4882a593Smuzhiyun print('--> Config model') 31*4882a593Smuzhiyun rknn.config(mean_values=[103.94, 116.78, 123.68], std_values=[58.82, 58.82, 58.82], 32*4882a593Smuzhiyun quant_img_RGB2BGR=True, target_platform='rk3588') 33*4882a593Smuzhiyun print('done') 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun # Load model 36*4882a593Smuzhiyun print('--> Loading model') 37*4882a593Smuzhiyun ret = rknn.load_caffe(model='./../../caffe/mobilenet_v2/mobilenet_v2.prototxt', 38*4882a593Smuzhiyun blobs='./../../caffe/mobilenet_v2/mobilenet_v2.caffemodel') 39*4882a593Smuzhiyun if ret != 0: 40*4882a593Smuzhiyun print('Load model failed!') 41*4882a593Smuzhiyun exit(ret) 42*4882a593Smuzhiyun print('done') 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun # Build model 45*4882a593Smuzhiyun print('--> Building model') 46*4882a593Smuzhiyun ret = rknn.build(do_quantization=True, dataset='./dataset.txt') 47*4882a593Smuzhiyun if ret != 0: 48*4882a593Smuzhiyun print('Build model failed!') 49*4882a593Smuzhiyun exit(ret) 50*4882a593Smuzhiyun print('done') 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun # Export rknn model 53*4882a593Smuzhiyun print('--> Export rknn model') 54*4882a593Smuzhiyun ret = rknn.export_rknn('./mobilenet_v2.rknn') 55*4882a593Smuzhiyun if ret != 0: 56*4882a593Smuzhiyun print('Export rknn model failed!') 57*4882a593Smuzhiyun exit(ret) 58*4882a593Smuzhiyun print('done') 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun # Export encrypted RKNN model 61*4882a593Smuzhiyun print('--> Export encrypted rknn model') 62*4882a593Smuzhiyun ret = rknn.export_encrypted_rknn_model('./mobilenet_v2.rknn', None, 3) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun # load rknn model 65*4882a593Smuzhiyun print('--> Load rknn model') 66*4882a593Smuzhiyun ret = rknn.load_rknn('./mobilenet_v2.rknn') 67*4882a593Smuzhiyun if ret != 0: 68*4882a593Smuzhiyun print('Load rknn model failed!') 69*4882a593Smuzhiyun exit(ret) 70*4882a593Smuzhiyun print('done') 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun # Set inputs 73*4882a593Smuzhiyun img = cv2.imread('./dog_224x224.jpg') 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun print('--> List devices') 76*4882a593Smuzhiyun rknn.list_devices() 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun # Init runtime environment 79*4882a593Smuzhiyun print('--> Init runtime environment') 80*4882a593Smuzhiyun ret = rknn.init_runtime(target='rk3588', perf_debug=True, eval_mem=True) 81*4882a593Smuzhiyun if ret != 0: 82*4882a593Smuzhiyun print('Init runtime environment failed!') 83*4882a593Smuzhiyun exit(ret) 84*4882a593Smuzhiyun print('done') 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun print('--> Get sdk version') 87*4882a593Smuzhiyun sdk_version = rknn.get_sdk_version() 88*4882a593Smuzhiyun print(sdk_version) 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun # eval perf 91*4882a593Smuzhiyun print('--> Eval perf') 92*4882a593Smuzhiyun rknn.eval_perf() 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun # eval perf 95*4882a593Smuzhiyun print('--> Eval memory') 96*4882a593Smuzhiyun rknn.eval_memory() 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun # Inference 99*4882a593Smuzhiyun print('--> Running model') 100*4882a593Smuzhiyun outputs = rknn.inference(inputs=[img]) 101*4882a593Smuzhiyun np.save('./functions_board_test_0.npy', outputs[0]) 102*4882a593Smuzhiyun show_outputs(outputs) 103*4882a593Smuzhiyun print('done') 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun # Accuracy analysis 106*4882a593Smuzhiyun print('--> Accuracy analysis') 107*4882a593Smuzhiyun ret = rknn.accuracy_analysis(inputs=['./dog_224x224.jpg'], output_dir='./snapshot', target='rk3588') 108*4882a593Smuzhiyun if ret != 0: 109*4882a593Smuzhiyun print('Accuracy analysis failed!') 110*4882a593Smuzhiyun exit(ret) 111*4882a593Smuzhiyun print('done') 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun rknn.release() 114