当前位置:   article > 正文

RK3568笔记五:基于Yolov5的训练及部署_rk3568 yolo

rk3568 yolo

若该文为原创文章,转载请注明原文出处。

一. 部署概述

环境:Ubuntu20.04、python3.8

芯片:RK3568

芯片系统:buildroot

开发板:ATK-DLRK3568

开发主要参考文档:《Rockchip_Quick_Start_RKNN_Toolkit2_CN-1.4.0.pdf》、《Rockchip_User_Guide_RKNN_Toolkit2_CN-1.4.0.pdf》
 

二、yolov5模型训练

1、训练环境

训练是在云端训练的,平台AutoDL租了一台2080IT,配置如下:

2、环境搭建

1、创建conda环境

  1. conda create -n rkyolov5 python=3.8       // 用于yolov5
  2. conda create -n rknn2_env python=3.8 -y   // 用于rknn2

2、激活conda环境

  1. conda activate rkyolov5
  2. conda deactivate // 退出环境

3、安装pytoch

pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple 

4、下载yolov5-v6.0

首先需要在官网下载yolov5-6.0的项目 我们打开yolov的官网,Tags选择6.0版本

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

5、训练

python train.py --img 640 --data coco128.yaml --cfg yolov5s.yaml --weights yolov5s.pt --epoch 300 --batch-size 16 --device 0

出错:The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:

原因numpy版本问题

处理,重新安装

  1. pip uninstall numpy
  2. pip install numpy==1.22

出错:AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS

ModuleNotFoundError: No module named 'PIL'

原因是pillow库版本不支持,降低版本

pip install pillow==9.5.0

6、pt转onnx

转换步骤:

修改models/yolo.py,修改class Detect(nn.Module):的forward函数

注意!!!仅在转换时修改,在训练时改回原状态!再训练时不要忘记哦!

  1. # def forward(self, x):
  2. #     z = [] # inference output
  3. #     for i in range(self.nl):
  4. #         x[i] = self.m[i](x[i]) # conv
  5. #         bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
  6. #         x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
  7. #
  8. #         if not self.training: # inference
  9. #             if self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic:
  10. #                 self.grid[i] = self._make_grid(nx, ny).to(x[i].device)
  11. #
  12. #             y = x[i].sigmoid()
  13. #             if self.inplace:
  14. #                 y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy
  15. #                 y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh
  16. #             else: # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953
  17. #                 xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy
  18. #                 wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2) # wh
  19. #                 y = torch.cat((xy, wh, y[..., 4:]), -1)
  20. #             z.append(y.view(bs, -1, self.no))
  21. #
  22. #     return x if self.training else (torch.cat(z, 1), x)
  23. def forward(self, x):
  24.   z = [] # inference output
  25.   for i in range(self.nl):
  26.       x[i] = self.m[i](x[i]) # conv
  27.   return x

修改export.py函数的--opset为12

运行export.py

python export.py --weights best.pt --img 640 --batch 1 --opset 12

简化模型

python -m onnxsim weights/yolov5s.onnx weights/yolov5s-sim.onnx

三、安装rknn-toolkit2

根据正点原子的教程安装,先安装工具链,在创建环境,在安装rknn-toolkit2,之后转换模型

下载地址:GitHub - rockchip-linux/rknn-toolkit2

1、创建一个新的环境

conda create rknn2_env python=3.8 -y

2、安装

进入packages

pip install rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl

等待安装

把转换好的onnx 拷贝到 rknn-toolkit2-master/examples/onnx/yolov5目录下,

3、修改test.py文件

  1. ONNX_MODEL = 'yolov5s_relu.onnx'
  2. RKNN_MODEL = 'yolov5s_relu.rknn'

4、运行

python test.py

出错: ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /root/miniconda3/envs/rknn2_env/lib/python3.8/site-packages/rknn/api/lib/linux-x86_64/cp38/librknnc.so)

原因:工具链没安装,安装后测试正常。

四、部署

通过测试,使用正点原子的yolov5例程测试结果不对,所以使用SDK里自带的rknpu2里的example

重新编译里面的例子,直接编译不编译不过,需要修改一下。

修改build-linux_RK356X.sh和CMakeLists.txt,把正点原子的libs拷贝过来重新编译

编译后的文件在install目录下,把rknn_yolov5_demo_Linux通过adb拷贝到开发板上。

打开开发板终端,运行: ./rknn_yolov5_demo model/RK356X/last.rknn model/zidane.jpg

生成的结果保存在当前目录下。

通过输出信息可以看来推理有出结果,结果也是对的,但只有一个,图片是有2个人.

程序应该还有地方要修改,等到改好后在开放代码。

如有侵权,或需要完整代码,请及时联系博主。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/933157
推荐阅读
相关标签
  

闽ICP备14008679号