在工业质检场景中,缺陷检测是保障产品质量的核心环节。传统的人工检测方式效率低、易出错,而基于 YOLO(You Only Look Once)系列的目标检测算法凭借实时性和高精度的优势,成为工业缺陷检测的理想选择。本文将详细介绍如何基于 YOLOv10 实现工业产品缺陷检测,涵盖环境准备、数据集配置、模型训练和推理部署全流程。

一、YOLOv10 简介

YOLOv10 是 2024 年推出的新一代 YOLO 系列算法,在保持轻量化的同时进一步提升了检测精度和速度。相比前代版本,YOLOv10 优化了网络结构(如引入 SCDown、PSA、C2fCIB 等模块),并改进了检测头设计,能够更好地适配工业场景下小目标、多缺陷类型的检测需求。

二、环境准备

1. 核心依赖安装

从github中下载yolov10模型,新建虚拟环境,requirements.txt中有需要下载的库。YOLOv10 的开发基于 Ultralytics 库,需提前安装相关依赖:

torch==2.0.1
torchvision==0.15.2
onnx==1.14.0
onnxruntime==1.15.1
pycocotools==2.0.7
PyYAML==6.0.1
scipy==1.13.0
onnxslim==0.1.31
onnxruntime-gpu==1.18.0
gradio==4.31.5
opencv-python==4.9.0.80
psutil==5.9.8
py-cpuinfo==9.0.0
huggingface-hub==0.23.2
safetensors==0.4.3
# 安装ultralytics(包含YOLOv10实现)
pip install ultralytics

2. 目录结构说明

本次实战的目录结构如下(以工业零件缺陷检测为例):

dataset_part/
├── images/          # 图像数据集
│   ├── train/       # 训练集图像
│   ├── val/         # 验证集图像
│   └── test/        # 测试集图像
├── labels/          # 标注文件(YOLO格式,与图像一一对应)
├── yolov10n.yaml    # YOLOv10n模型配置文件
├── mydata.yaml      # 数据集配置文件
├── train.py         # 模型训练脚本
└── predict.py       # 推理预测脚本

三、数据集与模型配置

1. 数据集配置(mydata.yaml)

该文件用于指定数据集路径、类别数和类别名称,本次检测包含 3 类缺陷:

# 数据集根路径
path: D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part
# 训练/验证/测试集图像路径
train: D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\images\train
val: D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\images\val
test: D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\images\test

# 类别名称(0:合格件 1:外部破损 2:固定板破损)
names:
  0: Pass
  1: Outer broken
  2: Fixed plate broken
# 类别总数
nc: 3

2. 模型配置(yolov10n.yaml)

YOLOv10n 是轻量化版本,适合快速部署和测试,核心配置说明:

# 核心参数
nc: 80  # 训练时会被mydata.yaml的nc覆盖,此处为默认值
scales: # 模型缩放参数(n代表小模型)
  n: [0.33, 0.25, 1024] 

# 骨干网络(Backbone):特征提取,包含Conv、C2f、SCDown、SPPF、PSA等模块
backbone:
  - [-1, 1, Conv, [64, 3, 2]] # 卷积层,下采样
  - [-1, 1, Conv, [128, 3, 2]]
  - [-1, 3, C2f, [128, True]] # 轻量化特征融合模块
  - [-1, 1, SCDown, [512, 3, 2]] # 空间通道下采样
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, SCDown, [1024, 3, 2]]
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, SPPF, [1024, 5]] # 空间金字塔池化
  - [-1, 1, PSA, [1024]] # 像素注意力模块

# 检测头(Head):多尺度特征融合+检测
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]] # 上采样
  - [[-1, 6], 1, Concat, [1]] # 特征拼接
  - [-1, 3, C2f, [512]]
  # 省略部分重复结构...
  - [[16, 19, 22], 1, v10Detect, [nc]] # YOLOv10检测头

四、模型训练

1. 训练脚本(train.py)

基于 Ultralytics 的 YOLO 接口,训练代码极简:

from ultralytics import YOLO

if __name__ == '__main__':
    # 加载YOLOv10n配置文件
    model = YOLO(r'D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\yolov10n.yaml')
    # 开始训练
    model.train(
        data=r'D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\mydata.yaml',
        lr0=0.001,  # 初始学习率
        epochs=3,   # 训练轮数(测试用,实际建议50-100)
        batch=4     # 批次大小(根据显卡显存调整)
    )

2. 训练关键参数说明

  • lr0:初始学习率,默认 0.01,小数据集建议调低至 0.001;
  • epochs:训练轮数,需根据数据集大小调整(工业数据集建议 50+);
  • batch:批次大小,显存不足时可设为 2 或 1;
  • 训练完成后,模型会自动保存至runs/detect/train/weights/best.pt(最优权重)。

五、推理预测

训练完成后,可通过predict.py实现单张图像、批量图像、视频的缺陷检测。

1. 单张图像检测

import cv2
from ultralytics import YOLO

# 加载训练好的模型
model = YOLO(r'D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\best.pt')

def image_load(image_path):
    # 读取图像
    frame = cv2.imread(image_path)
    # 模型推理
    res = model(frame)
    # 绘制检测框
    ann = res[0].plot()
    # 显示结果
    cv2.imshow("yolo10_image", ann)
    cv2.waitKey(0)
    # 解析检测结果(坐标、置信度、类别)
    boxes = res[0].boxes
    if boxes is not None:
        xyxy = boxes.xyxy.cpu().numpy()  # 检测框坐标(x1,y1,x2,y2)
        conf = boxes.conf.cpu().numpy()  # 置信度
        cls = boxes.cls.cpu().numpy()    # 类别ID
        print("检测框坐标:", xyxy)
        print("置信度:", conf)
        print("类别ID:", cls)

if __name__ == '__main__':
    # 测试单张图像
    image_load(r'D:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\images\train\c41.bmp')

六、结果分析与优化

1. 结果解读

  • 检测框坐标(xyxy):表示缺陷在图像中的位置,可用于定位缺陷区域;
  • 置信度(conf):0-1 之间,数值越高表示检测结果越可靠;
  • 类别 ID(cls):对应 mydata.yaml 中的类别(0 = 合格,1 = 外部破损,2 = 固定板破损)。

2. 优化方向

  • 数据集:增加样本数量、扩充数据增强(如旋转、缩放、噪声);
  • 训练参数:调高 epochs(如 50)、调整学习率(如使用余弦退火)、增大 batch;
  • 模型:更换更大的 YOLOv10 模型(如 yolov10s/yolov10m)、调整锚框尺寸;
  • 后处理:设置置信度阈值(如 conf>0.5)过滤低置信度检测结果。

七、总结

本文基于 YOLOv10 实现了工业零件缺陷检测的全流程,从环境配置、数据集搭建到模型训练和推理,完整展示了 YOLOv10 在工业质检场景的应用。YOLOv10 兼具速度和精度优势,通过简单的代码即可快速落地,适合工业场景的实时缺陷检测需求。

后续可进一步优化方向:部署到边缘设备(如 NVIDIA Jetson)、集成到工业相机采集系统、搭建可视化检测平台等,实现端到端的工业质检解决方案。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