ARTICLE DETAIL

资讯详情

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

YOLOv8小样本缺陷检测实战:头发丝与小黑点数据集全流程

YOLOv8小样本缺陷检测实战:头发丝与小黑点数据集全流程 简介面向液晶屏、OLED面板制造中常见的油污残留问题这份缺陷检测数据集聚焦头发丝TFS与小黑点XZW两类典型瑕疵共660张标注图片覆盖缺陷样本与正常样本适合计算机视觉学习者、算法工程师及工业质检项目用于训练目标检测、分类或异常检测模型。资源包共1324个文件其中660张JPG原图与660个XML标注文件一一对应可直接用于Pascal VOC格式另有4个TXT文件提供类别映射或数据划分信息压缩包整体314.54MB。目前已有1409人学习下载说明该数据集在缺陷检测方向具有一定参考价值。使用者既能借助XML标签快速训练YOLO、Faster R-CNN等检测模型也可利用正常样本开展无监督异常检测实验文件命名以normal、tfs2等清晰区分便于数据清洗、批量增强与训练/验证集划分可直接支撑毕业论文、算法竞赛或产线预研需求。 拿到一个“三星油污缺陷类别头发丝和小黑点数据集大小660张”的题目我第一反应是——这活儿我在产线视觉项目里见过太多回了。表面上看就是个二分类检测任务但真正做进去就会发现头发丝和小黑点这两种缺陷的形态差异极大一个窄到只有一两个像素一个藏在复杂的纹理背景里忽明忽暗再加上只有660张图整个项目的翻车点其实非常多。这篇文章就围绕这套数据把从数据理解、标注整理、模型训练到落地排错的全流程捋一遍基本覆盖“yolov8训练自己的数据集”这条技术路线在工业小样本缺陷检测里的完整打法适合正在做质检算法、或者准备拿自定义数据集跑目标检测的同学参考。先解释一下标题里这个“三星”。实际项目里它有两种常见含义一是客户要求按三星的出货检验标准来做缺陷卡控严图片大多从产线AOI或复判工位导出二是指材料牌号比如某类三星料号的注塑或光学件表面的油污脏污需要在出厂前拦截。不管哪种本质上都是制造业里的表面缺陷检测场景高度相似。1. 先读懂这个任务头发丝与小黑点到底难在哪1.1 两种缺陷的物理成因和视觉差异头发丝缺陷在工业现场通常是擦拭布残留的纤维、液态油渍被辊轮或手套拖出的细长拉丝也可能是静电吸附的毛发。它的特点是极端细长宽度常常只有1到3个像素长度却可能从几毫米到几十毫米。灰度上和背景可能很接近尤其是透明或半透明油渍拍照时稍微打光角度偏一点它就“隐身”了。小黑点则完全是另一个物种大部分是油雾凝结的小颗粒、飞溅的焊渣、灰尘甚至是胶水固化物。直径一般3到10个像素形状近似圆形或椭圆形和背景的对比度有时候很高有时候又很低。低对比度的小黑点和背景纹理混在一起时人眼都要仔细看模型更容易把它漏掉。这两类缺陷放在同一个数据集里有个很现实的问题类内差异大类间边缘模糊。一根短而粗的油丝在低分辨率下看起来就是个拉长的小黑点一个特别大的油滴又像是短粗的头发丝。所以做标注和训练之前先要把“什么算头发丝、什么算小黑点”的判定标准定死否则后面所有环节都会被模糊样本拖垮。1.2 为什么660张也能做小样本工业检测的常态很多人一听只有660张就觉得数据不够其实这是对工业缺陷场景的误解。产线上次品率如果只有千分之一想攒660张正样本图意味着要巡检几十万件产品周期可能长达两周到一个月。很多项目从立项到交付就一个月根本等不起所以小样本是工业视觉的常态不是例外。660张不是不能做而是要用小样本的思路去做迁移学习打底、小模型起步、增强和切片来凑样本形态、用严格的验证集来防止自嗨。对比一下COCO那类十万级数据集660张确实连零头都不到但缺陷检测的任务边界窄背景相对固定模型要学的东西比通用目标检测少得多。只要数据质量可控660张跑出一个能用的模型完全现实。另外这660张并不是全部拿来训练。按我的习惯会先抽20%左右留作最终的测试集这部分图绝不参与训练和验证调参最后模型能不能上线拿它说话。剩下的图再按8:2分成训练集和验证集大概也就是380张训练、100张验证的样子非常紧张所以每一张图都得当宝贝用。2. 数据集整理与标注上限在这里不在模型2.1 目录结构和标注格式数据拿到手第一步不是训练而是把目录和标注格式理顺。目标检测最通用的格式是YOLO格式一张图对应一个同名txt文件每行是“类别 x_center y_center width height”坐标全部归一化到0到1之间。我习惯这样组织oil_defect/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── oil_defect.yaml目录结构这种小事最容易被忽略但后面改起来特别痛苦。尤其是项目做一半标注公司交付的格式和训练框架不兼容还要写脚本转格式白白消耗时间。标注工具我推荐X-AnyLabeling比老牌的labelImg好用不少支持YOLO格式导出还能直接加载图片目录。标注类别就两类为了后续代码好写习惯命名为hairline_oil和dot_oil分别对应头发丝和小黑点。类别的顺序一旦定下来后面训练、推理、部署的配置文件都得保持一致尽量不要中途改。2.2 标注坑点细长目标的框怎么画标注是整个流程里最影响上限的环节尤其是头发丝这种细长缺陷不能像标注人、车那样随手拉一个大框。头发丝可能斜跨半张图如果用一个巨大的bbox把它整个包住框里95%以上都是背景模型学到的就是一个“大框里啥都有”训练损失下不去推理时也会对你输出一堆置信度极低的垃圾框。我的做法是把一根长头发丝切成几段每一段单独画一个框。框尽量贴合缺陷的局部走向保留一点点边缘余量就行。这样做的好处是模型学到的特征是“细长、低对比度、局部方向一致”的纹理而不是“一个很大的细长物体”。实测下来切成小框之后同样一批图训练出来的mAP50能提升5到10个点提升非常明显。小黑点的标注相对简单但要注意别把框画得太大。一个小黑点直径可能只有5个像素如果你画一个30x30的框相当于给模型塞进去大量背景信息干扰判断。框的边缘紧贴缺陷边缘宁可紧一点也不要松。另外有一个经验形态不规则的小黑点比如拖着一小段尾巴的统一按最小外接矩形标不要把尾巴单独拆出来否则类别就乱了。2.3 图像分辨率与切片策略这是一个特别多人在小样本缺陷检测里踩的坑。工业相机的分辨率往往非常夸张2448x2048、500万像素都是常规配置。头发丝缺陷在原始分辨率下还能看清但如果你直接把整张图resize到640x640再送进YOLO1到2像素宽的油丝在缩小后可能只剩不到1个像素基本等于消失模型学个寂寞。正确的做法是先切片再训练。把原始大图切成若干512x512或者640x640的小图切片重叠10%到20%防止缺陷正好卡在切片边缘被切碎。我一般用滑动窗口的方式切stride取512左右。切完之后每个小图再按YOLO格式单独标注这样才真正把缺陷的细节保留下来。如果切片后某些头发丝恰好横跨两张图两边各留一半那两张图里都要把对应部分标出来。不要人为丢弃这些边缘样本能让模型学会“不完整目标也是目标”提升实拍时的鲁棒性。切片本身不增加样本多样性但它保住了分辨率这是小样本训练里性价比最高的一步。提示切片后如果发现裁剪出来大量空背景图不要直接删掉训练集里的这些背景图可以在训练时把它们作为负样本加入让模型学会“没缺陷就是没缺陷”对压误检非常有帮助。3. 基于YOLOv8的实操训练流程3.1 环境与数据配置数据准备到位后来到训练环节。YOLOv8是当前性价比很高的选择Ultralytics框架用起来非常顺安装一行命令pip install ultralytics框架会把数据集配置文件读取、数据增强、训练、验证整个流程串起来省去自己写训练循环的功夫。数据集配置文件oil_defect.yaml写清楚路径和类别名path: /data/oil_defect train: images/train val: images/val test: images/test names: 0: hairline_oil 1: dot_oil然后用一行命令启动训练yolo detect train \ dataoil_defect.yaml \ modelyolov8n.pt \ epochs150 \ imgsz640 \ batch16 \ patience30 \ cacheTrue \ device0这里解释一下为什么选yolov8n而不是更大的s、m或l。660张小数据集样本量撑不起大模型的参数量模型越大过拟合越快。yolov8n参数量小、训练速度快配合COCO预训练权重迁移过来的通用特征在工业场景里已经够用。别迷信大模型小样本场景下模型复杂度宁小勿大。3.2 迁移学习参数调整小样本训练的关键在于迁移学习。直接用yolov8n.pt这个预训练权重启动相当于让模型从“见过万事万物的通用特征”出发只需要微调适应油污缺陷的纹理就行比从零训练收敛快得多也不容易过拟合。还有一个常用技巧是冻结backbone。训练初期可以指定freeze10把前10层的参数锁住不动只训练后面的检测头。相当于让模型先用原有的基础视觉特征去理解数据只调整输出层。等训练跑过几十轮后再解冻整体微调一轮效果往往比从头到尾整体训练更稳。数据增强方面小样本场景有个反直觉的点Mosaic增强要慎用。Mosaic把4张图拼在一起训练能增加样本多样性但在样本量很小时拼出来的图大量是背景和半张缺陷模型容易学到“残缺的目标也是目标”的错误逻辑。我的经验是mosaic0.0或者最多给到0.3关闭后训练稳定性会明显提升。像fliplr、scale、hsv这些基础增强可以保留但幅度别开太大毕竟工业场景的光照相对固定增强过头反而让模型学到现实中不存在的形态。3.3 训练参数速查表下面这个表是我跑类似项目时反复调过以后觉得比较稳的配置直接抄作业可以少走很多弯路参数推荐值原因modelyolov8n.pt小模型小样本下不容易过拟合imgsz640原始大图先切片细长缺陷细节不丢失epochs100~200配合早停实际不会跑满patience30验证指标30轮不涨就停省时间batch16太小BN不稳定太大显存吃紧mosaic0.0~0.3小样本下强Mosaic容易制造残缺样本freeze10初期冻结backbone稳定收敛cacheTrue小数据集直接缓存进内存训练提速明显这个表不是普适的但在660张这种量级、头发丝小黑点这种场景下已经是我测过很多次的可靠组合。如果你的显卡显存紧张batch降到8也能跑但最好同步把学习率从默认的0.01降到0.005不然小batch下梯度波动大损失曲线会抖得厉害。4. 小样本缺陷检测的三大翻车现场4.1 过拟合怎么判断和缓解小样本训练最容易遇到的就是过拟合。典型症状是训练损失一路下降、验证集mAP却原地踏步甚至下跌训练完保存的best.pt在训练图上检测神准一到测试集或者现场实拍就各种漏检误检。判断过拟合有个很直接的土办法在训练集上跑一遍检测如果预测框的置信度普遍在0.9以上同时验证集上同样类别的置信度掉到0.5左右那基本就是过拟合实锤了。这时候先别急着加数据把freeze层数加大、增强幅度降一点、模型换更小一号或者干脆减少epochs往往就能缓解。另外固定随机种子多跑几次训练选验证集上最稳的那个权重比单次训练的最好结果更有参考价值。4.2 漏检与误报的实战排查模型训练完常见的质检项目问题无非两类漏检有缺陷没查出来和误报把正常区域当缺陷。这两种问题的排查思路完全不一样整理成表现象常见原因解决办法头发丝漏检切片后仍太小或标注框过大缩小切片尺寸、增加重叠率、重新标注小黑点漏检目标太小被下采样丢掉提高输入分辨率或对黑点密集区域做局部放大误检灰尘/亮点工程上缺陷和灰尘形态相似采集负面样本加入训练或加形态学后处理误检背景纹理训练集里没有同类负样本从产线收集正常品图片加入不标任何框让模型学“没有”高置信度误检模型记住了特定光照下的背景开启轻微hsv增强丰富背景扰动排查时我习惯用Ultralytics提供的混淆矩阵和PR曲线直接看每个类别的AP单独表现。很多项目只看整体mAP结果整体看着还行但某一个是靠另一个拉起来的这种模型上线必出事。分来统计头发丝AP和黑点AP都要单独看哪个低就针对哪个做专项优化。4.3 类别不平衡与背景学习的处理头发丝和小黑点如果数量差太多模型会偏向样本多的一方。比如数据里有500张小黑点图、160张头发丝图训练后模型可能把所有细长物体都判成小黑点。解决思路有三个一是对头发丝类别做离线过采样把头发丝样本复制几份混进训练集让模型看到的频率接近二是调整损失函数里的类别权重cls给少样本类别加权三是用复制粘贴的方式做合成样本把头发丝从原图抠出来贴到不同背景上相当于人工扩充数据。背景学习的问题则更隐蔽。如果训练集里全是“有缺陷才拍照”的样本模型没见过干净背景上线后看到什么纹理都可能觉得像缺陷。所以我前面提过切片时保留一部分纯背景图不带标签一起训练这份负样本的性价比远高于继续堆正样本。注意给模型学负样本时背景图里绝对不能残留没标注的真缺陷。否则模型会认为“这个区域没框没问题”下次同样的缺陷出现在这里就直接放过了这种错误在质检项目里属于严重事故。5. 落地部署前的最后提醒5.1 模型效果指标怎么定技术指标和工业指标要分清。技术上我们看mAP50、mAP50-95但产线客户根本不关心这些他们只问两个问题漏检率多少误检率多少漏检率直接对应客户投诉和索赔误检率对应复判人工成本。一条一分钟检测100张图的产线误检率从5%降到2%每天就能少几百张误判图这比mAP提高0.5更有说服力。所以验证模型时除了看验证集指标我建议单独做一个模拟产线测试拿测试集图片按实际产线节奏逐张过一遍统计误检框的数量和漏检缺陷的比例。阈值conf_thres不要用默认的0.25工业场景宁可调高到0.4~0.5让模型少报一些低置信度框误检率会好看很多。5.2 传统视觉与深度学习互补的建议最后说一个很多算法工程师不爱听的实话660张训练出来的深度模型直接裸奔上线是有风险的。更好的方案是让深度模型先做召回再用规则做确认。比如小黑点这个类别传统图像处理里的形态学开闭运算加连通域分析在某些固定光照下检测精度可以做得非常高而且运行稳定、不会忽高忽低。头发丝则可以用方向性滤波增强再配合深度模型的检测框做复核。我的实践是深度学习模型负责粗筛输出候选框后接一层简单规则——比如小黑点的面積、亮度、圆形度过滤头发丝的长度、方向、纤细度校验。两条腿走路误检率通常能再降一个量级。深度模型处理不了的部分规则兜底规则写起来太复杂的场景交给深度模型去学习。整套流程做下来660张的数据集最后产出的模型是完全可以用的。重点不在于花了多少数据而在于每一张图有没有被正确理解、每一个细节有没有被认真标注、每一组训练参数有没有在验证集上反复校验。数据本来就是工业项目里最稀缺的资源把有限的样本压榨到极致才是做小样本缺陷检测的核心能力。本文还有配套的精品资源点击获取
返回列表