rknn3399pro 2小时入门指南(六)rknn模型测试和性能评估

目录

  • 1.往期回顾
  • 2.简述
  • 3.代码

1.往期回顾

rknn3399pro 2小时入门指南(一)基础概念和基本开发流程
rknn3399pro 2小时入门指南(二)RKNN刷机攻略详解
rknn3399pro 2小时入门指南(三)在PC上搭建RKNN模拟环境、 模型转换代码、RK3399 pro使用
rknn3399pro 2小时入门指南(四)h5模型训练、tflite模型生成
rknn3399pro 2小时入门指南(五)tflite转化成rknn

2.简述

在生成相关rknn模型后,可以在PC进行初步预测,但是运行速度较慢,而且模型性能预测也不一定准确。所以建议在rk3399pro板子上进行。

3.代码

from rknn.api import RKNN
import os
import numpy as np
import cv2

def show_outputs(outputs):
    output = outputs[0].reshape(-1)
    output_sorted = sorted(output, reverse=True)
    top3_str = 'mobilenet_v1\n-----TOP 5-----\n'
    for i in range(5):
        value = output_sorted[i]
        index = np.where(output == value)
        for j in range(len(index)):
            if (i + j) >= 5:
                break
            if value > 0:
                topi = '{}: {}\n'.format(index[j], value)
            else:
                topi = '-1: 0.0\n'
            top5_str += topi
    print(top5_str)

def search_max(result):
    # return max_num_index, score
    arr = result[0].reshape(-1)
    list = arr.tolist()
    index = list.index(max(list))

    return index, float(list[index])


def load_model(model_name):
    # 创建RKNN对象
    rknn = RKNN()
    # 载入RKNN模型
    print('-->loading model')
    rknn.load_rknn(model_name)
    print('loading model done')
    # 初始化RKNN运行环境
    print('--> Init runtime environment')
    ret = rknn.init_runtime()
    if ret != 0:
        print('Init runtime environment failed')
        exit(ret)
    print('done')
    return rknn


def model_predict(rknn, pic, size):
    # 图片处理
    img = cv2.imread(pic)
    img = cv2.resize(img, (size,size))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

    # 模型推理
    print('--> Running model')
    outputs = rknn.inference(inputs=[img])
    show_outputs(outputs)
    print(outputs)
    
    # 选择score最大的作为预测结果
#    index, score = search_max(outputs)
#    print("index:%d, score:%f"%(index, score))
#    return index, score

    # 模型性能评估
#    print('--> Begin evaluate model performance')
#    perf_results = rknn.eval_perf(inputs=[img])
#    print('done')

    return outputs


if __name__ == '__main__':
	# 载入训练好的模型,进行图片预测
    model_name = "./model/Classifier_without_q.rknn"
    pic = "./bg.jpg"

    rknn = load_model(model_name)
    res = model_predict(rknn, pic, size=224)

    rknn.release()

模型评估,直接去掉相关注释即可以。即

	print('--> Begin evaluate model performance')
    perf_results = rknn.eval_perf(inputs=[img])
    print('done')

最终结果会显示,每个layer所花费的时间,以及FPS
rknn3399pro 2小时入门指南(六)rknn模型测试和性能评估_第1张图片

你可能感兴趣的:(AI嵌入式设备)