rk3588部署深度学习模型

1.部署seg

笔者试过paddleseg和mmseg里的fastscnn,后者比前者更快,故部署时选用了该模型。
流程:
1.导出onnx
2.在x86的Ubuntu中安装好rknntoolkit后(注意这里的toolkit要和板子上推理的toolkitlite版本对齐),写转换脚本,流程为

rknn = RKNN(verbose=True) #创建RKNN执行对象
rknn.config(mean_values=[[123.675, 116.28, 103.53]], std_values=[[58.395, 57.12, 57.375]], target_platform='rk3588')
#这里的mean_vaulues和std_value要和原模型训练时严格对齐
ret = rknn.load_onnx(model='xxx.onnx',input_size_list=[[3, 357, 863]])#加载onnx模型/写出输入数据大小
rknn.build(do_quantization=False)#这里可以选择是否量化,是否预训练,若量化,则要给出量化数据集:rknn.build(do_quantization=False,dataset="",pre_compile=True)
ret = rknn.export_rknn('xxx.rknn')#导出rknn模型
rknn.release()#释放句柄

导出rknn模型后,要对其进行推理
流程为

rknn_lite = RKNNLite()#创建RKNNlite执行对象
ret = rknn_lite.load_rknn(rknn_model.rknn)#加载rknn模型
ret = rknn_lite.init_runtime(core_mask=RKNNLite.NPU_CORE_0)#初始化推理环境,开启双核可把参数设为NPU_CORE_0_1三核可设为NPU_CORE_0_1_2
outputs = rknn_lite.inference(inputs=[ori_img])#输入图片,开始推理,得到结果数组outputs
#...对结果进行后处理
#...对结果进行后处理
#...对结果进行后处理

2.部署OCR

笔者用过paddleOCR和pytorchOCR,这次部署可谓是大费周章,在用paddleOCR导出onnx遇到一个问题:
跟着飞浆的教程装了最新版的paddle2onnx(忘了是多少?可能是1.2.2),然后在导出onnx时将模型输入大小固定后,竟然不能推理了!由此导rknn时当然也是错误的。
后来请教了高人后,将paddle2onnx降版本降到0.9.8后,一切都顺利完成。
记录一下踩到的坑~后续再更新部署和推理代码,争取试试部署yolo。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源介绍】 基于RK3588上部署yolov5s模型源码(实时摄像头检测)+部署说明文档.zip 该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测) - 所需: - 安装了Ubuntu20系统的RK3588 - 安装了Ubuntu18的电脑或者虚拟机 <details> <summary>一、yolov5 PT模型获取</summary> [Anaconda教程](https://blog.csdn.net/qq_25033587/article/details/89377259)\ [YOLOv5教程](https://zhuanlan.zhihu.com/p/501798155)\ 经过上面两个教程之后,你应该获取了自己的`best.pt`文件 </details> <details> <summary>二、PT模型转onnx模型</summary> - 将`models/yolo.py`文件中的`class`类下的`forward`函数由: ```python def forward(self, x): z = [] # inference output for i in range(self.nl): 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.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) if isinstance(self, Segment): # (boxes + masks) xy, wh, conf, mask = x[i].split((2, 2, self.nc + 1, self.no - self.nc - 5), 4) xy = (xy.sigmoid() * 2 + self.grid[i]) * self.stride[i] # xy wh = (wh.sigmoid() * 2) ** 2 * self.anchor_grid[i] # wh y = torch.cat((xy, wh, conf.sigmoid(), mask), 4) else: # Detect (boxes only) xy, wh, conf = x[i].sigmoid().split((2, 2, self.nc + 1), 4) 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, self.na * nx * ny, self.no)) return x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x) ``` 改为: ```python def forward(self, x): z = [] # inference

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值