0


目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践

目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践

flyfish

源码地址

  1. https://github.com/shaoshengsong/rockchip_rknn_yolov5

Rockchip 支持 YOLOv5 v6.2 从训练到C++部署的全链条开发,包括

C++部署代码
pytorch模型转onnx代码
onnx模型转rknn代码

文章目录

在这里插入图片描述

YOLOv5模型版本
在这里插入图片描述

模型导出环境
rknn-toolkit 1.7.1

部署环境
设备测试环境:RV1126
交叉编译环境:Ubuntu18.04

训练

从yolov5官网下载v6.2版本的源码进行训练

  1. https://github.com/ultralytics/yolov5

在这里插入图片描述

模型导出

当一个yolov5_6.2模型训练完成后

1 pt模型 转 onnx

进入rockchip_rknn_yolov5\yolov5_6.2_export目录
执行

  1. python export.py --weights yolov5s_v6.2.pt --img 640 --batch 1 --include onnx torchscript

yolov5s_v6.2.pt 是训练的模型,执行该命令后生成onnx模型
结果

  1. export: data=data/coco128.yaml, weights=['yolov5s_v6.2.pt'], imgsz=[640], batch_size=1, device=cpu, half=False, inplace=False, train=False, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=12, verbose=False, workspace=4, nms=False, agnostic_nms=False, topk_per_class=100, topk_all=100, iou_thres=0.45, conf_thres=0.25, include=['onnx','torchscript']
  2. YOLOv5 🚀 2022-8-17 Python-3.6.9 torch-1.10.1+cu102 CPU
  3. Fusing layers...
  4. YOLOv5s summary:213 layers,7225885 parameters,0 gradients,16.4 GFLOPs
  5. TorchScript: starting export with torch 1.10.1+cu102...
  6. TorchScript: export success, saved as yolov5s_v6.2.torchscript (27.8 MB)
  7. Python 3.7.0 required by YOLOv5, but Python 3.6.9is currently installed
  8. ONNX: starting export with onnx 1.11.0...
  9. ONNX: export success, saved as yolov5s_v6.2.onnx (27.6 MB)
  10. Export complete (3.78s)
  11. Results saved to /home/a/deeplearning/original/yolov5-6.2
  12. Detect: python detect.py --weights yolov5s_v6.2.onnx
  13. Validate: python val.py --weights yolov5s_v6.2.onnx
  14. PyTorch Hub: model = torch.hub.load('ultralytics/yolov5','custom','yolov5s_v6.2.onnx')
  15. Visualize: https://netron.app

在这里插入图片描述

2 onnx模型 转 rknn

进入rockchip_rknn_yolov5\yolov5_6.2_export目录
执行

  1. python yolov562_to_rknn_3_4.py

yolov562_to_rknn_3_4的输出 ,此仓库使用该方式
最后的3_4表示有三个输出,每个输出4维

  1. type: float32[1,255,80,80]type: float32[1,255,40,40]type: float32[1,255,20,20]

在执行前需要更为自己的配置
各个文件的路径,以下全提供在bin文件夹中

1 路径配置

  1. ONNX_MODEL ='d:\\yolov5s_v6.2_output3_4.onnx'
  2. RKNN_MODEL ='d:\\yolov5s_v6.2_output3_4.rknn'
  3. IMG_PATH ='d:\\bus.jpg'
  4. DATASET ='d:\\dataset.txt'

2 是否需要预编译

转换rknn模型代码是跨平台运行,需要预编译在Ubuntu上将 pre_compile=True (windows不支持)

  1. ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET, pre_compile=False)

3 连接到开发板

填写自己设备的型号和ID

  1. ret = rknn.init_runtime('rv1126', device_id='bab4d7a824f04867')

执行结果

  1. --> Config model
  2. done
  3. --> Loading model
  4. done
  5. --> Building model
  6. done
  7. --> Export RKNN model
  8. done
  9. --> Init runtime environment
  10. done
  11. --> Running model
  12. class: person, score:0.8047849535942078
  13. box coordinate left,top,right,down:[471.46940302848816,233.36096787452698,562.3111145496368,517.8007752895355]class: person, score:0.8034061789512634
  14. box coordinate left,top,right,down:[210.58499628305435,238.00635361671448,284.57671636343,522.446161031723]class: person, score:0.7967345118522644
  15. box coordinate left,top,right,down:[113.3626811504364,236.31811678409576,204.1182758808136,541.2366927862167]class: person, score:0.36264267563819885
  16. box coordinate left,top,right,down:[78.74371695518494,336.6768593788147,123.03675484657288,517.1076865196228]class: bus , score:0.762096107006073
  17. box coordinate left,top,right,down:[88.67809492349625,121.26825976371765,556.7039851546288,474.0234272480011]

生成rknn模型并看到测试结果

4 其他的onnx转rknn的方式

  1. rockchip_rknn_yolov5\yolov5_6.2_export\other_export

yolov5_v6.2_python_output1_3表示模型输出是

  1. 1,25200,85

yolov5_v6.2_python_output3_5表示输出是

  1. (1,3,80,80,85)(1,3,40,40,85)(1,3,20,20,85)

中间转换的shape

  1. (3,80,80,85)(3,40,40,85)(3,20,20,85)

最终使用的shape

  1. (80,80,3,85)(40,40,3,85)(20,20,3,85)

C++ 部署

文件

  1. YOLOv562Detector.cpp
  2. YOLOv562Detector.h
  3. test_image.cc

文件所在路径

  1. rockchip_rknn_yolov5\C++\yolov5_62

使用方法

  1. test_image "/userdata/yolov5s_v6.2_output3_4.rknn" 80 640

可执行文件名字 test_image
1 模型路径

  1. /userdata/yolov5s_v6.2_output3_4.rknn

2 模型推理类别个数

  1. 80

3 模型输入大小

  1. 640

在这里插入图片描述
0表示人,5表示公共汽车,显示的是类别ID,后面跟着分数。

其他方案

标签: c++ yolov5 pytorch

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

“目标检测 YOLOv5 - v6.2版本模型在瑞芯微 Rockchip设备从训练到C++部署实践”的评论:

还没有评论