RV1126预编译模型:减少加载时间,提升推理速度的最佳实践

RV1126平台深度学习模型预编译教程

1 介绍

本文将以 MobileNetV2 模型为例,详细介绍如何在 RV1126 平台上完成预编译工作,帮助开发者高效地部署深度学习模型。通过这篇教程,您将了解如何在 RV1126 上进行环境配置、模型编译、以及如何将预编译后的模型进行推理操作。

2 RV1126预编译的技术优势

  • 减少加载时间:通过预编译,模型加载时间大幅缩短,提升应用响应速度。
  • 优化资源消耗:预编译后,模型更紧凑,占用内存更少,提升硬件利用率。
  • 提升推理效率:优化推理过程,减少推理延迟,提升整体性能。
  • 稳定性与可靠性:避免运行时编译带来的错误,保证系统的稳定性。

3 预编译步骤

3.1 环境准备

  • 物理机环境:Ubuntu 18.04 x86_64
  • RKNN版本
    • rknn-toolkit版本:1.7.5
    • rknpu驱动版本:1.7.3
  • 交叉编译环境:gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
    在这里插入图片描述

如果驱动版本不满足要求:则参考此篇文章【驱动版本升级】完成对开发板驱动版本的升级。

3.2 模型转换

1、切换到rv1126的环境:

conda activate rv1126

2、使用参考代码执行以下命令:

# python test.py [target] [device_id]
python test.py rv1126 905d17c82d2c9bd3

3、执行结束则终端成功打印:
在这里插入图片描述

3.3 模型预编译

1、执行预编译的python脚本:

python export_rknn_precompile_model.py /home/ros/Downloads/project/deployed/rk/rv1126/rknn-toolkit-1.7.5/examples/caffe/mobilenet_v2/mobilenet_v2.rknn /home/ros/Downloads/project/deployed/rk/rv1126/rknn-toolkit-1.7.5/examples/caffe/mobilenet_v2/mobilenet_v2.hw.rknn rv1126 905d17c82d2c9bd3

2、执行结束则终端成功打印:
在这里插入图片描述

3.4 预编译模型测试

1、使用rknn_model_zoo中的MobileNet代码,执行以下命令:

./build-linux.sh -t rv1126 -a armhf -d mobilenet

2、将编译生成的可执行文件推送至板端:

adb push install /userdata/rknn_model_zoo

3、执行推送的可执行文件:

export LD_LIBRARY_PATH=./lib
./rknn_mobilenet_demo ./model/mobilenet_v2.rknn model/bell.jpg

4、执行成功后,终端显示结果如下:

4 效率对比

4.1 测试方法

分别使用没有预编译的模型和使用预编译的模型测试10次,观察模型初始化的时间对比。

4.2 测试结果
在这里插入图片描述

5 报错集合

1、注意在模型预编译时,不能使用mini driver进行模型转换,否则会报错:MODEL INVALID!
在这里插入图片描述

2、在更新驱动后,如果使用没有预编译的模型,则会报错:
在这里插入图片描述

3、使用rknn-toolkit1.7.5模型预编译时,rknn.release报错:
源码:

def __del__(self):
    if self.rknn_log is not None and 'logging' in globals()['sys'].modules:
        print("self.rknn_log :{}".format(self.rknn_log))
        for log_handler in self.rknn_log.logger.handlers:
            if isinstance(log_handler, globals()['sys'].modules['logging'].FileHandler):
                log_handler.close()
                self.rknn_log.logger.removeHandler(log_handler)

更新后源码:

def __del__(self):
    if hasattr(self, 'rknn_log') and self.rknn_log is not None:
        logger = self.rknn_log.logger
        if logger is not None:
            print("Logger exists and has handlers")
            for log_handler in logger.handlers[:]:
                if isinstance(log_handler, logging.FileHandler):
                    try:
                        log_handler.close()
                        logger.removeHandler(log_handler)
                    except Exception as e:
                        print(f"Error while cleaning up log handler: {e}")
        else:
            print("Logger is None")

6 技术交流

6.1 QQ交流:

  • RKNN非官方交流:909472035
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yao.Li

爱的魔力,一被卡布奇诺~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值