恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

曲奇饼干缺陷检测图像分类:基于YOLO11cls的训练实践与数据集解析

  • 首页
  • 资讯中心
  • /
  • 曲奇饼干缺陷检测图像分类:基于YOLO11cls的训练实践与数据集解析

相关资讯

STM32全速入门:从GPIO到ADC的嵌入式实战指南 2026/10/11 1:11:44
车牌识别毕业设计实战:Python+OpenCV四步流程与避坑指南 2026/10/11 1:11:44
别再做“玩具级”项目了:嵌入式工程闭环实战指南 2026/10/11 1:11:44

最新资讯

SAP MDG 功能范围说明(基于S/4HANA 2025)
Playwright自动化测试实战:从定位器到工程化落地
Mac brew安装软件
鸿蒙化适配yaml_modify:YAML定点修改与配置治理实践
实验2 数据看板
车端数据怎么保证不被篡改可被取证:安当CAS事件签名存证实践

今日推荐

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

曲奇饼干缺陷检测图像分类:基于YOLO11cls的训练实践与数据集解析

发布时间:2026/10/11 1:16:45
曲奇饼干缺陷检测图像分类:基于YOLO11cls的训练实践与数据集解析 简介一份曲奇饼干缺陷检测图像分类数据集的获取说明文档面向食品工业质检工程师、视觉检测算法开发及图像分类学习者。此PDF共1个文件大小5.87MB内含数据集基本情况介绍、示例缩略图与百度网盘下载方式对应数据集来自真实产线场景共1000张高质量图片覆盖Defect_Color颜色异常、Defect_No无缺陷、Defect_Object异物/物体、Defect_Shape外形缺陷四个类别采用文件夹划分标签标注质量高可直接用于YOLOCLS分类训练。同时附赠YOLO11cls一键训练脚本和博主训练结果日志便于快速启动训练并对照效果可作为曲奇饼干缺陷检测项目、食品工业智能质检系统及通用食品缺陷检测场景的数据补充。已有29人学习下载适合需要获取现成分类数据集并快速验证算法效果的研究者与工程师。1. 曲奇饼干缺陷检测图像分类从 1000 张图的小数据集开始食品产线上的曲奇饼干质检最烦的不是缺陷种类多而是人眼盯久了会疲劳。焦边、裂纹、破损这些外观问题差一炉就有几十片漏过去。我最近拆的这份「曲奇饼干缺陷检测图像分类数据集」恰好就是为了这类场景准备的起步资源1000 张饼干图像按类别分好文件夹带一套 YOLO11cls 的一键训练脚本把图像分类和食品工业质检的链路直接打通。适合三类人想快速验证缺陷检测可行性的制造业工程师、做分类课题的学生、以及手里有类似产品但缺数据集的算法岗朋友。它解决的核心问题很简单——你不需要从零整理数据改改路径就能训出自己的分类模型。2. 数据集按文件夹组织类别目录就是标签先摸清它的底细2.1 目录树先看一眼train/val 划分与类别文件夹的排列拿到资源包后第一件事不是急着开训而是先把数据集的结构摸清楚。这套数据集是标准的 ImageFolder 规则根目录下有 train 和 val 两个子目录各自里面按类别建文件夹文件夹名就是标签。我通常先跑一遍目录树和统计脚本# 查看数据集根目录结构限制两层深度避免刷屏 tree dataset_root -L 2 # 统计 train 下每个类别文件夹的图片数量 for dir in dataset_root/train/*/; do echo $dir: $(ls $dir | wc -l) done第一段 tree 命令看的是整体骨架train 和 val 是否分开、类别文件夹有没有放错位置。第二段循环逐类统计张数这一步很关键训练之前先确认每类的样本量级。常见的曲奇缺陷分类会分成正常、焦边、裂纹、破损这几种但具体几类、怎么命名下载包里以实际文件夹名字为准。如果发现某个类别只有几十张而其他类有三四百张后面训练就要考虑类别权重或者数据扩充。2.2 为什么「文件夹即标签」是分类训练的事实标准PyTorch 的 torchvision.datasets.ImageFolder 和 Ultralytics 的 classify 训练链路都原生支持这种目录结构。它的好处很直白不需要维护 CSV 或 JSON 标注文件类别增删就是建文件夹和删文件夹多人协作时也不容易把标签写错。但代价是——分类 ID 的顺序完全由文件夹名的字母排序决定。举个例子train 下有 broken、burnt、normal 三个文件夹那类别映射就是 broken0、burnt1、normal2。如果你中途把 broken 改成 defect_broken排序一变整个映射全错。训练时模型学到的 class id 和推理时对不上就会出现在训练集上准确率很高、换一批图预测全部错位的怪事。所以我拆任何分类数据集的第一步都是先导一份类别清单存起来# 把类别顺序固定成文件训练前后对照不会乱 find dataset_root/train -maxdepth 1 -type d -name * | sort labels.txt cat labels.txt这段命令把 train 下的类别目录按字典序导出。之后训练脚本里读取的类别顺序会和这份 labels.txt 保持一致。我一般会把这份文件放在数据集根目录下和 train、val 平级后面排查类别错位时靠它来核对。2.3 拆包后先做三件检查第一件统计每类数量看均衡度。1000 张对深度学习来说不算多如果「正常」占 700 张、「裂纹」只有 60 张模型大概率会偷懒全部预测成正常也能拿到 70% 准确率。第二件人工抽查每个类别文件夹里随便挑三五张图确认标签是干净的别信下载说明里的已整理好图像分类数据集里标错类别太常见了。第三件检查图片尺寸分布。读取图片宽度和高度from PIL import Image from pathlib import Path root Path(dataset_root/train/burnt) sizes set() for img_path in root.rglob(*.jpg): with Image.open(img_path) as im: sizes.add(im.size) print(该类别图片尺寸集合:, sorted(sizes))这段脚本用 pathlib 递归遍历 burnt 文件夹下所有 jpg 图片逐个用 Pillow 读出尺寸并放进 set 去重。如果打印出来的尺寸五花八门比如有 512x512 也有 800x600建议先统一处理。YOLO 训练时内部会做 resize但宽高比差太大的图片会被压变形缺陷特征跟着扭曲分类效果自然打折。比较省事的做法是统一缩放到正方形或者干脆在脚本里把 imgsz 设小一点让缩放损耗降到最低。提示检查这一步别省。数据集的标签可信度直接影响最终模型上限后面所有调参都是在弥补数据问题事倍功半。3. YOLO11cls 分类链路为什么直接用 YOLO11 而不是重训 ResNet3.1 classify 与 detect 的分工别把两个权重混着用YOLO11cls 是 Ultralytics YOLO11 系列里专做图像分类的分支权重文件名带 -cls 后缀比如 yolo11n-cls.pt。它和做目标检测的 yolo11n.pt 是两个不同的任务模型不能互相加载权重也不要在一个训练命令里把 task 写混。在图像分类场景里模型只输出整张图的类别概率不画框不定位。这套曲奇饼干缺陷检测数据集的用法就是判断这张图属于哪一类缺陷而不是框出裂纹的位置。如果后续想升级成找出裂纹在饼干上的哪个区域那才需要转向 detect 任务。在起步阶段分类任务的数据准备成本最低、收敛最快适合先把方案跑通、拿到业务方的认可再说。3.2 模型规格与显存、速度选型YOLO11 分类分支提供 n、s、m、l、x 五个规格从轻到重依次递进。对 1000 张量级的小数据集来说模型复杂度太高反而容易过拟合。常规选型参考模型权重规格适合显存典型场景yolo11n-cls.ptnano4G 可跑快速验证、边缘设备yolo11s-cls.ptsmall6G 起步追求精度与速度平衡yolo11m-cls.ptmedium8G 以上类别多、特征细的数据yolo11l-cls.pt / x-cls.ptlarge / extra12G 以上大数据量、不差训练时间我的建议很直接这套 1000 张曲奇饼干数据n 规格就够用。缺陷特征明显焦边是颜色异常、破损是形状变化不需要特别深的网络去刻画纹理细节。n 规格在 6G 显存的卡上可以轻松跑 batch 32单 epoch 只要几十秒快速迭代的价值远比那零点几个点的精度重要。等验证集准确率确实卡在瓶颈上再换 s 规格试一次不迟。3.3 环境准备与命令行跑通一次Ultralytics 的安装很省事纯 pip 搞定pip install ultralytics装完先确认命令行可用。接着把数据集根目录放到合适的位置比如 D:/datasets/cookie。然后执行# data 指向包含 train/val 的根目录不是某个类别文件夹 yolo classify train datadataset_root modelyolo11n-cls.pt epochs30 imgsz224 batch16逐项拆解这五个参数。data 指向的是数据集根目录里面必须有 train 和 val 两个子目录Ultralytics 会自动扫描model 填写预训练权重文件名第一次运行会自动下载网络慢的话也可以手动下好后放到当前目录epochs30 是起步轮数1000 张图 30 轮足够了后面看曲线再决定加不加imgsz224 是图像缩放边长饼干缺陷不是微小瑕疵224 够用设 640 反而白白增加显存和训练时间batch16 是比较保守的取值6G 显存可以往上加到 32。如果你下载的数据包没有划分 train 和 val需要先自己切分。常见做法是写个临时脚本按比例移动文件from pathlib import Path import random, shutil src Path(dataset_root/train_full) # 原始全量数据 dst_train Path(dataset_root/train) dst_val Path(dataset_root/val) random.seed(42) for class_dir in src.iterdir(): imgs list(class_dir.rglob(*.jpg)) random.shuffle(imgs) val_cnt int(len(imgs) * 0.2) # 取 20% 做验证集 for img in imgs[:val_cnt]: target dst_val / class_dir.name / img.name target.parent.mkdir(parentsTrue, exist_okTrue) shutil.move(str(img), str(target)) for img in imgs[val_cnt:]: target dst_train / class_dir.name / img.name target.parent.mkdir(parentsTrue, exist_okTrue) shutil.move(str(img), str(target))这段脚本先固定随机种子保证每次运行切分结果一致然后对每个类别文件夹分别取 20% 的图片挪到 val、剩余 80% 留在 train。注意用 shutil.move 而不是 copy避免同一张图出现在两个集合里造成数据泄漏。跑完后检查一下 train 和 val 里各类数量比例是否接近比例差太远说明随机种子抽到了异常分布重跑一次即可。4. 一键训练脚本拆解改路径、调参、跑通第一个 epoch4.1 训练脚本骨架本质上是对 Ultralytics 的薄封装下载包里的训练脚本核心其实就是把上一章的命令行参数固化成了 Python 调用。它的意义在于你不用每次敲一长串命令、不用记参数名改几行配置就能开训。脚本大致是下面这种结构from ultralytics import YOLO from pathlib import Path # 只需要改这里 DATA_ROOT Path(D:/datasets/cookie) # 数据集根目录 MODEL_NAME yolo11n-cls.pt # 预训练分类权重 EPOCHS 40 # 训练轮数 IMGSZ 224 # 输入图像边长 BATCH 16 # 批大小 DEVICE 0 # 0 表示第一张 GPUCPU 用 cpu # def main(): model YOLO(MODEL_NAME) model.train( datastr(DATA_ROOT), epochsEPOCHS, imgszIMGSZ, batchBATCH, deviceDEVICE, projectruns/cookie_cls, nameexp1, workers4, seed42, lr00.0015, # 预训练模型微调学习率调低更稳 ampTrue, # 混合精度训练省显存 ) if __name__ __main__: main()这段脚本的逻辑很直白先创建 YOLO 对象加载预训练权重然后调用 train 方法启动训练。关键参数都集中在头部注释区方便不熟悉代码的人快速定位。几个细节值得说明data 传的是 Path 对象转字符串指向含 train/val 的根目录project 和 name 决定权重保存位置即 runs/cookie_cls/exp1/weights/best.ptseed42 固定随机种子让实验结果可复现lr0 手动降到 0.0015因为加载的是 ImageNet 预训练权重学习率太大会把已经学好的特征冲掉。运行方式很简单在项目目录下执行python train.py看到终端输出 YOLO11n-cls 的模型结构摘要和数据集类别数就说明脚本识别正常。第一次训练建议盯着前几个 epoch 的 loss 和准确率变化loss 稳步下降、准确率从 40% 往上爬就是健康的信号。4.2 核心参数与调整原则脚本里的超参数不是随便填的每个都有明确的调整边界。列一张表方便对照参数脚本默认调整方向说明epochs40过拟合就调低欠拟合就调高小数据集 40 轮基本够用imgsz224分类任务一般 224~384饼干缺陷非小目标没必要太大batch166G 显存 1610G 以上 32显存不足优先调这个而不是 imgszlr00.00151e-3 到 1e-2 之间预训练微调建议不超 0.01workers4CPU 核数一半加载慢就调高OOM 就调低ampTrue显存紧就开报错就关混合精度能省 20% 显存训练过程中最需要盯的是 loss 曲线和验证集准确率。如果前 5 个 epoch 准确率快速冲到 80% 以上说明预训练特征的迁移效果很好后面 35 轮只是在慢慢打磨如果 loss 在前 3 轮就掉到很低但验证集准确率不涨甚至下降那就是过拟合信号把 epochs 砍到 25或者加数据增强。4.3 预训练权重与冻结策略为什么一定用 yolo11n-cls.pt 而不是随机初始化1000 张图从头训练一个卷积网络几乎是必失败的操作数据量太少模型学不到泛化特征loss 降不下去。预训练权重已经在 ImageNet 上学过千万张图的通用视觉特征曲奇饼干的边缘、纹理、颜色分布对它来说不是全新的东西我们只是让它在什么是焦边这件事上做针对性调整。如果你的显卡很吃紧或者想明显加快训练速度可以冻结部分底层特征层。Ultralytics 提供了 freeze 参数写法如下from ultralytics import YOLO model YOLO(yolo11n-cls.pt) model.freeze(10) # 冻结前 10 层更狠就冻结 12 层 results model.train(datadataset_root, epochs30, imgsz224, batch16)冻结前 10 层的意思是这些层只做特征提取反向传播时它们的梯度不更新只剩后面的分类头在学习。好处是梯度计算量减小、显存占用降低、训练速度明显变快坏处是如果缺陷特征和 ImageNet 预训练特征差异太大冻结反而限制了模型表达力。曲奇饼干这种工业质检场景底层抽象特征边缘、纹理、色块和自然图像是通用的冻结 10 层完全可行。注意冻结层数不是越多越好。冻结整个 backbone 只训练分类头适合数据量极小几百张的情况数据量在 1000 张左右冻结 10 层前后是比较平衡的位置。5. 训练中的常见问题与排查损失不降、OOM、类别错位的五个案例5.1 loss 卡在 0.7 附近不降准确率上不去现象训练日志里 loss 从第一个 epoch 开始就稳定在 0.7 左右准确率在 50% 上下浮动十来个 epoch 没有任何起色。原因最常见的有三种。一是学习率太高loss 在震荡区下不了山二是类别严重不均衡模型已经学会全猜正常这种偷懒策略三是数据集标签顺序和预训练权重不完全兼容属于加载异常。解决先看学习率。脚本里 lr0 如果是默认的 0.01直接降到 0.001 重跑。如果学习率没问题打印每类的样本数量确认最少的类别有没有被淹没。最后实在不行把模型换回 yolo11n-cls.pt 重新加载排除权重文件损坏的可能。5.2 DataLoader 报 FileNotFoundError 或图片读取失败现象训练刚启动终端报错找不到图片文件或者警告某个图片 is corrupted、无法读取。仔细看路径往往指向 dataset_root/train/xxx/img.jpg 这种位置。原因一是图片格式问题数据包里混了 .png 和 .jpeg或者有一两张本就损坏的零字节文件二是路径里有中文或特殊字符Windows 下容易触发编码问题三是图片虽然存在但扩展名不一致比如某类图是 .JPG 大写而扫描逻辑只认 .jpg。解决先用脚本扫一遍所有图片把损坏的挑出来删掉或替换。路径问题通过把数据集根目录改成纯英文路径解决。扩展名不一致就统一重命名# 把 train 和 val 下所有 .JPG 统一改成 .jpg find dataset_root/train dataset_root/val -name *.JPG -exec rename s/\.JPG$/.jpg/ {} \;5.3 验证集 95 分现场识别却一直误判现象训练时验证集准确率 95% 以上看起来很完美。结果拿到产线实际拍的照片一测大量误判尤其是裂纹类别几乎全军覆没。原因数据分布不一致。数据集里的图可能是桌面摆拍、均匀光照、背景单一而现场传送带上是动态抓拍、有阴影、有震动模糊。模型学到的其实是光照和背景的分布而不是缺陷本身。这是图像分类最常见的翻车场景学术指标和工程指标是两码事。解决第一往训练集里混入产线实拍图哪怕只有几十张都管用第二训练时打开数据增强的亮度抖动和高斯模糊参数模拟现场画质第三用现场图专门构建一个小测试集反复验证不要只信训练时的验证集分数。5.4 显存溢出 OOM训练中断现象训练跑到第二个 epoch报 CUDA out of memory进程直接退出。重启后还是同样情况。原因batch 设得太大、imgsz 设得偏大或者开了 workers 数过高导致内存拷贝压力大。很多第一次跑 YOLO 的人习惯性把 imgsz 设成 640在 6G 显存上直接爆掉。解决优先把 batch 从 32 降到 16再不行降到 8同时把 imgsz 从 224 降到 192。如果还不够关掉 amp 试试虽然显存不会明显下降但有些卡上 amp 和某些算子的显存分配不兼容。最后检查是不是同时跑了多个程序占用显存用 nvidia-smi 看一眼再决定。5.5 训练正常、推理时类别标签错位现象训练一切正常验证集准确率也不低。但把训练时的测试图拿来做单张推理预测出来的类别名和真实标签对不上比如把「正常」预测成「焦边」而 training 阶段准确率是 90% 多。原因训练脚本读取数据集的类别顺序和推理脚本加载权重时记录的类别顺序不一致。常见触发点是中途改过文件夹名、数据集被移动过、或者别的训练任务生成的权重放到了当前目录导致加载了错误的模型。解决统一用第 2 章导出 labels.txt 作为类别基准。训练前、推理前都打印一遍当前模型的 names确认和 labels.txt 一致再操作from ultralytics import YOLO model YOLO(runs/cookie_cls/exp1/weights/best.pt) print(类别映射:, model.names)6. 用混淆矩阵和单张推理验证确认模型学的是缺陷而不是背景训练不是终点验证模型到底学到了什么才是真正的工作量。我拿到 best.pt 后第一件事就是写一段单张推理脚本把每类的测试图各抽几张跑一遍from ultralytics import YOLO model YOLO(runs/cookie_cls/exp1/weights/best.pt) results model.predict(sample.jpg) probs results[0].probs top1_idx probs.top1 print(预测类别:, results[0].names[top1_idx]) print(置信度:, probs.top1conf.item()) print(Top-5 概率:, probs.top5)这段代码读入训练好的权重对单张图做分类预测。probs.top1 取概率最高的类别索引top1conf 是对应置信度top5 给出前五个类别的排序。如果预测置信度普遍在 0.9 以上说明模型对缺陷特征足够自信如果只有 0.6 左右说明类别间特征太接近需要补充数据或调大 imgsz。同时训练结果目录 runs/cookie_cls/exp1/ 下会生成混淆矩阵图。打开看一眼正常和裂纹之间互相混淆多不多焦边是不是容易和破损搞混如果对角线以外有明显亮点就说明两个类别的特征确实重叠这时候加模型深度没有用回到数据层面找差异才是正解。从这套 1000 张的数据集还能沿两个方向继续走一是做数据扩充旋转 15 度以内加色彩抖动模拟产线不同批次的色差二是往 few-shot 探索拿每个类别抽少量样本做 1-shot、5-shot 对比评估小样本图像分类的可行性。从那以后我每次拿到新的缺陷分类数据集都强制自己先跑完三步导 labels.txt、查类别均衡度、用 5 epoch 快速试跑确认链路通顺。这三步走完再贵的卡也不会白烧。希望帮到你。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号