基于yolov8的铝片缺陷检测系统 数据集共1400张,按照8:2划分训练集和验证集 包含四类缺陷:zhen_kong,ca_shang,zang_wu,zhe_zhou 有xml标签和txt标签,也可以用于yolo训练 yolov8训练完成,pyqt5设计了缺陷检测界面 注:电子资料 不退不换

最近,我完成了一个基于 YOLOv8 的铝片缺陷检测系统,今天就来和大家分享一下这个项目的开发过程,包括数据集处理、模型训练以及界面设计等方面。

数据集准备

首先是数据集,这次使用的数据集包含 1400 张铝片图片,里面涵盖了四类缺陷,分别是“zhenkong”(真空缺陷)、“cashang”(擦伤)、“zangwu”(污渍)和“zhezhou”(褶皱)。有了数据,我们得把它划分成训练集和验证集,按照 8:2 的比例来划分是比较常见的做法,这样既能保证模型有足够的数据进行学习,又能有一部分数据来验证模型的泛化能力。

下面是划分数据集的 Python 代码:

import os
import random
from shutil import copyfile

# 数据集总目录
data_dir = 'path/to/your/dataset'
# 训练集和验证集保存目录
train_dir = 'path/to/train'
val_dir = 'path/to/val'

# 创建训练集和验证集目录
if not os.path.exists(train_dir):
    os.makedirs(train_dir)
if not os.path.exists(val_dir):
    os.makedirs(val_dir)

# 获取所有图片文件
image_files = [f for f in os.listdir(data_dir) if f.endswith('.jpg') or f.endswith('.png')]
# 打乱图片文件列表
random.shuffle(image_files)

# 计算训练集和验证集的数量
train_size = int(len(image_files) * 0.8)
train_images = image_files[:train_size]
val_images = image_files[train_size:]

# 复制训练集图片和对应的标签文件
for image in train_images:
    image_path = os.path.join(data_dir, image)
    label_path = os.path.join(data_dir, image.replace('.jpg', '.txt').replace('.png', '.txt'))
    copyfile(image_path, os.path.join(train_dir, image))
    copyfile(label_path, os.path.join(train_dir, image.replace('.jpg', '.txt').replace('.png', '.txt')))

# 复制验证集图片和对应的标签文件
for image in val_images:
    image_path = os.path.join(data_dir, image)
    label_path = os.path.join(data_dir, image.replace('.jpg', '.txt').replace('.png', '.txt'))
    copyfile(image_path, os.path.join(val_dir, image))
    copyfile(label_path, os.path.join(val_dir, image.replace('.jpg', '.txt').replace('.png', '.txt')))

代码分析:

  • 首先,我们定义了数据集的总目录、训练集和验证集的保存目录。然后创建这两个目录,确保它们存在。
  • 接着,我们获取所有的图片文件,并打乱它们的顺序。这样做是为了让训练集和验证集的数据更具随机性,避免模型学习到数据的顺序特征。
  • 计算出训练集和验证集的数量后,我们将图片文件列表分成两部分。
  • 最后,使用 copyfile 函数将图片和对应的标签文件复制到训练集和验证集目录中。

这个数据集还有一个好处,它同时提供了 XML 标签和 TXT 标签,而 YOLOv8 可以直接使用 TXT 标签进行训练,这就省去了很多数据转换的麻烦。

YOLOv8 模型训练

有了数据集,接下来就是训练 YOLOv8 模型了。YOLOv8 是一个非常强大的目标检测模型,它在速度和精度上都有很好的表现。

基于yolov8的铝片缺陷检测系统 数据集共1400张,按照8:2划分训练集和验证集 包含四类缺陷:zhen_kong,ca_shang,zang_wu,zhe_zhou 有xml标签和txt标签,也可以用于yolo训练 yolov8训练完成,pyqt5设计了缺陷检测界面 注:电子资料 不退不换

以下是使用 YOLOv8 进行训练的简单代码:

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n.pt')

# 训练模型
results = model.train(
    data='path/to/data.yaml',
    epochs=100,
    imgsz=640
)

代码分析:

  • 首先,我们从 ultralytics 库中导入 YOLO 类,并加载预训练的 YOLOv8n 模型。预训练模型可以帮助我们在训练时更快地收敛,节省训练时间。
  • 然后,调用 train 方法开始训练模型。data 参数指定了数据集的配置文件路径,这个文件里包含了训练集和验证集的路径、类别名称等信息。epochs 参数表示训练的轮数,imgsz 参数表示输入图片的大小。

PyQt5 设计缺陷检测界面

模型训练完成后,为了方便使用,我们使用 PyQt5 设计了一个缺陷检测界面。

以下是一个简单的 PyQt5 界面代码示例:

import sys
import cv2
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton
from PyQt5.QtGui import QPixmap, QImage
from ultralytics import YOLO

# 加载训练好的模型
model = YOLO('path/to/best.pt')

class DefectDetectionApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('铝片缺陷检测系统')
        self.setGeometry(100, 100, 800, 600)

        # 创建标签用于显示图片
        self.image_label = QLabel(self)
        self.image_label.setScaledContents(True)

        # 创建按钮用于检测
        self.detect_button = QPushButton('检测缺陷', self)
        self.detect_button.clicked.connect(self.detect_defects)

        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.image_label)
        layout.addWidget(self.detect_button)
        self.setLayout(layout)

    def detect_defects(self):
        # 读取图片
        image = cv2.imread('path/to/test_image.jpg')
        # 进行缺陷检测
        results = model(image)
        # 获取检测结果图片
        result_image = results[0].plot()
        # 将 OpenCV 图片转换为 QImage
        height, width, channel = result_image.shape
        bytes_per_line = 3 * width
        q_img = QImage(result_image.data, width, height, bytes_per_line, QImage.Format_RGB888).rgbSwapped()
        pixmap = QPixmap.fromImage(q_img)
        # 在标签上显示图片
        self.image_label.setPixmap(pixmap)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DefectDetectionApp()
    window.show()
    sys.exit(app.exec_())

代码分析:

  • 首先,我们加载训练好的 YOLOv8 模型。
  • 然后创建一个 DefectDetectionApp 类,继承自 QWidget。在 initUI 方法中,我们设置了窗口的标题和大小,创建了一个用于显示图片的标签和一个用于触发检测的按钮,并将它们添加到布局中。
  • detect_defects 方法是按钮的点击事件处理函数。在这个方法中,我们读取一张测试图片,使用训练好的模型进行缺陷检测,获取检测结果图片,将其转换为 QImage 格式,再转换为 QPixmap 格式,最后在标签上显示出来。

注意事项

最后要提醒一下,这个项目的相关电子资料是不退不换的哦。

通过以上步骤,我们就完成了一个基于 YOLOv8 的铝片缺陷检测系统,从数据集处理到模型训练,再到界面设计,整个流程都走了一遍。希望这篇分享能对大家有所帮助。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