当前位置:首页 » 《关注互联网》 » 正文

模型部署——使用rknn-toolkit将Pytorch模型转为RKNN模型(详细图文教程)

18 人参与  2024年04月20日 09:40  分类 : 《关注互联网》  评论

点击全文阅读


欢迎学习RKNN系列相关文章,从模型转换、精度分析,评估到部署,推荐好资源:
一、Ubuntu系统上安装rknn-toolkit
二、使用rknn-toolkit将Pytorch模型转为RKNN模型
三、RKNN模型的评估和推理测试
四、RKNN模型量化精度分析及混合量化提高精度
五、RKNN模型性能评估和内存评估
六、rknn-toolkit-lite2部署RKNN模型到开发板上(python版)
七、RKNN C API开发板上落地部署RKNN模型
八、RKNN零拷贝API开发板落地部署RKNN模型


在这里插入图片描述

目录

一、环境准备二、源码包获取三、RKNN模型转换3.1 模型转换的流程图3.2 参数修改3.3 代码3.4 运行结果3.5 转换得到的RKNN模型 四、总结

一、环境准备

在进行RKNN模型转换之前,需要安装rknn-toolkit工具,关于此工具的具体安装过程参考我另外一篇博文:安装rknn-toolkit工具

下面是我自己运行的环境,供参考:
在这里插入图片描述

二、源码包获取

我提供一个resnet18的模型和测试数据集,还有相关转换代码,都打包在源码包中,,获取方法为文章末扫码到公众号中回复关键字:模型部署转RKNN模型。获取下载链接。

下载解压后的样子如下:

在这里插入图片描述

三、RKNN模型转换

3.1 模型转换的流程图

在这里插入图片描述

3.2 参数修改

在这里插入图片描述

在我提供的源码包中,直接运行脚本export_rknn.py即可。

3.3 代码

转换代码为:

## 测试用来构建RKNN模型的APIfrom rknn.api import RKNNif __name__=="__main__":    rknn = RKNN(verbose=True,verbose_file="log.txt")   # verbose为True表示打印详细的日志,verbose_file表示将日志存放到指定的路径中    # 调用config接口配置要生成的RKNN模型    # 调用config接口设置模型的预处理、量化方法等参数    rknn.config(        mean_values = [[123.675,116.28,103.53]],        # mean_values表示预处理要减去的均值化参数        std_values = [[58.395,58.395,58.395]],          # std_values 表示预处理要除的标准化参数        quantized_dtype = "asymmetric_quantized-8",     # 表示默认为8位非对称量化。quantized_dtype表示量化类型   通用的模型权重和激活值都是float32类型的,会占据4个字节,而经过8位的非对称量化之后,权重和激活值量化为int8类型,只占1个字节        quantized_algorithm = "normal",                   # quantized_algorithm表示量化的算法,目前支持norm,mmse,kl        quantized_method = "channel",                   # quantized_method表示量化方式,总的有channel(通道级量化)和layer(层级量化)两种,channel的精度要要高一些,默认为channel        quant_img_RGB2BGR = False,                      # 表示在做量化时,是否做RGB2BGR的转换。此参数只会应用到量化阶段,并不会嵌入到RKNN模型中。        target_platform = "rk3588",                     # target_platform表示生成的RKNN模型要运行在哪个RKNPU平台上。通常有rk3588,rk3566,rv1126等        # target_platform="rv1126",        float_dtype = "float16",                        # 表示RKNN模型的浮点数的类型,目前只支持float16的格式。如果不进行量化操作,则会将原始的float32格式默认转为float16格式。        optimization_level = 3,                         # 表示优化等级,默认为3级,表示打开全部优化选项。如果设置为0则表示关闭所有优化选项。1,2代表中间值,表示打开部分优化选项。会对最后的精度值产生影响        custom_string = "this is my rknn model!",       # 表示向RKNN模型中添加的自定义字符串信息,可以在CAPI中通过查询接口,查询到添加的自定义字符串信息        remove_weight = False,                          # 表示生成一个去除权重的从模型,可以使用CAPI与另一个完整的模型共享权重,从而减小内存的消耗 一般用在rv109和rv106上        compress_weight = False,                        # 压缩权重,可以减少模型的体积        inputs_yuv_fmt = None,                          # 表示RKNN模型输入数据的yuv格式        single_core_mode = False,                       # 表示构建的RKNN模型运行在核心模式,只适用于RK3588    )    # 添加load_xxx接口,进行常用深度学习模型的导入           将深度学习模型导入    rknn.load_pytorch(        model = "resnet18.pt",            # model表示加载模型的地址        input_size_list = [[1,3,224,224]],                            # 表示模型输入节点对应图片的尺寸和通道数    )    # 使用build接口来构建RKNN模型    rknn.build(        do_quantization=True,                      # 表示是否对生成的rknn模型进行量化操作        dataset = "dataset.txt",                   # 此参数只有上面的do_quantization为True时才生效,表示RKNN模型量化时采用的量化校正数据集   dataset.txt中填写的就是要量化的图片(正常情况下有20-100张量化图片)        rknn_batch_size = -1,                      # 调整输入的batch数量,可以提高推理的效率    )    # 调用export_rknn接口导出RKNN模型    rknn.export_rknn(        export_path="resnet18.rknn"              # 表示导出的RKNN模型路径和名称    )    rknn.release()  # 释放

3.4 运行结果

运行脚步后的输出结果如下:
在这里插入图片描述

3.5 转换得到的RKNN模型

转换后得到的RKNN模型如下:

在这里插入图片描述

四、总结

以上就是使用rknn-toolkit将Pytorch模型转为RKNN模型的详细过程,希望能帮到你!

总结不易,多多支持,谢谢!


点击全文阅读


本文链接:http://zhangshiyu.com/post/97857.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1