yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测)

这篇具有很好参考价值的文章主要介绍了yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

github仓库

  • 所需:
    • 安装了Ubuntu20系统的RK3588
    • 安装了Ubuntu18的电脑或者虚拟机
一、yolov5 PT模型获取

Anaconda教程
YOLOv5教程
经过上面两个教程之后,你应该获取了自己的best.pt文件

二、PT模型转onnx模型
  • models/yolo.py文件中的class类下的forward函数由:
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)

改为:

def forward(self, x):
    z = []  # inference output
    for i in range(self.nl):
        x[i] = self.m[i](x[i])  # conv
    return x
  • export.py文件中的run函数下的语句:
shape = tuple((y[0] if isinstance(y, tuple) else y).shape)  # model output shape

改为:

shape = tuple((y[0] if isinstance(y, tuple) else y))  # model output shape
  • 将你训练模型对应的run/train/目录下的exp/weighst/best.pt文件移动至与export.py同目录下
  • 保证工作目录位于yolov5主文件夹,在控制台执行语句:
cd yolov5 
python export.py --weights best.pt --img 640 --batch 1 --include onnx --opset 12
  • 然后在主文件夹下出现了一个best.onnx文件,在Netron中查看模型是否正确
  • 点击左上角菜单->Properties…
  • 查看右侧OUTPUTS是否出现三个输出节点,是则ONNX模型转换成功。
  • 如果转换好的best.onnx模型不是三个输出节点,则不用尝试下一步,会各种报错。
三、onnx模型转rknn模型
  • 我使用的是VMWare虚拟机安装的Ubuntu18.04系统,注意,不是在RK3588上,是在你的电脑或者虚拟机上操作这一步骤。

  • rknn-toolkit2-1.4.0所需python版本为3.6所以需要安装Miniconda来帮助管理。

  • 安装Miniconda for Linux

    • 进入到下载得到的Miniconda3-latest-Linux-x86_64.sh所在目录
      chmod +x Miniconda3-latest-Linux-x86_64.sh
      ./Miniconda3-latest-Linux-x86_64.sh
      
    • 提示什么都一直同意,直到安装完毕。
    • 安装成功后,重新打开终端。
    • 如果安装成功,终端最前面应该会有一个(base)
    • 安装失败的去参考别的Miniconda3安装教程。
    • 创建虚拟环境:
      conda create -n rknn3.6 python=3.6 
      
    • 激活虚拟环境:
      conda activate rknn3.6
      
    • 激活成功时,终端最前面应该会有一个(rknn3.6)
  • 下载rknn-toolkit2-1.4.0

    • 到Ubuntu,下载源代码下的RK356X/RK3588 RKNN SDK
    • 进入百度网盘:RKNN_SDK-> RK_NPU_SDK_1.4.0 下载 rknn-toolkit2-1.4.0
    • 下载到Ubuntu后,进入rknn-toolkit2-1.4.0目录
      pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl 
      
    • 等待安装完毕检查是否安装成功:
      python
      from rknn.api import RKNN
      
    • 如果没有报错则成功。
    • 如果报错:
      • 1.是否处于rknn3.6虚拟环境下;
      • 2.pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl是否报错;
      • 3.pip install报错的时候,提示缺什么就用pip install或者sudo apt-get install安装什么;
  • 上述所需都安装并且验证成功,则开始下一步。

  • best.onnx模型转换为best.rknn模型文章来源地址https://www.toymoban.com/news/detail-463236.html

    • 进入转换目录:
      cd examples/onnx/yolov5
      
    • 最好是复制一份test.py出来进行修改:
      cp test.py ./mytest.py
      
    • 将一开始定义的文件进行修改,这是我修改之后的:
      ONNX_MODEL = 'best.onnx'    #待转换的onnx模型
      RKNN_MODEL = 'best.rknn'    #转换后的rknn模型
      IMG_PATH = './1.jpg'        #用于测试图片
      DATASET = './dataset.txt'   #用于测试的数据集,内容为多个测试图片的名字
      QUANTIZE_ON = True          #不修改
      OBJ_THRESH = 0.25           #不修改
      NMS_THRESH = 0.45           #不修改
      IMG_SIZE = 640              #不修改
      CLASSES = ("person")        #修改为你所训练的模型所含的标签
      
    • if __name__ == '__main__':中的语句:
      rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]])
      
    • 修改为
      rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588')
      
    • 想要程序执行完,展示推理效果,将以下语句:
      # cv2.imshow("post process result", img_1)
      # cv2.waitKey(0)
      # cv2.destroyAllWindows()
      
    • 注释打开:
      cv2.imshow("post process result", img_1)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
      
    • 终端执行:
      python mytest.py
      
    • 运行完展示效果,以及文件夹中出现best.rknn则该步骤成功。
