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