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 np.save('./functions_model_pruning_0.npy', outputs[0]) 8*4882a593Smuzhiyun output = outputs[0].reshape(-1) 9*4882a593Smuzhiyun output_sorted = sorted(output, reverse=True) 10*4882a593Smuzhiyun top5_str = 'mobilenet\n-----TOP 5-----\n' 11*4882a593Smuzhiyun for i in range(5): 12*4882a593Smuzhiyun value = output_sorted[i] 13*4882a593Smuzhiyun index = np.where(output == value) 14*4882a593Smuzhiyun for j in range(len(index)): 15*4882a593Smuzhiyun if (i + j) >= 5: 16*4882a593Smuzhiyun break 17*4882a593Smuzhiyun if value > 0: 18*4882a593Smuzhiyun topi = '{}: {}\n'.format(index[j], value) 19*4882a593Smuzhiyun else: 20*4882a593Smuzhiyun topi = '-1: 0.0\n' 21*4882a593Smuzhiyun top5_str += topi 22*4882a593Smuzhiyun print(top5_str) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun 25*4882a593Smuzhiyunif __name__ == '__main__': 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun # Create RKNN object 28*4882a593Smuzhiyun rknn = RKNN(verbose=True) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun # Pre-process config 31*4882a593Smuzhiyun print('--> Config model') 32*4882a593Smuzhiyun rknn.config(mean_values=[103.94, 116.78, 123.68], std_values=[58.82, 58.82, 58.82], quant_img_RGB2BGR=True, model_pruning=True) 33*4882a593Smuzhiyun print('done') 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun # Load model 36*4882a593Smuzhiyun print('--> Loading model') 37*4882a593Smuzhiyun ret = rknn.load_caffe(model='./mobilenet_deploy.prototxt', 38*4882a593Smuzhiyun blobs='./mobilenet.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 # Tips 53*4882a593Smuzhiyun print('') 54*4882a593Smuzhiyun print('======================================== Tips ==========================================================') 55*4882a593Smuzhiyun print('When verbose is set to True, the following similar prompts will appear during the build process, ') 56*4882a593Smuzhiyun print('indicating that model pruning has been effective for this model. (This means that approximately 6.9% ') 57*4882a593Smuzhiyun print('of the weights have been removed, resulting in a saving of about 13.4% of the computational workload.)') 58*4882a593Smuzhiyun print('Please note that not all models can be pruned, only models with sparse weights are likely to benefit from pruning.') 59*4882a593Smuzhiyun print('') 60*4882a593Smuzhiyun print(' I model_pruning ...') 61*4882a593Smuzhiyun print(' I model_pruning results:') 62*4882a593Smuzhiyun print(' I -1.12144 MB (-6.9%)') 63*4882a593Smuzhiyun print(' I -0.00016 T (-13.4%)') 64*4882a593Smuzhiyun print(' I model_pruning done.') 65*4882a593Smuzhiyun print('') 66*4882a593Smuzhiyun print('=========================================+++++++========================================================') 67*4882a593Smuzhiyun print('') 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun # Export rknn model 70*4882a593Smuzhiyun print('--> Export rknn model') 71*4882a593Smuzhiyun ret = rknn.export_rknn('./mobilenet.rknn') 72*4882a593Smuzhiyun if ret != 0: 73*4882a593Smuzhiyun print('Export rknn model failed!') 74*4882a593Smuzhiyun exit(ret) 75*4882a593Smuzhiyun print('done') 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun # Set inputs 78*4882a593Smuzhiyun img = cv2.imread('./dog_224x224.jpg') 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun # Init runtime environment 81*4882a593Smuzhiyun print('--> Init runtime environment') 82*4882a593Smuzhiyun ret = rknn.init_runtime() 83*4882a593Smuzhiyun if ret != 0: 84*4882a593Smuzhiyun print('Init runtime environment failed!') 85*4882a593Smuzhiyun exit(ret) 86*4882a593Smuzhiyun print('done') 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun # Inference 89*4882a593Smuzhiyun print('--> Running model') 90*4882a593Smuzhiyun outputs = rknn.inference(inputs=[img]) 91*4882a593Smuzhiyun show_outputs(outputs) 92*4882a593Smuzhiyun print('done') 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun rknn.release() 95