[YOLOv8] 用YOLOv8实现指针式圆形仪表智能读数(一)

        最近研究了一个项目,利用python代码实现指针式圆形仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。

目录

🍓🍓1.yolov8实现圆盘形仪表智能读数 

🙋🙋2.仪表目标检测

🍋2.1准备数据

🍋2.2模型选择

🍋2.3加载预训练模型

🍋2.4数据组织 

🍉🍉3.目标检测训练代码

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🍓🍓1.yolov8实现圆盘形仪表智能读数 

        实现的效果如下:

        对整个项目来说,可分为三个大步骤:

  1. 仪表目标检测
  2. 仪表表盘指针分割
  3. 计算读数

        此篇先将仪表目标检测,将原图中的表盘识别出来。

🙋🙋2.仪表目标检测

        首先第一步,对原始影像中的仪表进行目标识别,具体使用的模型我们采用YOLOv8,当然可以换其他模型,这里就以YOLOv8为示例进行仪表目标检测任务进行讲解。

🍋2.1准备数据

        使用的数据集如下所示:

label部分采用YOLO格式的txt文件,格式如下所示:

🍋2.2模型选择

        以YOLOv8n为例,模型选择代码如下:

model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

        其中yolov8n.yaml为./ultralytics/cfg/models/v8/yolov8n.yaml,可根据自己的数据进行模型调整,打开yolov8n.yaml显示内容如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 7 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 12

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2f, [1024]] # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)

        主要需要修改的地方为nc,也就是num_class,此处如果是自己的表盘识别数据,那就要换成类别为1。

        如果其他的模型参数不变的话,就默认保持原版yolov8,需要改造模型结构的大佬请绕行。

🍋2.3加载预训练模型

        加载预训练模型yolov8n.pt,可以在第一次运行时自动下载,如果受到下载速度限制,也可以自行下载好(下载链接),放在对应目录下即可。

 

🍋2.4数据组织 

        yolov8还是以yolo格式的数据为例,./ultralytics/cfg/datasets/data.yaml的内容示例如下:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)

# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  # ...
  77: teddy bear
  78: hair drier
  79: toothbrush

        要注意此处的names是从0开始的,如果是0-79,那上面模型选择的nc=80。这里要特别小心。

        训练时的数据加载方式为:

# Train the model
results = model.train(data='data.yaml', epochs=50, imgsz=640)

🍉🍉3.目标检测训练代码

        准备好数据和模型之后,就可以开始训练了,train.py的内容显示为:

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='data.yaml', epochs=50, imgsz=640)

训练完成后的结果如下所示: 

        其中weights文件夹内hi包含2个模型,一个best.pth,一个last.pth。

        模型预测效果如下:

        为了方便下一步的像素级表盘分割任务,可以将框内的表盘提取并裁剪出来,方便后续使用。

下一篇:YOLOv8实现仪表盘实例分割

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--

🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Sui主网升级至V1.24.1版本

其他升级要点如下所示: GraphQL #17313 不再存在 Live 或 Historical 的 ObjectKind,它们已经合并为单个 Indexed 类型,表示从索引中获取的任何对象(而不是我们有相关信息但尚未建立索引的对象, 或者已被删除或包装…

什么才是正确的领域驱动实现架构?

作为一种系统建模方法,DDD同样涉及系统的体系架构设计。区别于分布式、事件驱动、消息总线等架构设计方法,DDD中的架构设计关注前面各章所介绍的聚合、实体、值对象、领域事件、应用服务以及资源库之间的交互方式和风格,并在设计思想上有其独…

创建和管理数据库

1. 一条数据的存储过程 存储数据是处理数据的第一步.只有正确的把数据存储起来,我们才能进行有效的处理和分析.否则,只能是一团乱麻.在MySQL中,一个完整的数据存储过程一共有四步 : 创建数据库,确认字段,创建数据表&a…

[图解]SysML和EA建模住宅安全系统-01

1 00:00:00,980 --> 00:00:03,100 接下来,我们来看一下案例 2 00:00:04,930 --> 00:00:06,750 我们这次课程的案例 3 00:00:07,090 --> 00:00:13,800 选用了SysML实用指南的书上 4 00:00:13,810 --> 00:00:16,180 第十七章这个案例 5 00:00:16,350 …

RSAC 2024现场:谷歌展望大模型在网络安全领域的前景

人类距离将网络安全的控制权交给生成式AI还有多远? 前情回顾RSAC2024动态 伪造内容鉴别厂商Reality Defender斩获2024 RSAC创新沙盒冠军 RSAC 2024上值得关注的10款网络安全产品 RSAC 2024创新沙盒十强出炉,谁能夺冠? 安全内参5月8日消息…

