基于 YOLOv10 实现工业缺陷检测实战教程

发布时间:2026/5/20 7:01:16

基于 YOLOv10 实现工业缺陷检测实战教程 在工业质检场景中缺陷检测是保障产品质量的核心环节。传统的人工检测方式效率低、易出错而基于 YOLOYou Only Look Once系列的目标检测算法凭借实时性和高精度的优势成为工业缺陷检测的理想选择。本文将详细介绍如何基于 YOLOv10 实现工业产品缺陷检测涵盖环境准备、数据集配置、模型训练和推理部署全流程。一、YOLOv10 简介YOLOv10 是 2024 年推出的新一代 YOLO 系列算法在保持轻量化的同时进一步提升了检测精度和速度。相比前代版本YOLOv10 优化了网络结构如引入 SCDown、PSA、C2fCIB 等模块并改进了检测头设计能够更好地适配工业场景下小目标、多缺陷类型的检测需求。二、环境准备1. 核心依赖安装从github中下载yolov10模型新建虚拟环境requirements.txt中有需要下载的库。YOLOv10 的开发基于 Ultralytics 库需提前安装相关依赖torch2.0.1 torchvision0.15.2 onnx1.14.0 onnxruntime1.15.1 pycocotools2.0.7 PyYAML6.0.1 scipy1.13.0 onnxslim0.1.31 onnxruntime-gpu1.18.0 gradio4.31.5 opencv-python4.9.0.80 psutil5.9.8 py-cpuinfo9.0.0 huggingface-hub0.23.2 safetensors0.4.3 # 安装ultralytics包含YOLOv10实现 pip install ultralytics2. 目录结构说明本次实战的目录结构如下以工业零件缺陷检测为例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: 32. 模型配置yolov10n.yamlYOLOv10n 是轻量化版本适合快速部署和测试核心配置说明# 核心参数 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(rD:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\yolov10n.yaml) # 开始训练 model.train( datarD:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\mydata.yaml, lr00.001, # 初始学习率 epochs3, # 训练轮数测试用实际建议50-100 batch4 # 批次大小根据显卡显存调整 )2. 训练关键参数说明lr0初始学习率默认 0.01小数据集建议调低至 0.001epochs训练轮数需根据数据集大小调整工业数据集建议 50batch批次大小显存不足时可设为 2 或 1训练完成后模型会自动保存至runs/detect/train/weights/best.pt最优权重。五、推理预测训练完成后可通过predict.py实现单张图像、批量图像、视频的缺陷检测。1. 单张图像检测import cv2 from ultralytics import YOLO # 加载训练好的模型 model YOLO(rD:\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(rD:\Program Files (x86)\MVS\Development\Samples\Python\shiyan\yolov10\dataset_part\images\train\c41.bmp)六、结果分析与优化1. 结果解读检测框坐标xyxy表示缺陷在图像中的位置可用于定位缺陷区域置信度conf0-1 之间数值越高表示检测结果越可靠类别 IDcls对应 mydata.yaml 中的类别0 合格1 外部破损2 固定板破损。2. 优化方向数据集增加样本数量、扩充数据增强如旋转、缩放、噪声训练参数调高 epochs如 50、调整学习率如使用余弦退火、增大 batch模型更换更大的 YOLOv10 模型如 yolov10s/yolov10m、调整锚框尺寸后处理设置置信度阈值如 conf0.5过滤低置信度检测结果。七、总结本文基于 YOLOv10 实现了工业零件缺陷检测的全流程从环境配置、数据集搭建到模型训练和推理完整展示了 YOLOv10 在工业质检场景的应用。YOLOv10 兼具速度和精度优势通过简单的代码即可快速落地适合工业场景的实时缺陷检测需求。后续可进一步优化方向部署到边缘设备如 NVIDIA Jetson、集成到工业相机采集系统、搭建可视化检测平台等实现端到端的工业质检解决方案。

相关新闻