在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。

B站配套视频:https://www.bilibili.com/video/BV1or421T74f

背景基础

在之前的课程里面我们已经把v5的内容进行了充分的描述,从这篇博客开始将开始关于yolov8在C++上的部署。

首先我们需要知道v5和v8之间的区别,v5的功能主要集中在分类,具体的使用方法我们也已经全部说明。

v8除了分类以外还可以实现关键点跟踪和图像分割,所以在产品多样性方面v8更具有优势。

图上是yolov8的github给出的示例,分类、检测、分割、追踪、关键点识别。如果需要在产品上有更多的应用,yolov8属于必须学习的部分了。

关于yolov8的模型修改

这一步和yolov5的道理相同,如果你熟悉yolov8也会知道v8在输出头方面做了不小的修改,从原来v5版本3个改成了2个。但是整个推理过程还是一样的,预处理、推理、后处理。同样修改部分都在后处理上,所以还是一样,我们需要在训练完成之后修改v8的代码去除后处理部分。主要修改是两个位置:

位置一:nn/modules/head.py 40行~50行左右位置

修改部分一

python 复制代码
		print('自定义的模型初始化...')
        self.conv1x1 = nn.Conv2d(16,1,1, bias=False).requires_grad_(False)
        xx = torch.arange(16, dtype=torch.float)
        self.conv1x1.weight.data[:] = nn.Parameter(xx.view(1,16,1,1))

修改部分二

python 复制代码
		y = []
        for i in range(self.nl):
           t1 = self.cv2[i](x[i])
           t2 = self.cv3[i](x[i])
           y.append(self.conv1x1(t1.view(t1.shape[0], 4, 16, -1).transpose(2,1).softmax(1)))
           y.append(t2)
        return y

位置二:engine/model.py 130行~150行左右

修改内容:

python 复制代码
        import torch
        self.model.fuse() 
        self.model.eval()
        self.model.load_state_dict(torch.load('weights/yolov8.dict.pt', map_location='cpu'), strict=False)
        dummy_input = torch.randn(1, 3, 640, 640)
        input_names = ["data"]
        output_names = ["reg1","cls1","reg2","cls2","reg3","cls3"]
        torch.onnx.export(self.model, dummy_input, "weights/yolov8.dict.onnx", verbose=True,input_names=input_names,output_names=output_names, opset_version=11)
        print("done!")

项目目录新建脚本export-onnx.py

python 复制代码
from ultralytics import YOLO

# # 加载模型
# model = YOLO('weights/bz-yolov8-SPPF-s-200-754.pt')
# # 加载模型配置文件,注意需要匹配
# model = YOLO('/app/docs/yolov8/ultralytics/ultralytics/cfg/models/v8/yolov8.yaml')

# 加载模型
model = YOLO('weights/yolov8n.pt')
# 加载模型配置文件,注意需要匹配
model = YOLO('yolov8n.yaml')

关于yolov8的模型量化

还是一样去官方下载rknntoolkit2,使用里面的工具进行量化,具体的使用和v5一致我们就不在这重复演示了。不过需要注意,使用Netron检查导出的onnx模型,一定要是6个输出头,不然脚本执行会出问题。

关于yolov8的RK3588部署

此处就是正题了,关于我们在RK3588上的部署。一样的,大家可以使用官方代码,或者私信我用我的代码版本。我的代码版本里面会准备好官方量化模型供大家测试使用。

更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f\](https://www.bilibili.com/video/BV1or421T74f

更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f\](https://www.bilibili.com/video/BV1or421T74f

更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f\](https://www.bilibili.com/video/BV1or421T74f

更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f\](https://www.bilibili.com/video/BV1or421T74f

更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f\](https://www.bilibili.com/video/BV1or421T74f

更多内容查看视频>>>>>>>>>>>>>>>>> https://www.bilibili.com/video/BV1or421T74f\](https://www.bilibili.com/video/BV1or421T74f

相关推荐
小馒头学python4 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯13 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠16 分钟前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon26 分钟前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
我是谁??29 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
羊小猪~~33 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
AI小杨34 分钟前
【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程
人工智能·opencv·计算机视觉·霍夫变换·车道线检测
晨曦_子画38 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
道可云40 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
人工智能培训咨询叶梓1 小时前
探索开放资源上指令微调语言模型的现状
人工智能·语言模型·自然语言处理·性能优化·调优·大模型微调·指令微调