深度学习yolov8模型 目标检测算法处理训练工业类电焊缺陷数据集 识别检测焊接焊缝缺陷检测数据集 建立基于深度学习的yolov8焊接焊点焊缝缺陷检测

深度学习yolov8模型 处理训练工业类电焊缺陷数据集 识别检测焊接焊缝缺陷检测数据集 建立基于深度学习的yolov8焊接焊点焊缝缺陷检测
文章目录

            🔧 焊接焊缝缺陷检测数据集分类( 5 类)
            一、环境准备
            二、数据组织
            三、创建 `data.yaml` 文件
            四、模型训练
            五、模型验证与性能评估
            六、单图推理 + 结果可视化
            七、批量推理并保存结果
            一、加载训练好的模型
            二、推理与结果可视化
                单张图片推理
                批量图片推理并保存结果
            三、构建用户界面
            四、Web应用部署


以下文字及代码仅供参考。

焊接焊缝缺陷检测数据集

1400 5类 缺陷
相邻缺陷:凝固的小液滴,局部熔化
完整性缺陷:异物,小孔,焊穿,凸起,焊接产生废料
几何缺陷:凹陷,熔合不够
处理后缺陷:加工后损伤,加工后留下异物

未焊接好缺陷:未焊透,未熔合大面积
🔧 焊接焊缝缺陷检测数据集分类( 5 类)
主类别编号    主类别名称    子类缺陷类型    示例说明
1    相邻缺陷    - 凝固的小液滴
- 局部熔化    焊接过程中飞溅、局部过热造成的不规则附着或熔融状态
2    完整性缺陷    - 异物
- 小孔
- 焊穿
- 凸起
- 焊接产生废料    表示焊缝结构不完整,存在空洞、杂质或多余材料
3    几何缺陷    - 凹陷
- 熔合不够    形状尺寸异常,如焊缝凹陷、两侧未充分融合
4    处理后缺陷    - 加工后损伤
- 加工后留下异物    焊后处理不当导致的新缺陷或残留物
5    未焊接好缺陷    - 未焊透
- 未熔合大面积    焊接未完成,母材未完全融合,影响强度和密封性

yolo格式txt标签,yolo

YOLOv8训练焊接焊缝缺陷检测数据集,基于训练好的权重进行推理。从环境准备、数据组织、模型训练到推理的完整流程。
一、环境准备

首先确保安装了必要的Python包:

pip install ultralytics opencv-python matplotlib numpy

bash

    1

二、数据组织

确保你的数据集按照以下结构组织:

welding_defect_dataset/
├── images/
│   ├── train/
│   └── val/
├── labels/
│   ├── train/
│   └── val/
└── data.yaml

    images/train/ 和 labels/train/ 分别存放训练图像及其对应的标签文件。
    images/val/ 和 labels/val/ 分别存放验证图像及其对应的标签文件。

每个图像都需要有一个对应的.txt文件,格式为:class_id center_x center_y width height,所有坐标归一化到[0,1]。
三、创建 data.yaml 文件

在项目根目录下创建 data.yaml 文件,内容如下:

train: ./welding_defect_dataset/images/train
val: ./welding_defect_dataset/images/val

nc: 5
names: ['Adjacent_Defect', 'Integrity_Defect', 'Geometric_Defect', 'Post_Process_Defect', 'Unwelded_Defect']

yaml

四、模型训练

使用YOLOv8进行模型训练的代码示例如下:

from ultralytics import YOLO

# 加载YOLOv8模型架构配置或预训练模型
model = YOLO('yolov8s.yaml')  # 根据需求选择不同大小的模型如'n', 'm', 'l', 'x'

# 开始训练
results = model.train(
    data='./welding_defect_dataset/data.yaml',
    epochs=100,  # 可以根据需要调整epoch数
    imgsz=640,
    batch=16,
    name='welding_defect_train',
    project='runs/welding_defect',
    exist_ok=True,
    device=0 if torch.cuda.is_available() else 'cpu'
)

# 保存最佳权重
best_weights_path = model.save('./welding_defect_best.pt')
print(f"Best weights saved to {best_weights_path}")

python
运行

五、模型验证与性能评估

训练完成后,可以使用以下代码来评估模型在验证集上的表现:

from ultralytics import YOLO

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

# 在验证集上评估
metrics = model.val()

# 打印关键指标
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"Recall: {metrics.box.recall.mean():.4f}")
print(f"Precision: {metrics.box.precision.mean():.4f}")

python
运行

