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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

osgFX扩展库-异性光照、贴图、卡通特效(1)

本章将简单介绍 osgFX扩展库及osgSim 扩展库。osgFX库用得比较多,osgSim库不常用,因此,这里只对这个库作简单的说明。 osgFX扩展库 osgFX是一个OpenSceneGraph 的附加库,是一个用于实现一致、完备、可重用的特殊效果的构架工具,其…

UE 事件分发机制 day9

观察者模式原理 观察者模式通常有观察者与被观察者,当被观察者状态发生改变时,它会通知所有的被观察者对象,使他们能够及时做出响应,所以也被称作“发布-订阅模式”。总得来说就是你关注了一个主播,主播的状态改变会通…

Fabric:搭建自定义网络

Hyperledger Fabric: V2.5.4 写在最前 从本篇博客开始,将陆续介绍使用Fabric搭建自定义网络及部署执行链码的过程。本篇主要介绍如何搭建网络。   由于前文在安装Fabric的时候,已经将目录fabric-samples/bin加入到了环境变量PATH中,所以正文…

数据结构 / day01 作业

1.定义结构体数组存储5个学生的信息:姓名,年龄,性别 定义函数实现输入,要求形参使用结构体指针接收 函数实现5个学生年龄排序(注意对年龄排序时,交换的是所有信息) 定义函数实现输出,要求形参使用结构体…

(5h)Unity3D快速入门之Roll-A-Ball游戏开发

DAY1:Unity3D安装 链接 DAY2:构建场景,编写代码 链接 内容:WASD前后左右移动、摄像机跟随 DAY3:待更新 DAY4:待更新 DAY5:待更新

jekins CVE-2018-1000861 漏洞复现

jekins CVE-2018-1000861 漏洞复现 ‍ 名称: jenkins 命令执行 (CVE-2018-1000861) 描述: ​Jenkins 可以通过其网页界面轻松设置和配置,其中包括即时错误检查和内置帮助。 插件 通过更新中心中的 1000 多个插件,Jenkins 集成了持续集成和持续交付工具…

INFINI Gateway 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务(含公有云、私有云、混合云、桌面云)推出的一项合作伙伴计划,旨在为构建持续发展、合作共赢的鲲鹏生态圈,通过整合华为的技术、品牌资源,与合作伙伴共享商机和利…

AI大模型相关产品的数据飞轮如何建设?

1、背景 数据飞轮,是今年大模型带火的一个典型词汇,通过客户在应用程序中输入的提示词这样的数据反馈,使大模型快速迭代。简单说:好的产品 -> 更多的用户数据 -> 更好的模型质量 -> 更好的产品就进入了一个正向循环。一…

【Apifox】测试工具自动编写接口文档

在开发过程中,我们总是避免不了进行接口的测试, 而相比手动敲测试代码,使用测试工具进行测试更为便捷,高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman,他还拥有一个非常nb的功能, 在接…

小白备战蓝桥杯:Java基础语法

一、注释 IDEA注释快捷键:Ctrl / 单行注释: //注释信息 多行注释: /* 注释信息 */ 二、字面量 常用数据:整数、小数、字符串(双引号)、字符(单引号)、布尔值(tr…

JavaScript 的 DOM 知识点有哪些?

文档对象模型(Document Object Model,简称 DOM),是一种与平台和语言无关的模型,用来表示 HTML 或 XML 文档。文档对象模型中定义了文档的逻辑结构,以及程序访问和操作文档的方式。 当网页加载时&#xff0…

unity3d 旋转cube时变形

将cube移到父路径同级,重置再,更改角度,或者将父路径先重置,再将cube移动到父节点下面

Corel产品注册机Corel Products KeyGen 2023 – XFORCE解决会声会影2023试用30天

CorelDRAW注册机2023支持全系列产品_Corel Products KeyGen 2023 X-FORCE v8 CorelDRAW注册机2023支持全系列产品_Corel Products KeyGen 2023 X-FORCE v8,Corel产品注册机(Corel Products KeyGen 2023 – XFORCE),支持Corel旗下所…

Django请求生命周期流程

浏览器发起请求。 先经过网关接口,Django自带的是wsgiref,请求来的时候解析封装,响应走的时候打包处理,这个wsgiref模块本身能够支持的并发量很少,最多1000左右,上线之后会换成uwsgi,并且还会加…

人工智能技术发展漫谈

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 人工智能发展历程 人工智能(Artificial Intelligence,简称AI)的发展历史可以追溯到20世纪中叶。以下是一些关键时刻和阶段: 起…

MySQL--日志

日志 错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息 当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的,默认…

Java变量理解

成员变量VS局部变量的区别 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰…

C++进阶篇5---番外-位图和布隆过滤器

哈希的应用 一、位图 情景:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中??? 看到查找元素的范围,暴力肯定是过不了的,我们要么…

自学成为android framework工程师需要准备哪些装备-千里马车载车机系统开发学习

背景 hi,粉丝朋友们: 大家好!经常有很多学员买课同学都会问到需要准备哪些装备,我也回答了很多学员了,今天就搞一篇文章来统一说明一下,告诉一下大家如果你想从一个framework新手变成一个framework开发的高…

sprintboot快速初始化【Springboot】

1.首先选择创建项目 2.填写对应的项目信息 一定要勾选maven,否则没有pom文件,选择next 3.选择应用场景 点击 create,DIEA就会根据你的选择自动创建项目骨架; 4.创建一个控制层 随便创建一个控制层,测试一下项目是否…