采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

这篇具有很好参考价值的文章主要介绍了采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因工作需要,需要将目标检测模型 部署在开发板上。在走了很多弯路后 找到一个成功的案例并记载下来

这里说一下我现有的硬件设备 。

我是购买的RADXA的rock3a开发板 搭载的soc是rk3568

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

这是开发板的正面图,因为瑞芯微针对计算机视觉中的目标检测模型有一套自己的前向推理框架,所以我就着眼于搭载rockchip的开发板rock3a

目标检测模型 这里采用的是yolo模型  由于原生yolov5模型里面有一些 算子 可能在模型转换时不支持,这里采用瑞芯微官方推荐的yolov5,链接在下面:

GitHub - airockchip/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLite

下载好源代码后,需要修改一个地方:

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

修改的代码我这里贴出来

def forward(self, x):
        z = []  # inference output
        for i in range(self.nl):
            if os.getenv('RKNN_model_hack', '0') != '0':
                z.append(torch.sigmoid(self.m[i](x[i])))
                continue

            x[i] = self.m[i](x[i])  # conv
            '''
            bs, _, ny, nx = x[i].shape  # x(bs,255,20,20) to x(bs,3,20,20,85)
            x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()

            if not self.training:  # inference
                if self.onnx_dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:
                    self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)

                y = x[i].sigmoid()
                if self.inplace:
                    y[..., 0:2] = (y[..., 0:2] * 2 + self.grid[i]) * self.stride[i]  # xy
                    y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
                else:  # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953
                    xy, wh, conf = y.split((2, 2, self.nc + 1), 4)  # y.tensor_split((2, 4, 5), 4)  # torch 1.8.0
                    xy = (xy * 2 + self.grid[i]) * self.stride[i]  # xy
                    wh = (wh * 2) ** 2 * self.anchor_grid[i]  # wh
                    y = torch.cat((xy, wh, conf), 4)
                z.append(y.view(bs, -1, self.no))

        if os.getenv('RKNN_model_hack', '0') != '0':
            return z

        return x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x)
        '''
        return x[0],x[1],x[2]

 然后 根据自己的数据集 训练一版模型 ,训练过程这里不赘述。

这里将训练好的模型yolov5s.pt 转化为onnx模型

转化命令为 :

python3   export.py --weights yolov5s.pt --img 640 --batch 1 --opset 12 --include onnx

转化完后 需要用Netron软件打开模型的可视化界面

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

记下 图中 的三个框里面的节点名称,这三个节点是网络的输出节点

 新建一个 python文件 onnx2rknn.py  该文件是仿制test.py文件编写的

文件内容为

from rknn.api import RKNN

ONNX_MODEL = 'yolov5s.onnx'
platform = "rk3568"
RKNN_MODEL = 'yolov5s_{}_out_opt.rknn'.format(platform)

if __name__ == '__main__':

    add_perm = False # 如果设置成True,则将模型输入layout修改成NHWC
    # Create RKNN object
    rknn = RKNN(verbose=True)

    # pre-process config
    print('--> config model')
    rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]],  target_platform=platform,
                )
    print('done')

    # Load tensorflow model
    print('--> Loading model')
    ret = rknn.load_onnx(model=ONNX_MODEL,outputs=['output', '327', '328'])# 这里一定要根据onnx模型修改
    if ret != 0:
        print('Load onnx model failed!')
        exit(ret)
    print('done')

    # Build model
    print('--> Building model')
    ret = rknn.build(do_quantization=True, dataset='./dataset.txt')
    if ret != 0:
        print('Build rkmodel failed!')
        exit(ret)
    print('done')

    # rknn.export_rknn_precompile_model(RKNN_MODEL)
    rknn.export_rknn(RKNN_MODEL)

    rknn.release()

并将该文件放置于rknn-toolkit工作目录下

我的目录是/home/rock/workspace/rknn-toolkit2-1.4.0/examples/onnx/yolov5

也就是example目录下的onnx专栏的yolov5子目录 

 注意 需要在onnx2rknn.py文件中 注明 模型运行的目标平台 我的目标平台是rk3568 

另外需要将上一步 netron 查看的输出部分的三个节点 在onnx2rknn.py文件中注明

也就是如下截图所示

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

 python3 onnx2rknn.py 运行该文件后 生成的rknn模型 

将该模型 传输到开发板上

注意,这里有一个容易忽略的地方 我的rknn-toolkit的版本是1.4.0

如果我的开发板librknnrt.so 动态库的版本是1.3.0 就会报错 这里版本一定要对应上

在开发板上运行模型 进行单张图片的目标检测 ,运行结果如下图所示

采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程

 文章来源地址https://www.toymoban.com/news/detail-510624.html

