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