代码随想录算法训练营第二十一天:树树树

代码随想录算法训练营第二十一天:树树树 ‍ 513.找树左下角的值 力扣题目链接​**(打开新窗口)** 给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: ​​ 示例 2: ​​ #算法公开课 《代码随想录》算法视频公开课…

跨平台美学!使用DevExpress Reports Office File API时如何管理字体?

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

鲁大师4月电动两轮车榜:RideyFUN Air智驾系统上线,九号F2z 110智能化再升级

鲁大师4月电动两轮车排行榜数据来源于鲁大师智慧实验室,测评的车型均为市面上主流品牌的主流车型。截止目前,鲁大师智能化电动车测评的车型高达160余台,且还在不断增加和丰富中。 鲁大师电动车智能化测评体系包含车辆的状态采集与管理硬件系统…

android基础-通知

基于第一行android 使用PendingIntent来实现点击通知跳转到另一个活动。 notificationcompat.builder后面可以跟很多的方法,不同方法不同效果,比如加一个音频.setSound(uri) 内置网页 解析json

Spring IoCDI(1)—入门

目录 一、IoC & DI入门 1、Spring是什么 (1)什么是容器? (2)什么是IoC? 二、IoC介绍 1、传统程序开发 2、解决方案 3、IoC程序开发 4、IoC优势 三、DI介绍 通过前面的学习,我们知…

开源即时通讯IM框架 MobileIMSDK v6.5 发布

一、更新内容简介 本次更新为次要版本更新,进行了bug修复和优化升级(更新历史详见:码云 Release Notes、Github Release Notes)。 MobileIMSDK 可能是市面上唯一同时支持 UDPTCPWebSocket 三种协议的同类开源IM框架。轻量级、高…

OpenGVLab/InternVL-Chat-V1-5-Int8

openedai-vision 代码仓库 OpenGVLab/InternVL-Chat-V1-5-Int8 模型文件地址 示 算力平台AutoDL df -h /root/autodl-tmp tar -xvf FileName.tartar -xvf 安装 克隆我们的仓库并跳转到相应目录 2. 创建 conda 环境 cond…

解决Vue devtools插件数据变化不会自动刷新

我们使用devtools插件在监测vuex中表单或自定义组件的数据,发现页面数据发生变化后,但是devtools中还是老数据,必须手动点击devtools刷新才能拿到最新的数据。很烦! 解决方案: 打开chrome的设置,向下翻&…

安服仔养成篇——基线检查

基线检查概念理解 先放白嫖来的解释: “安全基线是保持信息系统安全的机密性、完整性、可用性的最小安全控制,是系统的最小安全保证,最基本的安全要求。” 啥意思呢,基线检查其实就是对操作系统、中间件、数据库、网络设备等多…

2024挂耳式耳机怎么选?5款高性价比开放式耳机推荐榜

近年来,开放式耳机受到了越来越多人的关注,特别是对于运动爱好者来说,在运动的过程中,传统的有线耳机不适合户外运动,不仅佩戴不稳,线还容易缠绕,而普通的蓝牙耳机长时间佩戴会感觉耳朵不适。在…

武汉星起航:亚马逊五大促销类型全面解析,打造销售狂欢新篇章

在全球电商领域,亚马逊以其卓越的平台优势和创新的促销策略,为卖家和消费者搭建了一座互通的桥梁。今天,武汉星起航在这里解析亚马逊的五大促销类型,帮助卖家和消费者更好地把握商机,享受购物的乐趣。 一.…

sql 注入 1

当前在email表 security库 查到user表 1、第一步,知道对方goods表有几列(email 2 列 good 三列,查的时候列必须得一样才可以查,所以创建个临时表,select 123 ) 但是你无法知道对方goods表有多少列 用order …

如何在六个月内学会任何一门外语(ted转述)

/仅作学习和参考,勿作他用/ a question : how can you speed up learning? 学得快,减少在学校时间 结果去研究心理学惹 spend less time at school. if you learn really fast , you donot need to go to school at all. school got in the way of …

邮箱Webhook API发送邮件的性能怎么优化?

邮箱Webhook API发送邮件的步骤?如何用邮箱API发信? 随着业务规模的扩大,如何高效地通过邮箱Webhook API发送邮件,成为了许多企业面临的关键问题。下面,AokSend将探讨一些优化邮箱Webhook API发送邮件性能的方法。 邮…