rv1126 rknn模型转换及部署有关内容

rv1126 rknn模型转换及部署有关内容 2024-01-05 16:16:02 536

1概要内容

1.1版本说明

rknn_toolkit的详细说明文档在拉取的包里面有,git连接如下:

https://github.com/rockchip-linux/rknn-toolkit

到目前为止,最新的版本是1.7.5了,说明文档里面的东西很多,有很多不是讲模型转换和部署的,所以下面的内容将文档中说明模型转换和部署的地方整理了一下,并加入了一些自己的理解,并且我是以1.7.0版本的文档为基础的,因为1.7.0版本还可以在pc搭建模拟环境进行测试,而该版本之后就不能在pc搭建的模拟环境中测试了,必须有实际硬件的参与,至于新旧版本的差异,可以对比查看文档开头的修改记录。

1.2自定义算子

如果模型含有 RKNN-Toolkit 不支持的算子(operator),那么在模型转换阶段就会失败。这时候可以通过自定义算子功能来添加不支持的算子,从而模型能正常转换和运行。当前自定义算子功能还属于实验阶段,后续接口可能还会进行调整,目前只能在 Linux x64 平台上使用,并且只支持 TensorFlow 模型。 如果要使用自定义的算子的话,那对这个算子要进行充分全面的测试,所以如果有能替代的支持的算子,最好是先换成别的算子,然后给原厂反馈,等他们复现之后在后续版本上更新上经过测试的算子之后,再考虑使用。

1.3模型转换

支持 Caffe、TensorFlow、TensorFlow Lite、ONNX、Darknet、PyTorch、MXNet 和 Keras 模型转为 RKNN 模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用。从 1.2.0 版本开始支持多输入模型。从 1.3.0 版本开始支持 PyTorch 和 MXNet。从 1.6.0 版本开始支持 Keras 框架模型,并支持 TensorFlow 2.0 导出的 H5 模型。

1.4量化功能

支持将浮点模型量化为定点模型,目前支持的量化方法为非对称量化 ( asymmetric_quantized-u8 ), 动 态 定点 量 化 ( dynamic_fixed_point-8 和 dynamic_fixed_point-16)。从 1.0.0 版本开始,RKNN-Toolkit 开始支持混合量化功能。从 1.6.1 版本开始,RKNN Toolkit 提供量化参数优化算法 MMSE。从 1.7.0 版本开始,支持加载已量化的 ONNX 模型。

1.5性能评估

能够在 PC 上模拟 Rockchip NPU 运行 RKNN 模型,并评估模型性能(包括总耗时和每一层的耗时);或将RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能。

1.6内存评估

评估模型运行时内存的占用情况。使用该功能时,必须将 RKNN 模型分发到 NPU 设备中运行,并调用相关接口获取内存使用信息。从 0.9.9 版本开始支持该功能。

1.7模型预编译

通过预编译技术生成的 RKNN 模型可以减少 NPU 加载模型的时间。通过预编译技术生成的 RKNN 模型只能在NPU 硬件上运行,不能在模拟器中运行。当前只有x86_64 Ubuntu 平台支持直接从原始模型生成预编译 RKNN 模型。RKNN Toolkit 从 0.9.5 版本开始支持模型预编译功能,并在 1.0.0 版本中对预编译方法进行了升级,升级后的预编译模型无法与旧驱动兼容。从 1.4.0 版本开始,支持通过 NPU 设备将普通 RKNN 模型转为预编译 RKNN 模型,详情请参考接口 export_rknn_precompile_model 的使用说明。

1.8模型分段

该功能用于多模型同时运行的场景。将单个模型分成多段在 NPU 上执行,借此来调节多个模型占用 NPU 的时间,避免因为一个模型占用太多 NPU 时间,而使其他模 型 无 法 及 时 执 行 。 RKNN Toolkit 从 1.2.0 版 本 开 始 支 持 该 功 能 。 目 前 , 只 有 RK1806/RK1808/RV1109/RV1126 芯片支持该功能,且 NPU 驱动版本要大于0.9.8。

1.9量化精度分析功能

该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的欧氏距离和余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路。 该功能从 1.3.0 版本开始支持。1.4.0 版本增加逐层量化精度分析子功能,将每一层运行时 的输入指定为正确的浮点值,以排除逐层误差积累,能够更准确的反映每一层自身受量化 的影响。

1.10可视化功能

该功能以图形界面的形式呈现 RKNN-Toolkit 的各项功能,简化用户操作步骤。用户可以通过填写表单、点击功能按钮的形式完成模型的转换和推理等功能,而不需要再去手动编写脚本。有关可视化功能的具体使用方法请参考《Rockchip_User_Guide_RKNN_Toolkit_Visualization_CN》文档。1.3.0 版本开始支持该功能。1.4.0 版本完善了对多输入模型的支持,并且支持 RK1806, RV1109, RV1126 等新的 RK NPU 设备。1.6.0 版本增加对 Keras 框架的支持。

