当前位置: 首页 > news >正文

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(一)

        上一篇圆形表盘指针式仪表的项目受到很多人的关注,咱们一鼓作气,把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信

目录

🍓🍓1.yolov8实现数字型仪表智能读数 

🙋🙋2.数字仪表表盘目标检测

🍋2.1准备数据

🍋2.2模型选择

🍋2.3加载预训练模型

🍋2.4数据组织 

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

🐸🐸4.目标检测推理代码

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

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



🍓🍓1.yolov8实现数字型仪表智能读数 

        首先介绍下数字型仪表的数据集如下所示,包含了各种数字型仪表:

       


         最后实现的效果如下:

        从原始数据输入至最后输出仪表读数,共需要3步:

  1. 从原始影像中通过目标检测识别出表盘的位置
  2. 基于第一步的结果将表盘的位置切分出来,再进一步通过目标检测识别表盘中的数字
  3. 基于第二步的结果对表盘中的数字进行智能读数

       

         此篇主要介绍第一步【从原始影像中通过目标检测识别出表盘的位置

🙋🙋2.数字仪表表盘目标检测

        通过目标检测方法对数字仪表表盘进行目标识别的方法不限,本文仍以YOLOv8为例进行说明。

🍋2.1准备数据

        训练数据集共包含390张,验证集140张,测试集139张。部分训练数据如下图所示。

        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: 1 # 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 GFLOPss: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [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,此处如果是自己的表盘识别数据,那就要换成自己的表盘类别,此处我的输入影像中只有表盘这一个类别,所以nc=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: person1: bicycle2: car# ...77: teddy bear78: hair drier79: toothbrush

        此处建议根据自己的数据集设置新建一个shuziyibiao_data.yaml文件,放在./ultralytics/cfg/datasets/目录下,最后数据集设置就可以直接用自己的shuziyibiao_data.yaml文件了。以我的shuziyibiao_data.yaml文件为例:


path: /home/datasets/shuziyibiao_dataset  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test: images/test # test images (optional)names:0: biao

🍉🍉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='shuziyibiao_data.yaml', epochs=50, imgsz=640)

训练完成后的结果如下:

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

        至此就可以使用best.pth进行推理预测表盘位置了。

在此贴上我的训练结果:

 

🐸🐸4.目标检测推理代码

批量推理python代码如下:

from ultralytics import YOLO
from PIL import Image
import cv2
import osmodel = YOLO('/yolov8/runs/detect/train4/weights/best.pt')  # load a custom model
path = '/home/数字仪表/dataset/images/test/'  #test_image_path_dir
img_list = os.listdir(path)
for img_path in img_list:
###  =============detect=====================im1 = Image.open(os.path.join(path,img_path))results = model.predict(source=im1, save=True,save_txt=True)

 推理得到的可视化结果如下:

        为了方便下一步的表盘中的数字识别任务,可以将框内的表盘提取并裁剪出来,方便后续使用。裁剪后的表盘如下所示。

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(二)

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(三)-CSDN博客

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


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


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

http://www.lryc.cn/news/398817.html

相关文章:

  • 微信小程序---npm 支持
  • 02MFC画笔/画刷/画椭圆/圆/(延时)文字
  • JavaWeb(四:Ajax与Json)
  • Spring源码中的模板方法模式
  • 初学SpringMVC之 JSON 篇
  • Mojo AI编程语言(三)数据结构:高效数据处理
  • Java学习笔记整理: 关于SpringBoot 2024/7/12;
  • ASP.NET MVC Lock锁的测试
  • Hadoop3:HDFS-通过配置黑白名单对集群进行扩缩容,并实现数据均衡(实用)
  • TensorFlow系列:第五讲:移动端部署模型
  • 深度学习DeepLearning二元分类 学习笔记
  • Eureka 介绍与使用
  • Java异常体系、UncaughtExceptionHandler、Spring MVC统一异常处理、Spring Boot统一异常处理
  • bash终端快捷键
  • 【Visual Studio】Visual Studio报错合集及解决办法
  • 【微信小程序知识点】转发功能的实现
  • 用python识别二维码(python实例二十三)
  • 电脑文件夹怎么设置密码?让你的文件更安全!
  • paddla模型转gguf
  • Memcached vs Redis——Java项目缓存选择
  • 大模型最新黑书:基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理 PDF
  • 【电子数据取证】电子数据司法鉴定
  • 使用 OpenCV 的 inRange 函数进行颜色分割
  • OpenAI终止对中国提供API服务,对国内AI市场产生重大冲击?
  • JavaDS —— 栈 Stack 和 队列 Queue
  • C++进阶:继承和多态
  • 【八大排序】java版(上)(冒泡、快排、堆排、选择排序)
  • .Net Core 微服务之Consul(二)-集群搭建
  • C++ --> 类和对象(二)
  • 利用宝塔安装一套linux开发环境