六、单图推理 + 结果可视化

下面是如何对单张图片进行推理并显示结果:

from ultralytics import YOLO
import cv2

def detect_and_show(image_path):
    model = YOLO('./welding_defect_best.pt')

    results = model.predict(source=image_path, conf=0.25)
    
    for result in results:
        im_array = result.plot()
        im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)
        cv2.imshow("Detection Result", im)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

# 测试一张图片
detect_and_show('path/to/test_image.jpg')

python
运行

    1

七、批量推理并保存结果

如果需要对一批图片进行推理并将结果保存:

from ultralytics import YOLO

model = YOLO('./welding_defect_best.pt')

# 批量处理指定文件夹下的图片,并保存结果
model.predict(
    source='./welding_defect_dataset/images/val',
    save=True,
    project='runs/welding_defect/predictions',
    name='val_results',
    conf=0.25
)

python
运行

    1
   

一、加载训练好的模型

首先,已经完成了模型的训练,并保存了最佳权重(例如 welding_defect_best.pt)。接下来同学,使用这些权重来初始化模型并进行推理。

from ultralytics import YOLO

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

python
运行

二、推理与结果可视化
单张图片推理

下面是如何对单张图片进行推理并显示结果:

import cv2

def detect_and_show(image_path):
    # 使用模型进行预测
    results = model.predict(source=image_path, conf=0.25)
    
    for result in results:
        # 将结果绘制成图像
        im_array = result.plot()  # 绘制边界框和标签
        im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)  # 转换颜色空间以便于显示
        cv2.imshow("Detection Result", im)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

# 测试一张图片
detect_and_show('path/to/test_image.jpg')

python
运行

 

批量图片推理并保存结果

想要批量处理图片并将结果保存下来:

# 批量处理指定文件夹下的图片,并保存结果
model.predict(
    source='path/to/images/folder',
    save=True,
    project='runs/detect/predictions',  # 结果保存路径
    name='batch_results',
    conf=0.25
)

python
运行

   
  

三、构建用户界面

为了使系统更加用户友好,可以考虑构建一个简单的图形用户界面(GUI),让用户能够轻松上传图片或视频进行检测。这里以PyQt5为例:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton, QFileDialog
from PyQt5.QtGui import QPixmap
import cv2
from PyQt5.QtCore import Qt

class WeldingDefectDetectionApp(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("Welding Defect Detection System")
        self.setGeometry(100, 100, 800, 600)

        layout = QVBoxLayout()
        
        self.image_label = QLabel(self)
        layout.addWidget(self.image_label)

        self.upload_button = QPushButton("Upload Image", self)
        self.upload_button.clicked.connect(self.upload_image)
        layout.addWidget(self.upload_button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def upload_image(self):
        options = QFileDialog.Options()
        file_name, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "",
                                                    "Images (*.png *.xpm *.jpg)", options=options)
        if file_name:
            self.detect_and_display(file_name)

    def detect_and_display(self, image_path):
        results = model.predict(source=image_path, conf=0.25)
        for result in results:
            im_array = result.plot()
            im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)
            height, width, channel = im.shape
            bytes_per_line = 3 * width
            q_img = QPixmap.fromImage(QImage(im.data, width, height, bytes_per_line, QImage.Format_RGB888).rgbSwapped())
            self.image_label.setPixmap(q_img.scaled(self.image_label.size(), aspectRatioMode=Qt.KeepAspectRatio))

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

python
运行

四、Web应用部署

这个系统作为Web服务提供给用户,可以使用Flask框架来快速搭建一个API接口。

from flask import Flask, request, jsonify
from ultralytics import YOLO
import cv2
import numpy as np
from PIL import Image
import io
import base64

app = Flask(__name__)
model = YOLO('path/to/welding_defect_best.pt')

@app.route('/predict', methods=['POST'])
def predict():
    file = request.files['image']
    img_bytes = file.read()
    img = Image.open(io.BytesIO(img_bytes))
    
    results = model.predict(source=img, conf=0.25)
    for result in results:
        im_array = result.plot()
        im = Image.fromarray(cv2.cvtColor(im_array, cv2.COLOR_BGR2RGB))
        
        img_byte_arr = io.BytesIO()
        im.save(img_byte_arr, format='PNG')
        img_byte_arr = img_byte_arr.getvalue()
        
        return jsonify({"status": "success", "result": base64.b64encode(img_byte_arr).decode('utf-8')}), 200

if __name__ == '__main__':
    app.run(debug=True)

python
运行

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值