RKNN模型评估-性能评估和内存评估

本文介绍了如何在Python中使用RKNN库对Yolov8n_relu模型进行性能评估,包括开启debug模式获取每层运行时间和内存评估。同时,也提到了在C++中通过rknn_init和rknn_query函数查询模型逐层运行时间的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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

### RKNN模型DDR性能评估 对于RKNN模型在DDR内存上的性能评估,可以利用特定工具方法来完成这一过程。通过`rknn.eval_memory`功能能够实现对模型占用内存情况的检测[^2]。此操作不仅限于了解模型本身的内存消耗,还可以深入探究数据传输效率以及不同阶段内存使用的变化。 当准备进行DDR性能评估时,确保已经指定了必要的参数,例如`model_framework`用于表明模型源框架(如onnx/pytorch),而`model_file_path`则指向具体的模型文件位置;另外还需确认`RK_device_platform`已设为对应的RKNN平台。这些准备工作有助于构建一个稳定可靠的测试环境。 考虑到硬件因素的影响,在执行DDR性能评估之前,应当先固定CPU、DDR及NPU的工作频率以减少变量干扰,从而获得更加精确稳定的测量结果。具体来说,可以通过命令行指令查看并调整当前系统的频率设置,比如查询CPU频率状态可使用如下命令: ```bash cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq ``` 同样地,针对DDR也有相应的定频措施[^3]。一旦完成了上述预处理工作,则可通过调用API接口来进行正式的DDR性能评测,并最终生成详细的分析报告供后续优化参考。 #### 示例代码片段展示如何启动DDR性能评估: ```python import rknn.api as rknn_toolkit def evaluate_ddr_performance(yml_config_path): # 初始化RKNN Toolkit实例 rknn = rknn_toolkit.RKNN() # 加载配置文件 ret = rknn.load_rknn(path=yml_config_path) if ret != 0: print('Load RKNN model failed.') exit(ret) # 开始DDR性能评估 perf_result = rknn.eval_memory() # 输出或保存DDR性能评估的结果 print(perf_result) return perf_result if __name__ == '__main__': yml_path = 'path_to_your_configuration.yml' evaluate_ddr_performance(yml_path) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值