四、在RKNN3588上部署rknn模型并实时摄像头推理检测
  • RKNN3588Ubuntu20系统上安装Miniconda,需要注意的是,RKNN3588Ubuntu20系统为aarch架构因此下载的Miniconda版本和之前有所不同,需要选择对应的aarch版本。
  • aarchMiniconda下载
  • 安装不再赘述。
  • 创建虚拟环境,因为在RK3588上要用到rknn-toolkit-lite2所以需要安装python3.7:
    • conda create -n rknnlite3.7 python=3.7
    • conda activate rknnlite3.7
  • 下载rknn-toolkit-lite2RK3588,也就是下载rknn-toolkit2-1.4.0,不再赘述。
  • 安装rknn-toolkit-lite2
    • 进入rknn-toolkit2-1.4.0/rknn-toolkit-lite2目录
      pip install packages/rknn_toolkit_lite2-1.4.0-cp37-cp37m-linux_aarch64.whl
      
    • 等待安装完毕
    • 测试是否安装成功:
      python
      from rknnlite.api import RKNNLite
      
    • 不报错则成功
  • example文件夹下新建一个test文件夹
  • 在其中放入你转换成功的best.rknn模型以及文章开头github仓库下的detect.py文件
  • detect.py文件中需要修改的地方:
    • 定义
      RKNN_MODEL = 'best.rknn'      #你的模型名称
      IMG_PATH = './1.jpg'          #测试图片名
      CLASSES = ("cap")             #标签名
      
    • if __name__ == '__main__'::
      capture = cv2.VideoCapture(11)      #其中的数字为你Webcam的设备编号
      
      • 关于设备编号,在终端中运行:
        v4l2-ctl --list-devices     
        
      • 打印出的Cam之类的字眼对应的/dev/video11中的11就是你的设备编号。
  • 运行脚本:
    python detect.py
    
  • 部署完成。

到了这里,关于yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • yolov5-6.0项目部署+自用Pytorch模型转换rknn模型并在RK3568 linux(Debian)平台上使用qt部署使用NPU推理加速摄像头目标识别详细新手教程

    1 我们打开yolov的官网,Tags选择6.0版本 2. 下载该压缩包并解压到工程目录下 3. 我们这里使用pycharm,专门针对python的IDE,用起来非常方便,下载方式就是官网直接下载,用的是社区版 4. 我们需要安装环境,这里我推荐安装Anaconda在电脑上,这是一个非常方便的包管理工具,可

    2024年02月05日
    浏览(68)
  • RK3588平台开发系列讲解(项目篇)YOLOv5部署测试

    平台 内核版本 安卓版本 RK3588 Linux 5.10 Android 12 沉淀、分享、成长,让自己和他人都能有所收获!😄

    2024年02月06日
    浏览(57)
  • 轻量级实时跟踪算法NanoTrack在瑞芯微RK3588上的部署以及使用

    文章目录 前言 一、模型转换 1.环境配置 2.模型解构 二、rk3588平台使用 1.模型初始化 2.推理 github: https://github.com/Try2ChangeX/NanoTrack_RK3588_python: python版本基于rk3588的NanoTrack,每秒可达120FPS 主要参考: SiamTrackers/NanoTrack at master · HonglinChu/SiamTrackers · GitHub GitHub - rockchip-linux/rknn-tool

    2024年02月13日
    浏览(60)
  • YOLOV5(二):将pt转为onnx模型并用opencv部署

    yolov5s 6.0自带export.py程序可将.pt转为.onnx等,只需配置需要的环境即可。 1. 安装环境 报错:NVIDIA-tensorrt安装失败! 解决:从源码安装TensorRt: ①安装CUDNN和CudaToolKit等GPU配置 ②从官网下载需要的rt版本:https://developer.nvidia.com/nvidia-tensorrt-8x-download ③解压后,将lib文件夹添加到

    2024年02月10日
    浏览(43)
  • c++读取yolov5模型进行目标检测(读取摄像头实时监测)

    文章介绍 本文是篇基于yolov5模型的一个工程,主要是利用c++将yolov5模型进行调用并测试,从而实现目标检测任务 任务过程中主要重点有两个,第一 版本问题,第二配置问题 一,所需软件及版本       训练部分 pytorch==1.13.0  opencv==3.4.1   其他的直接pip即可       c++部署 

    2024年02月07日
    浏览(45)
  • 瑞芯微RK3588 C++部署Yolov8检测和分割模型

    最近这一个月在研究国产瑞芯微板子上部署yolov8的检测和分割模型,踩了很多坑,记录一下部署的过程和遇到的一些问题: 需要的环境和代码主要包括: (1)rknn-toolkit2-1.5.2:工具链,开发环境 (2)rockchip-yolov8:pt模型转onnx模型 (3)yolov8_onnx2rknn:在(2)的基础上转检测

    2024年04月09日
    浏览(58)
  • YOLOV5-LITE实时目标检测(onnxruntime部署+opencv获取摄像头+NCNN部署)python版本和C++版本

    使用yolov5-lite自带的export.py导出onnx格式,图像大小设置320,batch 1 之后可以使用 onnxsim对模型进一步简化 onnxsim参考链接:onnxsim-让导出的onnx模型更精简_alex1801的博客-CSDN博客 这个版本的推理FPS能有11+FPS 这两处换成自己的模型和训练的类别即可:     parser.add_argument(\\\'--modelpa

    2024年02月04日
    浏览(51)
  • rk3588下yolov5火焰识别图片输出log

    post process config: box_conf_threshold = 0.25, nms_threshold = 0.45 Loading mode… sdk version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22) driver version: 0.9.3 model input num: 1, output num: 3 index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp

    2024年03月13日
    浏览(53)
  • RK3588平台开发系列讲解(项目篇)基于yolov5的物体识别

    平台 内核版本 安卓版本 RK3588 Linux 5.10 Android 12 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将给大家介绍,如

    2024年02月06日
    浏览(51)
  • yolov5 pt 模型 导出 onnx

    在训练好的yolov5 pt 模型 可以 通过 export.py 进行导出 onnx 导出流程 在 export.py 设置模型和数据源的yaml 在官方的文档中 说明了可以导出的具体的类型。 在 --include 添加导出的类型, 不同的 类型的 环境要求不一样,建议虚拟环境,比如onnx 和 openvino 的numpy 版本要求不一只,一

    2024年02月11日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包