基于 YOLOv10 实现工业缺陷检测实战教程
在工业质检场景中,缺陷检测是保障产品质量的核心环节。传统的人工检测方式效率低、易出错,而基于 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)、集成到工业相机采集系统、搭建可视化检测平台等,实现端到端的工业质检解决方案。
更多推荐







所有评论(0)