rk3588多模型检测部署quickrun

quickrun 是一款rk3588 rknn多模型高效高并发部署软件

软件框架

采用session思想,可以定义多个session满足不同模型的义务需求。比如充电桩检测,垃圾分类,悬崖检测,模型共用一个摄像头,采用yolov5的模型。
多线程模型推理部署rknn

  1. 采用消息队列存放照片数据是为了防止丢帧以及高效并发,一般情况下,采集照片数据25fps,前后处理+推理时间=40ms,25fps,所以基本取消息和存消息时间相等。
  2. 由于是模型是640*640 输入,摄像头是640 * 480输入,解码用cv::imdecode, rgb 格式输入模型,使用rga加速等比例缩放。
  3. 由于三个模型设置三个session的独立线程,之间相互独立,互不干扰。

模型输出

rk3588 yolov5模型输出注意转换为onnx的时候在forward 层去掉cat的操作,直接输出2020,4040,80*80三个特征图。yolo.py修改模型输出:

index fa05fcf..cfd4883 100644
@@ -53,28 +53,10 @@ class Detect(nn.Module):
         self.inplace = inplace  # use inplace ops (e.g. slice assignment)
 
     def forward(self, x):
-        z = []  # inference output
+        z = []
         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)
-
-                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))
-
-        return x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x)
+            x[i] = self.m[i](x[i])
+        return x
 
     def _make_grid(self, nx=20, ny=20, i=0, torch_1_10=check_version(torch.__version__, '1.10.0')):
         d = self.anchors[i].device

在export.py 修改

index 4d0144a..f9310e6 100644
@@ -56,7 +56,7 @@ import pandas as pd
 import torch
 import yaml
 from torch.utils.mobile_optimizer import optimize_for_mobile
-
+import numpy as np
 FILE = Path(__file__).resolve()
 ROOT = FILE.parents[0]  # YOLOv5 root directory
 if str(ROOT) not in sys.path:
@@ -496,7 +496,7 @@ def run(
         y = model(im)  # dry runs
     if half and not coreml:
         im, model = im.half(), model.half()  # to FP16
-    shape = tuple((y[0] if isinstance(y, tuple) else y).shape)  # model output shape
+    shape = tuple(np.array((y[0] if isinstance(y, tuple) else y)).shape)  # model output shape
     LOGGER.info(f"\n{colorstr('PyTorch:')} starting from {file} with output shape {shape} ({file_size(file):.1f} MB)")

性能

一个模型占用npu:1.2T,cpu:40%(前处理,推理,后处理画框), 推理时间20ms。使用perf top -p 查看cpu使用率,并且可以精确到具体某一个函数的cpu使用率

AI视觉开发板 openamv(Almachinevision)是一款基于瑞芯微RV1103芯片具有高性价比的微型Linux开发板, 旨在为开发者提供一个简单且高效的开发平台;支持多种接口,包括MIPICSI、GPIO、 UART、SPI、I2C、USB等,便于快速开发和调试。特别是针对AI视觉,可以低成本部署神经网络,做到高性价比的视觉监控功能。
自主研发摄像头支持夜视可选广角mipi接口 :支持300万像素;具备高灵敏度,高信噪比 低照度的性能,能够呈现更加细腻、色彩更 加逼真的夜视成像效果,更好地适应环境光线变化, 批量价格便宜。

rk3588evb是一款基于Rockchip RK3588芯片的开发板,用于人工智能应用领域。模型部署是指将训练好的模型应用到实际场景中,以实现特定的任务。而视频检测则是指通过对视频中的内容进行分析和识别,从而实现人、物体、动作等的检测和识别功能。 将模型部署rk3588evb上进行视频检测,首先需要将训练好的模型导入到rk3588evb的开发环境中。开发环境可以是使用开发板的SDK或者工具包。通过将模型与开发环境进行适配,可以确保模型可以在rk3588evb上正常运行。 接下来,在rk3588evb上编写运行代码,使用模型对视频进行检测。视频检测涉及到识别和追踪视频中的人和物体。可以通过处理视频的每一帧图像,并将其输入到模型中进行预测和判别。模型会根据训练时的分类标准,识别出视频中的不同物体和动作。 为了提高视频检测的效果,可以采用一些优化方法和技术。例如,可以使用图像处理算法对视频图像进行预处理,以提高模型的输入质量。同时,可以将模型与物体跟踪算法相结合,以实现对运动物体的跟踪和检测。 最后,将视频检测的结果进行输出和展示。可以将检测到的物体和动作标注在视频中,或者生成报告和统计数据。这样可以方便用户对视频内容进行分析和理解。 通过在rk3588evb上进行模型部署,可以实现视频检测的任务,为用户提供智能化的视频分析。同时,rk3588evb作为高性能的开发板,能够提供足够的计算能力,以满足视频检测的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值