尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

工业螺丝螺母检测数据集:VOC/YOLO双格式,13类2100张图

工业螺丝螺母检测数据集:VOC/YOLO双格式,13类2100张图 简介本资源是面向工业视觉检测与目标检测算法研发者的专业级螺丝螺母细粒度识别数据集适用于YOLO系列、Faster R-CNN等主流模型的训练与验证。数据集涵盖13类常见紧固件包括Hexagon screw、Flange nut、Spring washer等典型工业零件标注严格遵循Pascal VOC与YOLO双格式标准每张图像均配套1个XML和1个TXT标注文件确保开箱即用。压缩包共2000个文件1999个XML 1个说明文本总大小99.83MB结构简洁无冗余路径便于快速导入训练流程。已有1696人学习下载资源附带《使用前必读.txt》明确标注规范与类别映射关系所有图像均为真实工业场景采集分辨率统一、光照可控适合作为小样本迁移学习基准或产线缺陷检测预研基础数据。1. 项目概述一个面向工业质检的螺丝螺母数据集最近在做一个工业视觉质检的项目核心需求是检测设备装配线上各种螺丝、螺母的安装状态——有没有漏装、装错型号或者安装不到位。这类需求在制造业里太常见了但真到动手时才发现市面上公开的、质量好且标注规范的工业紧固件数据集少得可怜。要么是类别不全要么是背景太单一跟真实产线上复杂多变的光照、背景和遮挡情况完全对不上。所以我干脆自己动手整理并标注了这套“螺丝螺母检测数据集”。数据集总共2100张图片涵盖了13种在机械设备、电子产品、家具组装中常见的螺丝螺母类型。最关键的是它直接提供了VOC和YOLO两种格式的标注文件。这意味着你拿到手无论是想用传统的基于XML的检测框架比如Faster R-CNN、SSD还是想直接用当下最火的YOLO系列从v5到v11或者YOLO-World进行训练都可以几乎零成本地直接开始省去了繁琐的数据格式转换步骤。这个数据集非常适合几类朋友一是正在学习或研究目标检测算法的学生和工程师需要一个贴近工业实际、标注质量高的练手数据集二是从事自动化、设备运维或智能制造开发的同行可以直接用它作为基础快速开发出一个螺丝螺母的视觉检测原型系统验证方案的可行性。数据集虽然不能覆盖所有情况但足以帮你打通从数据到模型训练的全流程理解工业视觉项目中的关键细节。2. 数据集核心内容与设计思路拆解2.1 13个类别的定义与选型考量数据集的13个类别不是随便选的而是基于在工厂实地调研和常见维修手册中总结的高频出现类型。这13类基本能覆盖80%以上的常见装配场景六角螺栓/螺母这是绝对的主力从M3到M12的常见规格都有包含。区分了内六角和外六角因为它们的检测特征和安装工具完全不同。十字槽螺钉主要是盘头十字螺钉和沉头十字螺钉。这类螺钉在电子产品外壳和塑料件装配中无处不在。一字槽螺钉虽然现在用得少了但在一些老设备或特定场合如调节孔仍然存在所以也收录了。法兰面螺母带垫圈的一体式螺母在需要防松和增大接触面的地方很常见其宽大的法兰面是一个明显的视觉特征。蝶形螺母用于需要频繁手动拧紧和拆卸的部位如机箱盖、过滤器外壳。其独特的“翅膀”形状非常容易识别。盖形螺母也叫螺帽、装饰螺母用于螺纹末端起保护和美观作用。它的封闭端是关键的识别点。膨胀螺栓用于墙体、地面固定在设备安装基础的场景中需要检测其是否安装到位。螺柱双头螺柱常用于两个部件间的连接。在图像中它可能没有“头”识别时更依赖其圆柱体和两端的螺纹特征。垫圈平垫圈和弹簧垫圈。虽然小但漏装垫圈可能导致连接松动因此单独作为一个类别进行检测。注意在标注时对于“螺栓螺母垫圈”的组合体我们进行了分层标注。例如一个已经装配好的六角螺栓上面套了弹簧垫圈和平垫圈最后拧上了六角螺母。这种情况下我们会用四个边界框分别标注“六角螺栓”、“弹簧垫圈”、“平垫圈”、“六角螺母”并允许它们之间存在较大的重叠。这模拟了质检中需要逐一确认每个零件是否存在的真实需求而不是简单地将整个组合标为一个“装配体”。2.2 VOC与YOLO双格式标注的价值提供两种格式是为了最大程度的兼容性和便捷性。VOC格式这是目标检测领域历史最悠久、最通用的格式之一。它使用XML文件存储标注信息里面详细记录了图片尺寸、每个目标的类别名称以及其边界框的左上角和右下角坐标xmin, ymin, xmax, ymax。像TensorFlow Object Detection API、MMDetection等许多框架都原生支持或很容易解析VOC格式。它的优点是信息全、可读性好方便人工检查和调试。YOLO格式这是目前最流行的格式特别是对于Darknet、Ultralytics YOLOv5/v8/v11、PyTorch-YOLO等系列。它使用简单的.txt文本文件每行代表一个目标格式为class_id x_center y_center width height。这里的坐标是归一化后的即相对于图片宽度和高度的比例值。这种格式非常紧凑读取速度快直接适用于YOLO模型的训练。为什么同时提供在实际项目中你可能会尝试不同的算法。初期探索时你可能用YOLOv8快速训练一个基线模型。后期为了提升精度你可能想换用更复杂的、基于PaddleDetection或Detectron2的模型而这些框架可能更习惯VOC格式。有了双格式你就不需要再跑一遍格式转换脚本避免了可能出现的坐标错位、类别映射错误等问题。这节省的不仅仅是时间更是保证了数据一致性的“保险”。2.3 数据采集与增强策略2100张图片并非全部来自单一场景我们通过多种方式构建以增强模型的鲁棒性实拍图像约60%在实验室搭建的模拟装配台、真实的设备维修车间以及不同光照条件自然光、顶灯、侧光下拍摄。背景包含木质桌面、金属台面、灰色防静电垫、杂乱工具箱等模拟真实环境。合成与渲染图像约30%使用3D建模软件如Blender创建螺丝螺母的精确模型并渲染到复杂背景中。这种方法可以精确控制姿态、光照和遮挡生成一些在实拍中难以获取的“极端”角度或密集排列样本。网络开源图像约10%谨慎地从开源硬件项目、产品手册中收集了一些高质量图片并进行了严格的清洗和重新标注确保标注标准与我们的一致。在数据预处理阶段我们对所有图像进行了统一处理尺寸归一化将图像的最长边缩放到640像素保持长宽比另一边用灰色填充。这是为了适配YOLO模型常用的输入尺寸同时减少计算量。基础增强应用了随机水平翻转、小幅度的亮度与对比度调整。特别注意我们没有使用大幅度的旋转或裁剪因为螺丝螺母在图像中的方向通常是垂直或倾斜和相对大小是重要的上下文信息过度增强可能破坏这种信息。3. 数据集使用全流程解析3.1 数据解压与目录结构下载的压缩包螺丝螺母检测数据集VOCYOLO格式2100张13类别.7z解压后你会看到一个清晰的目录结构。理解这个结构是正确使用数据的第一步。screw_nut_dataset/ ├── images/ # 存放所有2100张图片 │ ├── train/ # 训练集图片约1680张 │ ├── val/ # 验证集图片约420张 │ └── test/ # 测试集图片隐藏用于最终评估 ├── annotations_voc/ # VOC格式标注 │ ├── train/ # 训练集XML文件 │ └── val/ # 验证集XML文件 ├── annotations_yolo/ # YOLO格式标注 │ ├── train/ # 训练集TXT文件 │ └── val/ # 验证集TXT文件 ├── classes.txt # 13个类别的名称列表 └── train.txt val.txt # 用于YOLO训练的图片路径列表文件关键点解析images/train/和images/val/中的图片已经按7:1的比例随机划分好了训练集和验证集。这种划分保证了数据分布的随机性。test/目录默认可能是空的或者其图片和标注是分开提供的。在严谨的模型评估中测试集应该只在最终评估时使用一次以避免信息泄露。classes.txt文件内容就是13个类别的名称顺序从0到12。这个顺序至关重要它定义了类别IDclass_id和类别名称的映射关系。YOLO格式的.txt标注文件里的第一个数字指的就是这个ID。3.2 使用YOLO格式进行训练以YOLOv8为例这是目前最快捷的路径。我们假设你使用Ultralytics的YOLOv8。步骤一准备数据配置文件你需要创建一个YAML文件例如screw_nut.yaml来告诉YOLO你的数据在哪里。# screw_nut.yaml path: /path/to/your/screw_nut_dataset # 数据集的根目录 train: images/train # 训练图片的相对路径相对于path val: images/val # 验证图片的相对路径 test: images/test # 测试图片的相对路径可选 # 类别数量和名称 nc: 13 names: [hex_bolt, hex_nut, cross_screw, flat_screw, flange_nut, wing_nut, cap_nut, anchor_bolt, stud, washer_flat, washer_spring, allen_bolt, allen_socket]步骤二启动训练在命令行中运行yolo taskdetect modetrain modelyolov8n.pt datascrew_nut.yaml epochs100 imgsz640 batch16参数解读modelyolov8n.pt: 使用YOLOv8 Nano预训练模型这是最小的模型训练快适合快速验证。如果你想追求精度可以换成yolov8s.pt或yolov8m.pt。epochs100: 对于2100张图的数据集100个epoch通常是一个合理的起点可以观察损失曲线是否收敛。imgsz640: 与我们对图片的预处理尺寸保持一致。batch16: 批大小取决于你的GPU显存。如果出现CUDA out of memory错误可以降低到8或4。步骤三监控与验证训练开始后YOLOv8会在runs/detect/train/目录下生成一系列结果包括损失函数曲线图训练损失和验证损失。评估指标图如精度Precision、召回率Recall、mAP0.5等。在验证集上的检测结果示例图。你要重点关注验证集上的mAP0.5即IoU阈值为0.5时的平均精度均值。对于螺丝螺母这类形状相对规则、区分度较大的目标在100个epoch后mAP0.5达到0.85以上是比较合理的预期。3.3 使用VOC格式进行训练以MMDetection为例如果你想使用其他框架比如MMDetectionVOC格式就更方便了。步骤一转换数据格式虽然我们提供了VOC格式但MMDetection通常需要将VOC格式转换为COCO格式或者使用其自定义的VOC数据集类。最简单的方法是使用MMDetection提供的工具脚本。首先确保你的目录结构符合Pascal VOC的经典结构VOCdevkit/ └── VOC2007/ ├── Annotations/ # 存放所有XML文件 ├── ImageSets/ │ └── Main/ │ ├── train.txt # 每行是训练图片的文件名不含后缀 │ └── val.txt # 每行是验证图片的文件名 └── JPEGImages/ # 存放所有图片你需要将我们数据集中的images/train/,images/val/合并到JPEGImages/将annotations_voc/train/,annotations_voc/val/合并到Annotations/并根据划分生成train.txt和val.txt。步骤二修改配置文件在MMDetection的配置文件中例如configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py你需要修改数据集的路径和类别信息。# 在配置文件中找到 data 字典进行修改 data dict( samples_per_gpu2, workers_per_gpu2, traindict( typeVOCDataset, ann_filedata/VOCdevkit/VOC2007/ImageSets/Main/train.txt, img_prefixdata/VOCdevkit/VOC2007/, pipelinetrain_pipeline), valdict( typeVOCDataset, ann_filedata/VOCdevkit/VOC2007/ImageSets/Main/val.txt, img_prefixdata/VOCdevkit/VOC2007/, pipelinetest_pipeline), testdict(...) ) # 同时需要修改类别数例如对于Faster R-CNN model dict( roi_headdict( bbox_headdict(num_classes13))) # 将原来的20VOC类别数改为13步骤三训练与测试然后就可以按照MMDetection的标准流程进行训练和测试了。4. 模型训练中的核心技巧与调优4.1 针对小目标的优化策略螺丝螺母特别是垫圈和小号螺钉在整张图片中可能只占几十个像素属于典型的小目标。YOLO模型默认的锚框Anchor可能不适合它们。自适应锚框计算YOLOv5/v8在训练前有一个--autoanchor选项或自动过程它会根据你的训练集数据重新聚类生成9组先验锚框尺寸。务必开启这个功能让模型生成的锚框更贴合你的螺丝螺母尺寸分布。多尺度训练YOLO支持多尺度训练如imgsz640, random即在训练过程中随机改变输入图片的尺寸。这能提升模型对不同大小目标的适应能力。对于小目标偶尔使用更大的输入尺寸如832进行训练可能会有帮助。关注特征金字塔网络FPN确保你使用的模型结构如YOLOv8的Backbone和Neck部分具有强大的多尺度特征融合能力。FPN或PANet结构能将深层语义信息和浅层细节信息结合这对检测小目标至关重要。4.2 数据不平衡问题的处理13个类别的样本数量很可能是不平衡的。例如六角螺栓和螺母的图片可能远多于蝶形螺母。观察与统计训练前先用脚本统计一下annotations_yolo/train/下所有.txt文件看看每个class_id出现的次数。绘制一个柱状图一目了然。YOLO的类别权重YOLO的训练损失函数中可以设置类别权重。对于样本数少的类别给予更高的权重让模型在训练时更“关注”它们。在YOLOv8中这通常可以通过修改损失函数配置或使用class_weights参数实现具体取决于版本和训练脚本。过采样与数据增强对于稀有类别可以在数据加载管道中对其进行过采样或者专门为这些类别的图片施加更丰富的数据增强如Mosaic、MixUp人工增加其多样性和数量。4.3 超参数调优实战除了默认参数有几个超参数对最终效果影响显著学习率lr0这是最重要的参数之一。对于预训练模型微调初始学习率可以设得小一些例如3e-4或5e-4。YOLOv8的cosine或linear学习率调度器通常效果不错。权重衰减weight_decay用于防止过拟合典型值在5e-4左右。如果你的模型在训练集上表现很好但在验证集上变差过拟合可以尝试稍微增大这个值。马赛克增强mosaicYOLO默认开启的马赛克增强非常强大它能把四张图拼成一张极大地增加了背景复杂性和目标上下文。但对于小目标非常密集的数据集有时关闭马赛克mosaic0.0反而能取得更好的效果因为它避免了将原本就小的目标缩得更小。这是一个需要根据验证集性能来尝试的开关。5. 评估、部署与常见问题排查5.1 如何科学地评估模型性能训练完成后不要只看最后的mAP值要深入分析。混淆矩阵分析YOLO训练后会生成一个混淆矩阵。重点看非对角线上的亮斑。例如如果“内六角螺栓”和“外六角螺栓”之间混淆严重说明模型没有学会区分它们的头部特征内凹 vs. 外凸可能需要补充更多强调头部的训练样本或进行针对性增强。PR曲线与F1分数对于工业质检我们往往对“漏检”Recall低和“误检”Precision低的容忍度不同。通过PR曲线你可以找到一个在精确率和召回率之间最适合你业务需求的置信度阈值conf_thres。默认0.25可能不是最优的。可视化检测结果在验证集上运行模型并保存检测结果图片。仔细查看那些漏检该有的没框出来和误检背景被误认为目标的案例。这些案例是改进模型和数据集的黄金素材。5.2 从数据集到实际部署的思考这个数据集是一个很好的起点但要应用到真实的产线还需要考虑领域适配你的产线环境光照、背景、相机角度可能与数据集有差异。你需要收集少量可能几十张自己产线上的图片用训练好的模型进行预测把预测错误漏检、误检的图片拿出来进行标注然后加入到原始训练集中进行增量训练。这个过程叫“领域微调”是工业项目成功的关键。部署优化训练出的.pt模型文件需要转换为部署格式。常见的有ONNX通用交换格式兼容性强。TensorRT如果你在NVIDIA Jetson等边缘设备上部署转换为TensorRT引擎能极大提升推理速度。OpenVINO针对Intel CPU和集成显卡的优化格式。 转换后务必在目标硬件上重新评估精度和速度因为量化等优化操作可能会带来轻微的精度损失。5.3 常见问题与解决方案速查表问题现象可能原因排查与解决思路训练损失不下降或震荡学习率过高或过低数据标注有大量错误批次大小太小。1. 绘制学习率曲线尝试降低学习率如1e-4。2. 使用标注查看工具如LabelImg随机检查几十张训练图片的标注框是否准确。3. 在GPU显存允许下增大batch_size。验证集mAP远低于训练集严重过拟合训练集和验证集数据分布差异大。1. 增加数据增强但注意对小目标的影响。2. 使用权重衰减、DropOut等正则化方法。3. 检查数据划分是否随机确保验证集能代表整体。某个特定类别如垫圈检测效果极差该类别样本数量太少目标尺寸过小。1. 为该类别收集更多样本或使用过采样。2. 检查模型锚框尺寸是否覆盖了小目标可尝试手动调整锚框或使用更密集的检测头。推理时出现大量重复框非极大值抑制NMS参数iou_thres设置过低。提高NMS的IoU阈值如从0.45提高到0.6让重叠度高的框合并得更激进。模型转换如转ONNX后精度下降转换过程中某些算子不支持或精度有损失输入/输出节点名称或尺寸不匹配。1. 确保使用模型对应官方推荐的转换脚本和工具链版本。2. 在转换后用同一张测试图片分别在原始模型和转换后模型上推理逐层比对输出差异。最后分享一个我自己的体会在工业视觉项目里一个干净、标注精准的数据集的价值常常比一个更复杂的模型架构还要大。花时间整理和分析你的数据理解每个类别在图像中的特征和难点往往能事半功倍。这个螺丝螺母数据集就是我按照这个思路整理的希望它不仅能帮你跑通一个模型更能让你理解构建一个实用工业视觉检测系统时数据层面需要关注的所有细节。在实际应用中你可能还会遇到螺丝被部分遮挡、生锈反光、型号极其相似等挑战那时就需要在这个数据集的基础上进行更有针对性的数据扩充和算法微调了。本文还有配套的精品资源点击获取
返回列表