基于Python的模型评估
perf_debug:进行性能评估时是否开启debug 模式。在 debug 模式下,可以获取到每一层的运行时间,否则只能获取模型运行的总时间。默认值为 False。
eval_mem: 是否进入内存评估模式。进入内存评估模式后,可以调用 eval_memory 接口获取模型运行时的内存使用情况。默认值为 False。
性能评估的例子
读取yolov8n_relu.rknn模型,并连RK3566开发板,进行性能评估
from rknn.api import RKNN
if __name__ == '__main__':
rknn = RKNN()
# 使用Load_rknn接口导入rknn模型
rknn.load_rknn(path= './yolov8n_relu.rknn')
# 使用init_runtime接口初始化运行时环境
rknn.init_runtime(
target = 'RK3566',
perf_debug = True, # perf_debug是否开启性能评估的debug模式
eval_mem = False, # eval_mem是否开启内存评估模式
)
# 使用eval_perf接口进行性能评估
rknn.eval_perf(
inputs = ["bus.jpg"], # inputs要测试的图片
data_format = None, # data_format要推理的数据模式,使用默认值
is_print = True, # is_print是否打印性能信息
)
rknn.release()
内存评估的例子
读取yolov8n_relu.rknn模型,并连RK3566开发板,进行内存评估
from rknn.api import RKNN
if __name__ == '__main__':
rknn = RKNN()
# 使用Load_rknn接口导入rknn模型
rknn.load_rknn(path= './yolov8n_relu.rknn')
# 使用init_runtime接口初始化运行时环境
rknn.init_runtime(
target = 'RK3566',
perf_debug = False, # perf_debug是否开启性能评估的debug模式
eval_mem = True, # eval_mem是否开启内存评估模式
)
# 使用eval_memory接口进行内存评估
rknn.eval_memory(
is_print = True, # is_print是否打印性能信息
)
rknn.release()
备注:
基于Python的性能评估和内存评估可以同时运行rknn.init_runtime中的perf_debug和eval_mem都设置为True,并调用 rknn.eval_perf函数和rknn.eval_memory函数
基于C++的模型评估
查询网络各层运行时间
如果在rknn_init函数调用时有设置RKNN_FLAG_COLLECT_PERF_MASK标志,那么 在执行rknn_run完成之后,可以传入RKNN_QUERY_PERF_DETAIL命令来查询网络每层 运行时间。其中需要先创建rknn_perf_detail结构体对象。
ret = rknn_init(&ctx, model_data, model_data_size, RKNN_FLAG_COLLECT_PERF_MASK, NULL);//如果想打印逐层耗时,将第四个参数设为:RKNN_FLAG_COLLECT_PERF_MASK
...
// 查询模型逐层耗时,单位是微妙
rknn_perf_detail perf_detail;
ret = rknn_query(ctx,RKNN_QUERY_PERF_DETAIL,&perf_detail,sizeof(perf_detail));
printf("-->模型逐层耗时:%s\n",perf_detail.perf_data);
参考链接:
https://www.bilibili.com/video/BV1Kj411D78q?p=8
https://www.easy-eai.com/document_details/3/183