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


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

    目录

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

    🙋🙋2.数字仪表数字识别目标检测

     🍋2.1准备数据

    🍋2.2模型选择

    🍋2.3加载预训练模型

    🍋2.4数据组织 

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

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

     快速通道

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

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


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


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

           


             最后实现的效果如下:

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

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

             此篇主要介绍第二步【从切分好的表盘影像中通过目标检测识别出仪表中的数字

    🙋🙋2.数字仪表数字识别目标检测

     🍋2.1准备数据

            训练数据集共包含141张。部分训练数据如下图所示。

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

    可视化效果如下:

     

    🍋2.2模型选择

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

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

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

    1. # Ultralytics YOLO 🚀, AGPL-3.0 license
    2. # YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
    3.  
    4. # Parameters
    5. nc: 11 # number of classes
    6. scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
    7.   # [depth, width, max_channels]
    8.   n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
    9.   s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
    10.   m: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
    11.   l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
    12.   x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
    13.  
    14. # YOLOv8.0n backbone
    15. backbone:
    16.   # [from, repeats, module, args]
    17.   - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
    18.   - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
    19.   - [-1, 3, C2f, [128, True]]
    20.   - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
    21.   - [-1, 6, C2f, [256, True]]
    22.   - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
    23.   - [-1, 6, C2f, [512, True]]
    24.   - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
    25.   - [-1, 3, C2f, [1024, True]]
    26.   - [-1, 1, SPPF, [1024, 5]] # 9
    27.  
    28. # YOLOv8.0n head
    29. head:
    30.   - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
    31.   - [[-1, 6], 1, Concat, [1]] # cat backbone P4
    32.   - [-1, 3, C2f, [512]] # 12
    33.  
    34.   - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
    35.   - [[-1, 4], 1, Concat, [1]] # cat backbone P3
    36.   - [-1, 3, C2f, [256]] # 15 (P3/8-small)
    37.  
    38.   - [-1, 1, Conv, [256, 3, 2]]
    39.   - [[-1, 12], 1, Concat, [1]] # cat head P4
    40.   - [-1, 3, C2f, [512]] # 18 (P4/16-medium)
    41.  
    42.   - [-1, 1, Conv, [512, 3, 2]]
    43.   - [[-1, 9], 1, Concat, [1]] # cat head P5
    44.   - [-1, 3, C2f, [1024]] # 21 (P5/32-large)
    45.  
    46.   - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)

            主要需要修改的地方为nc,也就是num_class,此处我的输入影像中只有数字0-9再加一个小数点,共11个类别,所以nc=11

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

    🍋2.3加载预训练模型

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

     

    🍋2.4数据组织 


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

    1. # 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, ..]
    2. path: ../datasets/coco8  # dataset root dir
    3. train: images/train  # train images (relative to 'path') 4 images
    4. val: images/val  # val images (relative to 'path') 4 images
    5. test:  # test images (optional)
    6.  
    7. # Classes (80 COCO classes)
    8. names:
    9.   0: person
    10.   1: bicycle
    11.   2: car
    12.   # ...
    13.   77: teddy bear
    14.   78: hair drier
    15.   79: toothbrush


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

    1. path: /home/datasets/shuziyibiao_dataset_number  # dataset root dir
    2. train: images/train  # train images (relative to 'path') 4 images
    3. val: images/train  # val images (relative to 'path') 4 images
    4. test: # test images (optional)
    5.  
    6. names:
    7. 0: 0
    8. 1: 1
    9. 2: 2
    10. 3: 3
    11. 4: 4
    12. 5: 5
    13. 6: 6
    14. 7: 7
    15. 8: 8
    16. 9: 9
    17. 10: point



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

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

    1. from ultralytics import YOLO
    2. # Load a model
    3. model = YOLO('yolov8n.yaml') # build a new model from YAML
    4. model = YOLO('yolov8n.pt') # load a pretrained model (recommended for training)
    5. model = YOLO('yolov8n.yaml').load('yolov8n.pt') # build from YAML and transfer weights
    6. # Train the model
    7. results = model.train(data='shuziyibiao_number.yaml', epochs=100, imgsz=640)

            训练完成后的结果如下:

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

            贴上我的训练结果,精度基本都在95%以上。

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

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

            推理代码如下:

    1. from ultralytics import YOLO
    2. from PIL import Image
    3. import os
    4. model = YOLO('./数字仪表识别weights/weights/best.pt') # load a custom model
    5. path = '/home/数字仪表/dataset/test/'
    6. img_list = os.listdir(path)
    7. for img_path in img_list:
    8. im1 = Image.open(os.path.join(path,img_path))
    9. results = model.predict(source=im1, save=True,save_txt=True)

            推理得到的结果包含可视化jpg结果和txt结果,其中txt结果存放在labels文件夹里。

            可视化结果如下:

            txt结果如下:

     快速通道

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

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

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

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

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

  • 相关阅读:
    【深度学习入门】PyTorch基础
    Flink1.15源码阅读——用户代码构建jobgraph
    基于Python的汉语分词系统
    【Windows】解除端口占用
    聚焦酷开科技智能大屏OS Coolita,打造智能推荐服务能力全景
    【机器学习】随机森林(Random Forest,简称 RF):预测光伏电站功率 || 缺失数据处理 || 重复行处理...
    【python】带你采集基金股票数据并作可视化操作
    Flink CDC
    图解LeetCode——662. 二叉树最大宽度(难度:中等)
    数仓建模—埋点设计与管理
  • 原文地址:https://blog.csdn.net/qq_38308388/article/details/140346906