【工业机器视觉】基于深度学习的仪表盘识读(读数识别)(3)-CSDN博客
训练与预测
Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO(You Only Look Once)架构的目标检测算法。YOLO是一种实时目标检测系统,它能一次性预测图像中所有对象的边界框和类别概率,因此在速度上有很大的优势。
Ultralytics是YOLOv3、YOLOv5等版本的维护者,并且推出了YOLOv8等一系列改进版本。这些模型通常具有更高的精度和更快的速度,同时保持了YOLO系列简单易用的特点。Ultralytics提供的YOLO实现通常是开源的,可以在GitHub等平台上找到,允许研究者和开发者使用、修改和贡献代码。
此外,Ultralytics还提供了训练、评估和部署YOLO模型的工具和文档,使得用户能够根据自己的数据集定制YOLO模型,用于各种计算机视觉任务,如物体识别、跟踪等。
Home - Ultralytics YOLO Docs
本项目基于Ultralytics YOLOv8模型进行训练和预测。
下载项目
前往github:github.com
进入ultralytics目录,目录结构:
cfg:网络模型架构配置文件
my_datas:自定义数据集
weights:权重文件
需要安装的包:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install ultralytics==8.0.143
(如果要使用最新版的ultralytics,则不需要带版本号,最新版的已更新到YOLO11)
项目配置
为了快速上手,下面只介绍核心流程。在自定义数据集目录下,创建自己的项目(项目名称自定义即可),然后将数据准备好,最后创建一个data.yaml的文件,参考如下目录结构和配置:
data.yaml文件配置:
train、val:自定义数据集的训练和验证数据图片目录
nc:目标检测类别数量
names:目标检测类别
训练
在ultralytics目录下创建train.py脚本,如下:
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('cfg/models/v8/yolov8s.yaml').load('yolov8s.pt')
model.train(data='my_datas/detect-pointer/data.yaml', epochs=300, imgsz=640, task='detect', batch=64, device=0, amp=True, patience=10, close_mosaic=30)
加载网络模型和权重,本地没有权重文件时,会自动下载。更详细的训练参数请参考cfg目录下的default.yaml文件。
运行脚本开始训练,训练开始后,会在runs/detect目录下生成训练过程数据:
预测
创建predict.py脚本,与train.py同目录。
from ultralytics import YOLO
import cv2
if __name__ == '__main__':
img_path = 'assets/meter-pointer1.jpg'
model = YOLO('runs/detect/train/weights/best.pt')
img = cv2.imread(img_path)
results = model.predict(img, imgsz=640, show=True, show_labels=True, show_conf=True, device=0, conf=0.8)
cv2.waitKey(0)
cv2.destroyAllWindows()
img_path:指定需要预测的图片路径
YOLO(...):加载训练好的模型
predict:预测
预测效果
指针目标检测:
最低位X0.001由目标检测直接分类得出结果,高位只需要检测到即可,后面需要结合梅花针分割模型,计算角度,映射读数。最后再通过修正算法修正误差,得到最终结果。
p2表示最低位读数是2,也就是0.002
指针区域梅花针分割:
circle_area:刻度盘
pointer:梅花针区域
字轮目标检测:
d10表示读数为0,是由0到1的过渡,同时也需要结合最高位指针读数X0.1的值,来进行修正
至此,我们已成功达成了本项目的第一阶段目标:实现了指针区域的目标检测与梅花针的精准分割,以及完成了字轮数字的自动识别任务,并且获得了预期的成果。
接下来的步骤将是开发上位机软件和应用相应的模型,通过集成并优化修正算法,以最终实现表盘读数的准确解析与输出。这一过程不仅将提升数据读取的自动化水平,也将显著增强系统的整体性能与可靠性。