RK3568笔记六:基于Yolov8的训练及部署

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

基于Yolov8的训练及部署,参考鲁班猫的手册训练自己的数据集部署到RK3568,用的是正点的板子。

1、 使用 conda 创建虚拟环境
conda create -n yolov8 python=3.8
​
conda activate yolov8
2、 安装 pytorch 等等

根据pytorch自行安装

3、 安装 ,直接使用命令安装

方法有两种,个人使用的是第二种方法:

方法一:

通过pip安装

pip install ultralytics -i https://mirror.baidu.com/pypi/simple

方法二:

通过拉取仓库然后安装

git clone https://github.com/ultralytics/ultralytics
​
cd ultralytics
​
pip install -e .

# 安装成功后,使用命令 yolo 简单看下版本

(yolov8) llh@anhao:/$ yolo version
​
8.0.206
4、简单测试

下载权重文件

wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt

*获取测试图片,可以下面位置获取,可能会失败,也可以从配套例程获取

wget https://ultralytics.com/images/bus.jpg

使用 yolo 命令进行测试

yolo detect predict model=./yolov8n.pt source=./bus.jpg
​# 预测图片结果保存在当前 runs 目录下,具体路径是./runs/detect/predict/bus.jpg
参数说明:
# 第一个参数是指任务 [detect, segment, classify], 这里测试目标检测是 detect,该参数
是可选的;
# 第二个参数 model,设置模型,该参数必须指定;
# 其他参数,source 指定要预测的图片路径,imgsz 指定图像尺寸等等,更多参数具体参考下:
https://docs.ultralytics.com/usage/cfg/
5、模型训练

以COCO128为例,训练测试

yolo detect train data=coco128.yaml model=yolov8n.pt epochs=300 imgsz=640

测试

yolo detect predict model=./runs/detect/train/weights/best.pt source=./bus.jpg

6、模型导出

使用 airockchip/ultralytics_yolov8 可以直接导出适配 rknpu 的模型,在 npu 上获得更高的推理效率。

该仓库对模型进行了优化:

• dfl 结构在 NPU 处理上性能不佳,移至模型外部。

• 假设有 6000 个候选框,原模型将 dfl 结构放置于’’框置信度过滤”前,则 6000 个候选框

都需要计算经过 dfl 计算;而将 dfl 结构放置于’’框置信度过滤”后,假设过滤后剩 100 个

候选框,则 dfl 部分计算量减少至 100 个,大幅减少了计算资源、带宽资源的占用。

假设有 6000 个候选框,检测类别是 80 类,则阈值检索操作需要重复 6000* 80 ~= 4.8*10^5 次,占据

了较多耗时。故导出模型时,在模型中额外新增了对 80 类检测目标进行求和操作,用于快速过滤

置信度。

(该结构在部分情况下有效,与模型的训练结果有关) 可以在./ultralytics/nn/modules/head.py

52 行 ~54 行的位置,注释掉这部分优化,对应的代码是:

cls_sum = torch.clamp(y[-1].sum(1, keepdim=True), 0, 1)
y.append(cls_sum)

具体参考下 RKOPT_README.md 。

导出torchscript模型

# 拉取 airockchip/ultralytics_yolov8
git clone https://github.com/airockchip/ultralytics_yolov8.git
cd ultralytics_yolov8
​
# 复制训练的模型 yolov8n.pt 到 ultralytics_yolov8 目录下
# 然后修改./ultralytics/cfg/default.yaml 文件,主要是设置下 model,为自己训练的模型
路径:
model: ./yolov8n.pt # (str, optional) path to model file, i.e. yolov8n.pt, yolov8n.yaml
data: # (str, optional) path to data file, i.e. coco128.yaml
epochs: 100 # (int) number of epochs to train for
​
# 导出模型:
python ./ultralytics/engine/exporter.py
#导出的模型,保存在当前目录下的 yolov8n_rknnopt.torchscript

导出ONNX模型

yolo export model=path/to/best.pt format=onnx  # export custom trained model
7、RKNN模型转换

模型转换是通过tooolkit2转成rknn模型的,需要先安装toolkit2,具体安装参考正点原子的。

这是使用的是 rknn_model_zoo 仓库 的程序,直接转换模型,

# 拉取 rknn_model_zoo,(注意教程测试时 rknn_model_zoo 的 SHA 是
22462182b91c7d856b59a8ec3e4a25bba8813d17)
git clone https://github.com/airockchip/rknn_model_zoo.git
# 然后切换到 models/CV/object_detection/yolo/RKNN_model_convert 目录下
cd rknn_model_zoo/models/CV/object_detection/yolo/RKNN_model_convert

在录前目录下创建yolov8_rk3568.yml文件,内容如下:

# model_framework: onnx
model_framework: pytorch
model_file_path: /mnt/f/wsl_file/wsl_ai/yolov8/ultralytics_yolov8/yolov8n_rknnopt.torchscript
RK_device_platform: rk3568
# RK_device_id: simulator
dataset: ../../../../../datasets/COCO/coco_subset_10.txt
quantize: True
# pre_compile: online
graph:
in_0:
shape: 1,3,640,640
mean_values: 0
std_values: 255
img_type: RGB
configs:
quantized_dtype: asymmetric_quantized-8
quantized_algorithm: normal
optimization_level: 3
# force_builtin_perm: True

注意三个地方:

1、model_framework可以使用onnx也可以是pytorch
2、model_file_path:模型路径
3、RK_device_platform: 平台