Ubuntu PC上打开可视化界面的命令:

python3 -m rknn.bin.visualization

1.11模型优化等级功能

RKNN-Toolkit 在模型转换过程中会对模型进行优化,默认的优化选项可能会对模型精度产生一些影响。通过设置优化等级,可以关闭部分或全部优化选项。有关优化等级的具体使用方法请参考 config 接口中 optimization_level 参数的说明。该功能从 1.3.0 版本开始支持。

1.12模型加密功能

使用指定的加密方法将 RKNN 模型整体加密。RKNN Toolkit 从 1.6.0 版本开始支持模型加密功能。

2官方文档指南

2.1自定义算子

《Rockchip_Developer_Guide_RKNN_Toolkit_Custom_OP_V1.7.0_CN.pdf》

2.2快速入门

《Rockchip_Quick_Start_RKNN_Toolkit_V1.7.0_CN.pdf》

2.3问题排查手册

《Rockchip_Trouble_Shooting_RKNN_Toolkit_V1.7.0_CN.pdf》

2.4 RKNN Toolkit Lite 用户使用指南

《Rockchip_User_Guide_RKNN_Toolkit_Lite_V1.7.0_CN.pdf》

2.5 RKNN-Toolkit 用户使用指南

《Rockchip_User_Guide_RKNN_Toolkit_V1.7.0_CN.pdf》

2.6可视化使用指南

《Rockchip_User_Guide_RKNN_Toolkit_Visualization_V1.7.0_CN.pdf》

3实例分析

下面结合yolov5s模型的转换和部署,来分析一下,具体过程中涉及到的内容。

3.1 yolov5s rknn模型获取

这一步由算法工程师来完成,大概的过程涉及pytorch模型转onnx模型,然后onnx模型转rknn模型,前面版本说明中提到过,如果要在模拟环境中测试转换的rknn,那rknn toolkit的版本不能高于1.7.0。这样算法工程师转换出rknn模型之后,可以在pc模拟环境中测试。但是这里面要注意两点:量化和预编译,量化提高了推理的速度,降低了精度,需要不断的优化,将精度损失降到最低;而预编译,需要npu硬件的介入,依托于npu硬件,并且预编译之后的rknn模型,就不能在PC模拟环境中运行了。

3.2 模型部署

这一步由部署工程师或者嵌入式工程师来完成,可以参考下面的开源项目,来实现基于C++的测试demo。

官方开源项目地址:

https://github.com/airockchip/rknn_model_zoo

这个开源工程中有相应的模型和测试demo,为了部署算法工程师提供的模型,我们可以参考其中基于C++的测试demo,但是这里一定要注意,哪怕都是yolov5s模型,但是模型的输出格式等不一样,测试demo的后处理也要对应进行修改,我这边实际测试部署的时候就出现了因为后处理跟模型没有匹配好,导致置信度偏低的问题。对于部署过程来说,这个后处理算是最麻烦的,有的算法工程师会给提供一个基于python的测试demo,然后部署时参考python去用C++实现后处理,但是如果涉及的计算有些多的话,这部分调试会耗费不少时间。

3.3模型测试

模型部署到npu设备上之后,需要对部署的模型进行测试,根据测试的数据和需求值比对,如果出入很大,就需要对模型进一步的优化。测试的过程中主要关注两个参数:耗时和置信度。

3.3.1耗时

耗时分为模型加载过程的耗时和推理过程的耗时。前者可以通过预编译技术进行优化缩减,预编译之后的模型加载耗时将降低很多。后者主要通过量化来进行优化缩减,如果耗时仍然过大,可能就需要逐个分析算子,替换算子进行对比优化了。

3.3.2置信度

为了推理的速度,模型转换过程基本上都需要量化处理,而量化处理对置信度是有影响的,如果影响过大,就需要优化这个过程。另外模型转换为rknn的过程,也会因为算子支持的不理想等原因,造成置信度降低,这就需要对比测试确定降低多少,如果降低太多,就需要逐个分析,通过替换算子或者联系原厂兼容来处理。关于置信度的测试,我们可以找一定数量的测试图片,然后用各个阶段的模型进行推理,最后将这些推理结果进行对比,看看各个阶段的置信度损耗。比如yolov5s,一般由pytorch模型转onnx模型,onnx模型再转rknn模型,我们就可以找一些图片,先用pytorch模型推理画框,然后onnx模型推理画框,接着pc模拟环境rknn模型推理画框,最后在npu硬件上rknn模型推理画框,这四个阶段推理画框的图片对比分析,查看哪个阶段置信度损失严重,重点优化该阶段即可。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区