0


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

github仓库

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

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

best.pt

文件
二、PT模型转onnx模型

  • models/yolo.py文件中的class类下的forward函数由:
defforward(self, x):
    z =[]# inference outputfor i inrange(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()ifnot self.training:# inferenceif 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)ifisinstance(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)

改为:

defforward(self, x):
    z =[]# inference outputfor i inrange(self.nl):
        x[i]= self.m[i](x[i])# convreturn x
  • export.py文件中的run函数下的语句:
shape =tuple((y[0]ifisinstance(y,tuple)else y).shape)# model output shape

改为:

shape =tuple((y[0]ifisinstance(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 - 等待安装完毕检查是否安装成功:pythonfrom 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模型- 进入转换目录: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- 等待安装完毕- 测试是否安装成功:pythonfrom 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

  • 部署完成。


本文转载自: https://blog.csdn.net/Chuan423425/article/details/130205729
版权归原作者 ChuanWunaiiiiiiii 所有, 如有侵权,请联系我们删除。

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

还没有评论