ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

工业轴承缺陷检测:开箱即用YOLO数据集与全流程实战指南

工业轴承缺陷检测:开箱即用YOLO数据集与全流程实战指南 简介目标检测是计算机视觉的核心任务之一旨在识别图像中特定物体的位置与类别。其主流实现原理依赖于深度卷积神经网络通过回归或锚框机制预测边界框坐标与类别概率。这项技术在工业自动化领域具有极高的技术价值是实现智能质检、提升生产效率的关键。尤其在工业外观缺陷检测场景中目标检测模型能够替代人眼对产品表面的划痕、锈蚀、压痕、缺损等瑕疵进行快速、精准的定位与分类。本文聚焦于工业质检中的轴承缺陷检测针对该领域高质量、规范化数据集稀缺的痛点提供了一个包含1000多张图像、4种缺陷类别且已科学划分的“开箱即用”数据集。该数据集严格遵循YOLO格式并配有详细的data.yaml配置文件旨在帮助研究者和工程师绕过繁琐的数据工程环节快速启动YOLOv5、YOLOv8等模型的训练与验证加速算法从原型到部署的进程。1. 项目背景与数据集价值最近在做一个工业质检的项目客户那边有几条轴承生产线需要实时检测轴承外观的缺陷。一开始我们想得很简单觉得网上找个开源模型比如YOLOv5或者YOLOv8拿点数据训一下就能上线。结果真干起来才发现最大的拦路虎根本不是模型而是数据。轴承缺陷检测这个事听起来常见但真要找一个标注好、类别清晰、划分规范、能直接拿来训练的数据集简直是大海捞针。要么是数据量太少就几十张图模型根本学不到东西要么是标注质量堪忧框画得歪歪扭扭类别还标错了最头疼的是数据划分很多数据集就给你一堆图片和一个标注文件训练集、验证集、测试集得自己分分不好直接导致模型评估失真上线就翻车。所以当我把这个包含了1000多张轴承图片、4种缺陷类别、并且已经划分好训练集、验证集、测试集连data.yaml配置文件都准备好的数据集整理出来时感觉像是给后来的同行们铺了条路。这个数据集是“开箱即用”的你下载下来按照标准的YOLO格式解压配置一下路径马上就能开始训练YOLOv5、YOLOv8甚至最新的YOLOv11模型省去了最耗时的数据收集、清洗、标注和划分环节。对于想快速入门工业视觉缺陷检测或者需要用一个高质量基准数据集来验证自己算法改进效果的研究者和工程师来说这个数据集的价值是实实在在的。轴承作为机械设备的核心零部件其外观缺陷如划痕、锈蚀、压痕、缺损直接关系到设备整体的运行安全与寿命。基于深度学习的目标检测技术尤其是YOLO系列这种兼顾速度与精度的模型已经成为自动化质检的主流方案。但这个方案要落地第一个里程碑就是搞定数据。这个数据集瞄准的就是这个痛点。2. 数据集深度剖析内容、结构与设计逻辑这个数据集不是随便拍一些照片、打几个标签就完事的。它的设计考虑了工业检测的实际需求和模型训练的科学性。下面我们来彻底拆解一下它的内容。2.1 数据内容与缺陷类别定义数据集总共包含1000多张高质量的轴承外观图像。这些图像是在接近真实产线环境的照明条件下采集的包含了轴承的不同角度、不同尺度以及部分复杂背景旨在模拟实际检测场景的多样性。所有图像都经过精细标注共定义了4种最常见的轴承外观缺陷类别。这4个类别的选择是基于对真实产线故障案例的统计分析涵盖了影响轴承性能和安全的主要外观问题划痕 (Scratch): 轴承表面出现的线性损伤通常由装配过程中的摩擦或异物引起。这是出现频率最高的缺陷之一。锈蚀 (Corrosion): 轴承金属表面因氧化而产生的斑点或片状腐蚀。在仓储或潮湿环境中容易发生。压痕 (Dent): 轴承套圈或滚动体表面因受到局部冲击而产生的凹陷。可能来源于搬运或安装不当。缺损 (Missing): 指轴承实体部分如保持架爪、密封圈的缺失或断裂。这是一种严重的缺陷。注意类别命名全部采用英文小写如scratch,corrosion这是为了与YOLO训练时标签文件的内容严格保持一致避免因大小写或中英文问题导致模型无法识别类别。每一张图片中的每一个缺陷实例都被一个紧密贴合其边缘的矩形框Bounding Box标注出来。标注的格式采用YOLO标准格式即归一化的中心点坐标x_center, y_center和宽高width, height。所有标注都经过至少一轮人工复核确保了框的位置准确性和类别正确性。2.2 数据集划分的科学性很多开源数据集只提供原始图片和标签把划分的难题留给了使用者。不合理的划分比如随机划分但同一轴承的不同角度图片被分到了训练和测试集会导致数据泄露让模型在测试集上得到虚高的性能从而对实际部署效果产生误判。这个数据集已经预先进行了科学的划分分为训练集 (train): 约占总数70%的图片和标签。用于模型学习缺陷的特征。验证集 (val): 约占总数15%的图片和标签。用于在训练过程中监控模型性能调整超参数以及进行早停Early Stopping判断。测试集 (test): 约占总数15%的图片和标签。在最终模型训练完成后用于一次性评估模型的泛化能力。测试集在训练过程中绝对不可见。划分时采用了分层抽样的策略确保训练集、验证集和测试集中4种缺陷类别的分布比例基本一致。同时通过检查图像来源确保了来自同一个轴承序列、不同拍摄角度的图片不会被分割到不同的集合中从根本上杜绝了数据泄露的可能性。这种严谨的划分使得基于此数据集评估的模型精度如mAP具有很高的可信度。2.3 核心文件data.yaml详解“开箱即用”的关键就在于这个data.yaml文件。YOLO系列模型在训练时都需要通过这样一个配置文件来知道数据在哪里、有哪些类别。# 数据集配置文件 data.yaml # 数据集根目录路径 (建议使用绝对路径) path: /home/user/datasets/bearing_defect # 根目录 train: images/train # 训练集图片相对路径 val: images/val # 验证集图片相对路径 test: images/test # 测试集图片相对路径 # 类别数量 nc: 4 # 类别名称列表必须与标签文件中的类别索引严格对应 names: 0: scratch 1: corrosion 2: dent 3: missing参数解读与配置要点path: 这是数据集的根目录。强烈建议在训练前将其修改为你本地环境中的绝对路径。相对路径在某些情况下可能会引发找不到文件的错误。train/val/test: 这些路径是相对于path的。按照本数据集的默认结构解压后你会得到一个bearing_defect文件夹里面包含images存放train/val/test子文件夹和labels存放对应的train/val/test子文件夹。因此配置文件中的路径设置是标准的。nc: 类别数这里是4。names: 类别名称字典。这里的索引0,1,2,3必须与每个标签文件.txt中每一行的第一个数字类别ID完全对应。例如标签文件中某行为0 0.5 0.5 0.2 0.3就表示这个框的类别是scratch。实操心得拿到数据集后第一件事就是用文本编辑器打开data.yaml把path改成你自己的实际路径。这是新手最容易忽略、导致训练报“images not found”错误的一步。3. 从数据集到模型YOLO训练全流程实操有了高质量的数据集下一步就是让它“跑”起来训练出我们自己的缺陷检测模型。这里以目前生态最成熟、应用最广泛的YOLOv8为例展示完整的训练流程。YOLOv5和YOLOv11的流程高度相似。3.1 环境搭建与依赖安装首先需要一个Python环境推荐3.8-3.10然后安装Ultralytics库这是YOLOv8的官方维护库。# 创建并激活一个虚拟环境可选但推荐 conda create -n yolo_defect python3.9 conda activate yolo_defect # 安装PyTorch请根据你的CUDA版本选择对应命令以PyTorch 2.0和CUDA 11.8为例 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装Ultralytics YOLOv8 pip install ultralytics注意如果网络环境导致直接安装PyTorch慢可以先去PyTorch官网查看对应的稳定版安装命令。Ultralytics库会附带安装一些依赖如果遇到权限问题可以尝试加上--user参数。验证安装是否成功python -c “from ultralytics import YOLO; print(YOLO(‘yolov8n.pt’))”3.2 数据准备与路径检查将下载的数据集压缩包解压到某个目录例如/home/user/datasets/。解压后的结构应该是这样的bearing_defect/ ├── data.yaml ├── images/ │ ├── train/ │ │ ├── 0001.jpg │ │ ├── 0002.jpg │ │ └── ... │ ├── val/ │ │ └── ... │ └── test/ │ └── ... └── labels/ ├── train/ │ ├── 0001.txt │ ├── 0002.txt │ └── ... ├── val/ │ └── ... └── test/ └── ...关键检查点打开data.yaml确认path指向/home/user/datasets/bearing_defect你的实际路径。随机打开几张images/train/下的图片确认可以正常显示。随机打开一个对应的labels/train/xxx.txt文件确认其内容格式为class_id x_center y_center width height且数值在0到1之间。3.3 模型训练与关键参数解析使用Ultralytics提供的命令行接口CLI进行训练是最简单的方式。在终端中进入你的工作目录执行以下命令yolo taskdetect modetrain modelyolov8n.pt data/home/user/datasets/bearing_defect/data.yaml epochs100 imgsz640 batch16 workers4这条命令启动了训练任务。我们来拆解一下关键参数及其背后的考量modelyolov8n.pt: 指定使用YOLOv8 Nano预训练模型作为起点。这是YOLOv8系列中最小的模型训练和推理速度快适合快速验证和部署在资源受限的设备上。如果你的硬件足够如有一张好的GPU可以尝试yolov8s.pt(小)、yolov8m.pt(中)、yolov8l.pt(大) 或yolov8x.pt(超大) 来追求更高的精度。data.../data.yaml: 指向我们修改好的数据集配置文件。epochs100: 训练轮数。对于1000多张图的数据集100个epoch通常是一个合理的起点可以让模型充分学习。可以通过观察验证集损失曲线来决定是否早停。imgsz640: 输入图像的尺寸。YOLOv8默认将图像缩放到640x640进行训练。增大尺寸如1280可能提升对小缺陷的检测能力但会显著增加显存消耗和训练时间。batch16: 批次大小。这个值需要根据你的GPU显存来调整。在显存允许的情况下较大的batch size有助于训练稳定。如果出现CUDA out of memory错误就降低这个值如8, 4。workers4: 数据加载的进程数。用于加速数据从硬盘到内存的读取。通常设置为CPU核心数左右。如果训练时发现数据加载是瓶颈GPU利用率低可以适当增加。训练开始后终端会实时打印损失loss和评估指标如mAP50。更重要的是Ultralytics会在项目根目录自动创建一个runs/detect/train/的文件夹里面保存了本次训练的所有成果和日志。3.4 训练过程监控与结果分析训练过程中最需要关注的是runs/detect/train/目录下生成的文件权重文件best.pt: 在验证集上表现最好的模型权重。last.pt: 最后一个epoch训练完的模型权重。通常使用best.pt进行后续的评估和部署。可视化结果results.png:这是最重要的监控图表。它包含了训练损失、验证损失、精度precision、召回率recall、mAP50、mAP50-95等一系列指标随epoch变化的曲线。你需要关注训练损失和验证损失是否都在平稳下降且没有出现验证损失上升的过拟合迹象。mAP50IoU阈值为0.5时的平均精度是否在持续提升并最终收敛到一个稳定值。confusion_matrix.png: 混淆矩阵直观展示模型在各个类别上的分类错误情况。理想情况是对角线正确预测数值高其他格子数值低。val_batchX_pred.jpg: 随机挑选的验证集批次图片的预测结果可视化。可以直观地看到模型在当前阶段检测得准不准框得对不对。args.yaml: 保存了本次训练所有的超参数方便复现实验。实操心得不要只盯着最后的mAP数字。多看看results.png中的曲线。如果训练早期验证损失就剧烈波动或上升可能是学习率lr0太高了。如果训练损失降得很慢可能是学习率太低或模型容量不足。本数据集规模适中使用yolov8n或yolov8s通常能取得不错的效果训练过程也比较平稳。4. 模型评估、验证与性能优化策略训练完成后我们需要客观地评估模型的真实性能并探索一些优化的可能性。4.1 使用测试集进行最终评估训练时模型从未见过测试集。现在我们用保存的最佳模型best.pt在测试集上做一次正式评估yolo taskdetect modeval modelruns/detect/train/weights/best.pt data/home/user/datasets/bearing_defect/data.yaml这个命令会加载best.pt模型并在data.yaml中指定的测试集test文件夹上运行评估。终端会输出详细的评估指标主要包括指标含义解读mAP50IoU阈值为0.5时的平均精度Mean Average Precision最核心的指标。综合了精度和召回率值越高越好。对于工业检测通常希望达到0.9以上。mAP50-95IoU阈值从0.5到0.95步长0.05的平均mAP更严格的指标衡量模型在不同IoU阈值下的平均性能。值通常会比mAP50低不少。Precision精度查准率模型预测出的框中有多少是真正的缺陷。高精度意味着误报少。Recall召回率查全率所有真实的缺陷框中有多少被模型找出来了。高召回意味着漏报少。评估完成后同样会在runs/detect/val/目录下生成新的可视化结果包括测试集上的预测样例图。仔细查看这些图片看看模型在哪些情况下会漏检如缺陷特别小、对比度低或误检如背景纹理被误认为划痕这对后续优化有直接指导意义。4.2 模型性能优化思路如果测试集上的mAP50未达到预期例如低于0.85可以考虑从以下几个方向进行优化数据层面数据增强Data AugmentationYOLOv8训练时默认已经启用了一系列增强如 mosaic, mixup, 色彩抖动翻转。你可以通过修改data.yaml或创建自定义的训练脚本尝试调整增强策略。对于工业缺陷检测谨慎使用随机裁剪和大幅度的几何变换因为这可能破坏缺陷的形态特征或产生不真实的缺陷背景组合。可以侧重使用色彩空间变换亮度、对比度、饱和度和添加噪声来模拟光照变化和传感器噪声。类别平衡查看训练集各个类别的样本数量。如果某个类别如“缺损”的图片特别少模型可能学不好。可以考虑对该类别的图片进行过采样或者在计算损失时使用类别权重。模型层面更换更大模型从yolov8n.pt切换到yolov8s.pt或yolov8m.pt。更大的模型拥有更多的参数和更强的特征提取能力通常能带来精度提升但代价是推理速度变慢。调整输入尺寸尝试将imgsz从640增加到1280。更大的输入尺寸意味着模型能看到更多的像素细节对小缺陷检测尤其有利但会平方级增加计算量。训练策略层面调整学习率学习率是训练中最重要的超参数之一。如果发现损失曲线震荡剧烈可以尝试减小lr0初始学习率。YOLOv8有自动调整学习率的功能但手动微调有时效果更好。延长训练时间如果损失曲线还在缓慢下降没有完全平缓可以增加epochs如从100到150或200。使用预训练权重本示例中我们使用了在COCO等大型通用数据集上预训练的权重.pt文件。这比从零开始训练收敛快得多效果也更好。务必使用预训练权重。踩坑实录我曾经为了提升“锈蚀”类别的精度盲目加大了随机旋转和裁剪的幅度结果模型性能反而下降了。后来分析发现增强后的图片中锈蚀斑点有时被裁掉了一半或者旋转后与背景形成了不真实的明暗关系误导了模型。对于工业缺陷数据增强的“度”需要非常小心地把握。5. 模型部署与应用推理指南模型训练评估满意后下一步就是把它用起来对新的轴承图片或视频流进行推理。5.1 使用训练好的模型进行图片推理最简单的方式是使用训练好的best.pt模型对单张图片、一个文件夹下的所有图片或视频进行预测。from ultralytics import YOLO # 1. 加载训练好的最佳模型 model YOLO(‘runs/detect/train/weights/best.pt’) # 2. 预测单张图片 results model(‘path/to/your/new_bearing_image.jpg’, saveTrue, conf0.5) # saveTrue: 保存带预测框的图片 # conf0.5: 置信度阈值只显示置信度大于0.5的预测框 # 3. 预测一个文件夹下的所有图片 results model(‘path/to/image/folder/’, saveTrue) # 4. 遍历结果获取详细信息 for result in results: boxes result.boxes # 检测框信息 if boxes is not None: for box in boxes: # 获取坐标、置信度、类别ID xyxy box.xyxy[0].tolist() # 左上右下坐标 [x1, y1, x2, y2] conf box.conf[0].item() # 置信度 cls_id int(box.cls[0].item()) # 类别ID cls_name model.names[cls_id] # 类别名称 print(f”Detected {cls_name} at {xyxy} with confidence {conf:.2f}”)5.2 模型导出为部署格式best.pt是PyTorch格式的权重在Python环境中使用很方便。但如果要部署到移动端、嵌入式设备如RV1106、RK3568或使用C接口调用就需要将其转换为更高效的格式。导出为ONNXONNX是一种开放的模型交换格式被众多推理引擎支持。yolo export modelruns/detect/train/weights/best.pt formatonnx执行后会在同一目录下生成best.onnx文件。你可以使用ONNX Runtime进行推理。导出为TensorRT如果你在NVIDIA GPU上部署TensorRT能提供极致的推理性能。yolo export modelruns/detect/train/weights/best.pt formatengine注意这需要你本地已安装TensorRT。导出的.engine文件是硬件相关的通常需要在部署的机器上生成。导出为OpenVINO用于Intel CPU或集成显卡的部署。yolo export modelruns/detect/train/weights/best.pt formatopenvino部署经验在资源受限的嵌入式设备上部署YOLO模型时yolov8n或专门为边缘设备设计的版本如YOLOv8-Pose的nano版本是首选。导出为ONNX后可能还需要使用工具如ONNX-Simplifier对模型图进行优化并利用设备厂商提供的SDK如RKNN Toolkit for Rockchip进行量化才能实现实时推理。5.3 构建简单的实时检测应用结合Python的Web框架如Flask和前端技术可以快速搭建一个轴承缺陷检测的演示系统。from flask import Flask, request, jsonify, send_file from ultralytics import YOLO import cv2 import numpy as np import io app Flask(__name__) model YOLO(‘runs/detect/train/weights/best.pt’) app.route(‘/predict’, methods[‘POST’]) def predict(): if ‘file’ not in request.files: return jsonify({‘error’: ‘No file uploaded’}), 400 file request.files[‘file’].read() # 将上传的字节数据转换为OpenCV图像格式 np_img np.frombuffer(file, np.uint8) img cv2.imdecode(np_img, cv2.IMREAD_COLOR) # 进行推理 results model(img) result_img results[0].plot() # 获取绘制了预测框的图片 # 将结果图片转换为字节流返回 _, encoded_img cv2.imencode(‘.jpg’, result_img) return send_file(io.BytesIO(encoded_img.tobytes()), mimetype‘image/jpeg’) if __name__ ‘__main__’: app.run(host‘0.0.0.0’, port5000, debugTrue)这个简单的API接收上传的图片用模型进行推理并将标注了缺陷框的图片返回。你可以用HTML写一个简单的上传页面来调用它。这对于快速验证模型在实际场景中的表现或者给客户做演示非常有用。6. 项目总结与进阶思考通过这个“开箱即用”的轴承缺陷检测数据集我们走完了一个完整的工业视觉AI项目流程从数据准备、模型训练、评估优化到应用部署。这个数据集的价值在于它提供了一个干净、规范的起点让开发者能跳过最繁琐的数据工程环节直接聚焦于模型算法和应用本身。在实际的工业落地中你可能会遇到这个数据集尚未覆盖的挑战缺陷尺度极端有些划痕非常细长有些锈蚀斑点非常小。这时可能需要专门针对小目标检测进行优化比如使用更密集的检测头如YOLOv8的P2小目标检测层、在数据增强中减少下采样、或者使用更高分辨率的输入图像。背景复杂与干扰产线背景可能杂乱有油污、反光或其他零件干扰。可以考虑在数据采集阶段使用背光、偏振镜等手段简化背景或者在模型训练时加入更多包含复杂背景的负样本无缺陷图片帮助模型学习什么是“背景”。类别不平衡与新缺陷实际生产中4类缺陷的出现频率可能严重不均甚至会出现新的未知缺陷类型。除了之前提到的过采样和类别权重还可以探索异常检测Anomaly Detection或少样本学习Few-Shot Learning的技术路线让模型具备发现“未知异常”的能力。这个数据集是一个很好的沙盒和基准。你可以用它来公平地比较YOLOv5、v8、v11等不同版本模型的性能也可以尝试集成其他先进的检测技巧如注意力机制、更优的损失函数等。最重要的是它把“数据”这个工业AI项目中最具不确定性的环节变得确定让算法研究和工程实践能够在一个坚实的基础上快速迭代。本文还有配套的精品资源点击获取
返回列表