到了这里,关于采用rknn-toolkit导出rknn模型并部署在rock3a-rk3568芯片 上全流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RKNN模型部署(3)—— 模型转换与测试

    初始化函数: 初始化RKNN对象时,可以设置verbose和verbose_file参数,以打印详细的日志信息。 参数 解析 verbose 指定是否要在屏幕上打印详细日志信息 verbose_file 如果verbose参数为True,日志信息将写到该参数指定的文件中,一般将verbose设置为True,verbose_file不设置,将日志显示到

    2023年04月22日
    浏览(35)
  • RKNN模型部署(1)—— 相关介绍

       Rockchip板载AI芯片,内置高能效NPU,拥有强劲算力,支持多种AI框架和AI应用开发SDK,易于开发,拥有面向AI应用的丰富接口,便于扩展,适用于语音唤醒、语音识别、人脸识别等功能应用场景。    RKNN 是 Rockchip npu 平台使用的模型类型,以.rknn后缀结尾的模型文件。Ro

    2024年02月09日
    浏览(40)
  • rv1109/1126 rknn 模型部署过程

    rv1109/1126是瑞芯微出的嵌入式AI芯片,带有npu, 可以用于嵌入式人工智能应用。算法工程师训练出的算法要部署到芯片上,需要经过模型转换和量化,下面记录一下整个过程。 模型量化需要安装rk的工具包: rockchip-linux/rknn-toolkit (github.com) 版本要根据开发板的固件支持程度来,

    2024年02月14日
    浏览(36)
  • rknn_toolkit以及rknpu环境搭建-rv1126

    rknn_toolkit安装------------------------------------------------------------------------------- 环境要求:ubutu18.04 建议使用docker镜像 安装docker 参考https://zhuanlan.zhihu.com/p/143156163 镜像地址 百度企业网盘-企业云盘-企业云存储解决方案-同步云盘 rknn_toolkit目录结构 docker load --input rknn-toolkit-1.7. 3 -d

    2024年02月10日
    浏览(41)
  • yolov8 瑞芯微 RKNN 的 C++部署,部署工程难度小、模型推理速度快

       之前写过两次yolov8目标检测部署,后续继续思考,针对部署还有优化空间,本示例的部署方式优化了部署难度,加快了模型推理速度(略微增加了后处理的时耗)。 特别说明:如有侵权告知删除,谢谢。 【完整代码】代码和模型    onnx转rknn模型这一步就不再赘述,请

    2024年01月23日
    浏览(39)
  • yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程

    目录 一、任务介绍 二、实验过程 2.1 使用正确版本的yolov5进行训练(平台:x86机器windows系统) 2.2 best.pt转换为best.onnx(平台:x86机器window系统) 2.3 best.onnx转换为best.rknn(平台:x86机器Linux系统) 2.3.1 环境准备和工具包安装 2.3.2 onnx转换为rknn 2.4 RK3588部署rknn实现NPU加速(平台:

    2024年02月03日
    浏览(45)
  • DAYU200鸿蒙开发板(RK3568)安装rknn_toolkit_lite2并运行demo

            手上只有一块DAYU200的鸿蒙开发板,想要运行一些简单的算法。  一、将DAYU200烧录Ubuntu操作系统         参考:[ROC-RK3568-PC] 手把手教你制作Ubuntu系统TF卡启动盘                    DAYU200妖怪烧录大法         为了尽量避免一些奇怪的错误,这里我采用

    2024年02月11日
    浏览(51)
  • yolov8n 瑞芯微RKNN、地平线Horizon芯片部署、TensorRT部署,部署工程难度小、模型推理速度快

      特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。   模型和完整仿真测试代码,放在github上参考链接 模型和代码。   因为之前写了几篇yolov8模型部署的博文,存在两个问题:部署难度大、模型推理速度慢。该篇解

    2024年01月16日
    浏览(62)
  • 香橙派5 RK3588 yolov5模型转换rknn及部署踩坑全记录 orangepi 5

    由于距离写这篇文章过去很久,有的部分,官方已更新,请多结合其他人的看,并多琢磨、讨论~ 另外打个小广告: 博客 https://blog.vrxiaojie.top/ 欢迎大家前来做客玩耍,提出问题~~ 以后的文章都会在博客发布了,CSDN这边可能这是最后一篇文章。 (1) 使用官方提供的Ubuntu镜像:

    2024年02月05日
    浏览(47)
  • yolov8n 瑞芯微RKNN和地平线Horizon芯片仿真测试部署,部署工程难度小、模型推理速度快

      特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。   模型和完整仿真测试代码,放在github上参考链接 模型和代码。   因为之前写了几篇yolov8模型部署的博文,存在两个问题:部署难度大、模型推理速度慢。该篇解

    2024年02月01日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包