使用命令或者创建脚本执行模型转换等操作

# 使用 rknn_convert.py,转换模型
python ../../../../../common/rknn_converter/rknn_convert.py --yml_path ./yolov8_rk3568.yml

转换的模型保存在当前目录 model_cvt/RK3568/下,模型文件是 yolov8n_rknnopt_RK3568_i8.rknn。

8、部署

使用 rknn_model_zoo 仓库 提供的 RKNN_C_demo,在板端部署

# 拉取 rknn_model_zoo 仓库源码,注意教程测试的 rknn_model_zoo 仓库版本是
22462182b91c7d856b59a8ec3e4a25bba8813d17
​
git clone https://github.com/airockchip/rknn_model_zoo.git
# 切换到~/rknn_model_zoo/libs/rklibs 目录,然后拉取相关库,包括 rknpu2 和 librga
cd ~/rknn_model_zoo/libs/rklibs
git clone https://github.com/rockchip-linux/rknpu2
git clone https://github.com/airockchip/librga
# 然后切换到~/rknn_model_zoo/models/CV/object_detection/yolo/RKNN_C_demo/RKNN_toolkit_2/rknn_yolo_demo 目录
cd rknn_model_zoo/models/CV/object_detection/yolo/RKNN_C_→demo/RKNN_toolkit_2/rknn_yolo_demo
# 运行 build-linux_RK3568.sh 脚本,编译工程(使用系统默认的编译器),最后生成的文件安装
在 build/目录下
./build-linux_RK3568.sh

执行命令进行模型推理:

# 切换到 install/rk3568/Linux/rknn_yolo_demo 目录下,复制前面转换出的 yolov8n_→rknnopt_RK3568_i8.rknn 模型文件到目录下,
# 然后把文件拷贝到开发板上执行下面命令:
./rknn_yolo_demo␣yolov8 q8 ./yolov8n_rknnopt_RK3588_i8.rknn ./model/bus640.jpg
#运行后会在目录下生成out.jpg

参考链接

Quickstart - Ultralytics YOLOv8 Docs

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

GitHub - airockchip/ultralytics_yolov8: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

GitHub - airockchip/rknn_model_zoo

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

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
【资源介绍】 基于RK3588部署yolov5s模型源码(实时摄像头检测)+部署说明文档.zip 该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测) - 所需: - 安装了Ubuntu20系统的RK3588 - 安装了Ubuntu18的电脑或者虚拟机 <details> <summary>一、yolov5 PT模型获取</summary> [Anaconda教程](https://blog.csdn.net/qq_25033587/article/details/89377259)\ [YOLOv5教程](https://zhuanlan.zhihu.com/p/501798155)\ 经过上面两个教程之后,你应该获取了自己的`best.pt`文件 </details> <details> <summary>二、PT模型转onnx模型</summary> - 将`models/yolo.py`文件中的`class`类下的`forward`函数由: ```python 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) ``` 改为: ```python def forward(self, x): z = [] # inference
【资源说明】 YOLOv8部署瑞芯微RK3588板端c++源码(含使用说明).zipYOLOv8部署瑞芯微RK3588板端c++源码(含使用说明).zip ## 编译和运行 1)编译 ``` cd examples/rknn_yolov8_demo_open bash build-linux_RK3588.sh ``` 2)运行 ``` cd install/rknn_yolov8_demo_Linux ./rknn_yolov8_demo ``` 注意:修改模型、测试图像、保存图像的路径,修改文件为src下的main.cc ``` 测试效果 冒号“:”前的数子是coco的80类对应的类别,后面的浮点数是目标得分。(类别:得分) ![images](test_result.jpg) (注:图片来源coco128) 说明:推理测试预处理没有考虑等比率缩放,激活函数 SiLU 用 Relu 进行了替换。由于使用的是coco128的128张图片数据进行训练的,且迭代的次数不多,效果并不是很好,仅供测试流程用。换其他图片测试检测不到属于正常现象,最好选择coco128中的图像进行测试。 把板端模型推理和后处理时耗也附上,供参考,使用的芯片rk3588。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
要在rk3568部署yolov5模型,你可以按照以下步骤进行操作: 1. 首先,你需要在Windows上搭建训练环境并使用pytorch框架训练yolov5s模型。你可以参考\[1\]中提供的教程来完成这一步骤。 2. 在训练完成后,你需要将训练好的模型转换为rknn模型。你可以使用RKNN-Toolkit2来进行转换。建议使用conda虚拟环境,并按照\[3\]中提供的文档进行安装。 3. 在转换完成后,你可以将rknn模型部署rk3568电路板上进行推理。具体的部署步骤可能因为你的具体环境和需求而有所不同,你可以参考RKNN-Toolkit2的文档或者官方文档来了解如何在rk3568部署rknn模型。 总结起来,你需要在Windows上搭建训练环境并使用pytorch框架训练yolov5s模型,然后将训练好的模型转换为rknn模型,并最后在rk3568部署rknn模型进行推理。希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [(十二)rk3568 NPU 中部署自己训练的模型,(1)使用yolov5训练自己的数据集-环境搭建部分](https://blog.csdn.net/dongshizhishui/article/details/126887399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [(十二)rk3568 NPU 中部署自己训练的模型,(1)使用yolov5训练自己的数据集-模型训练部分](https://blog.csdn.net/dongshizhishui/article/details/130302325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [手把手教学YOLOV5在RK3568部署应用及代码实现](https://blog.csdn.net/yangbisheng1121/article/details/128785690)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷忆枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值