2026/10/28 10:27:13

工厂数据少能训动AI吗:小样本+预训练+增量微调组合方案

工厂数据少能训动AI吗:小样本+预训练+增量微调组合方案 工厂数据少能训动AI吗小样本预训练增量微调组合方案TL;DR 速览缺陷样本为零走无监督异常检测PatchCore / EfficientAD / FastFlow只用良品图建模良品 50–500 张即可冷启动只判「像不像正常」不分类。缺陷样本每类 100–200 张若业务需要知道缺陷类别与位置走两阶段串联异常检测预筛 监督细分类兼顾低漏检与低误检。缺陷样本每类 200–500 张直接冻结 backbone 微调检测头YOLO / RT-DETR 系输出类别与位置可量化。选型判断先数缺陷样本再问「要不要输出缺陷类别」三条路线最终都汇入样本回流池攒够一批触发增量微调让模型随产线一起长大。目录一、问题场景缺陷样本为什么天然稀缺二、技术原理小样本能成立靠的是三个前提三、方案拆解按数据家底选路线四、数据验证这条路线在真实产线上跑通过吗五、小结常见问题先说结论能而且路径很成熟。工厂数据少不是「训不训得动」的问题而是「选哪条路线」的问题。当前工业视觉场景下有三条被反复验证的路线预训练 backbone 迁移几百张良品就能起步的异常检测、参数高效微调只训万分之一的参数、以及产线运行中的增量迭代。缺陷样本少不是拦路虎拦路虎是没有把「缺陷少」这个事实设计进方案里。一、问题场景缺陷样本为什么天然稀缺产线质检数据的分布是极度偏斜的。一条正常运行的产线良品率往往在 98% 以上一天十万件产品里某一类缺陷可能只出现几十件还未必都能被抓拍留存。如果按传统监督学习的思路「每类缺陷准备几千张标注图再开工」很多工厂的数据攒一年都不够。更现实的问题是缺陷类型不封闭。今天训好的模型只能认它见过的缺陷明天工艺波动冒出一个新缺陷形态监督模型对它就是零检出。这就是为什么「数据少」在工业场景不是边缘案例而是常态——中国信通院在 2026 年 10 月的行业大会上就指出近一半「人工智能」应用场景停留在试点阶段未放量推广数据底子薄是主要卡点之一信通院2026-10-15 济南人工智能产业大会。二、技术原理小样本能成立靠的是三个前提前提一预训练 backbone 已经把「看图能力」学完了。在 ImageNet 等大规模数据集上预训练过的骨干网络已经学会了边缘、纹理、形状这些通用视觉表征。工厂的任务不是从零学「怎么看图」只是在这个表征之上学「什么算异常」。这就是为什么迁移学习下缺陷检测所需的样本量比从零训练低一到两个数量级。前提二异常检测把问题从「认缺陷」换成「认良品」。无监督异常检测Unsupervised Anomaly Detection只用良品图片建模「正常长什么样」推理时输出与正常模式的偏离度。缺陷样本一张都不需要——这直接绕开了缺陷稀缺的死结。代表作 PatchCoreRoth et al., CVPR 2022在工业异常检测标准基准 MVTec AD 上拿到图像级 AUROC 最高 99.6%论文还专门验证了 few-sample每类仅 1–16 张良品图场景下依然有竞争力的表现来源CVPR 2022 论文《Towards Total Recall in Industrial Anomaly Detection》Amazon/AWS。前提三参数高效微调把「训得起」的门槛拉低了。全量微调一个大模型要更新全部参数显存和算力都扛不住。LoRAHu et al., 2021微软的做法是冻结预训练权重、只注入低秩矩阵参与训练——以 GPT-3 175B 为例可训练参数量比全量微调减少一万倍、GPU 显存需求降低约 3 倍且效果持平甚至略优来源arXiv:2106.09685。同一思想在视觉模型微调上同样成立冻结 backbone、只训检测头或少量适配层几百张样本就能收敛。三、方案拆解按数据家底选路线路线缺陷样本需求良品样本需求检出能力适用阶段无监督异常检测PatchCore / EfficientAD / FastFlow0 张几十到几百张检出「不像正常」的区域不分类冷启动缺陷图还没攒够监督检测微调YOLO / RT-DETR 系冻结 backbone 微调检测头每类 200–500 张有效标注搭配数百张输出缺陷类别与位置可量化缺陷图已有一定积累两阶段串联异常检测预筛 监督细分类每类 100–200 张起步数百张低漏检 低误检平衡产线稳定运行期表中样本量为多篇工程实践文章的共识区间CSDN 工程实践专栏 2025–2026 年多篇落地复盘交叉一致监督方案每类缺陷 200–500 张收敛到可用水平异常检测方案良品样本 50–500 张即可起步不是标准具体还要看缺陷形态复杂度和成像一致性。把这张表翻译成决策路径更直观——先看手里有多少缺陷样本再看业务上要不要输出缺陷类别两条判断就能落到具体路线0 张只有良品每类 100–200 张每类 200–500 张需要分类与定位只需判良/NG开始盘点数据家底缺陷样本数量无监督异常检测PatchCore / EfficientAD / FastFlow是否需要输出缺陷类别监督检测微调YOLO / RT-DETR 冻结 backbone 训检测头两阶段串联异常检测预筛 监督细分类样本量良品 50–500 张适用阶段冷启动缺陷图还没攒够样本量每类缺陷 200–500 张有效标注适用阶段缺陷图已有一定积累样本量每类缺陷 100–200 张起步 良品数百张适用阶段产线稳定运行期样本回流池误报/漏报人工确认后回灌攒够一批触发增量微调冻结主干、只训检测头读图要点缺陷样本为零时不必纠结分类能力先让异常检测跑起来挡漏检样本攒到每类一两百张时再问一句「业务要不要知道这是哪类缺陷」——要就走两阶段串联只要判良/NG继续用异常检测即可每类攒到两三百张以上才值得上监督检测微调直接输出类别与位置。三条分支最终都汇入样本回流池这也是路线能随产线一起进化的原因。落到工程上一个典型的组合流水线长这样[产线相机] → [图像预处理/畸变校正] │ ├─→ [异常检测引擎: PatchCore] ← 只用良品建模 │ │ 异常分数 阈值? │ ├─ 否 → 判良品, 放行 │ └─ 是 → 送第二级 │ └─→ [监督细分类: 微调检测头] ← 少量缺陷样本微调 │ 输出缺陷类别 位置 └─→ [样本回流池] ← 误报/漏报人工确认后回灌其中「样本回流池」是增量微调的弹药库产线每天跑误报和漏报经人工确认后自动沉淀为新的标注样本攒够一个批次比如每类新增 50 张就触发一轮增量微调——冻结主干、只训检测头一次微调在单张消费级显卡上通常几十分钟到几小时就能完成不用停产重训。一个最小化的参数高效微调骨架PyTorch 风格伪代码# 冻结预训练 backbone只训练检测头 低秩适配层modelbuild_detector(pretrainedTrue)forname,pinmodel.named_parameters():p.requires_grad(headinname)or(lorainname)# 实际参与训练的参数量通常只占全模型的 0.5%–2%trainablesum(p.numel()forpinmodel.parameters()ifp.requires_grad)totalsum(p.numel()forpinmodel.parameters())print(ftrainable ratio:{trainable/total:.4%})# 增量微调: 新批次缺陷样本 少量旧样本回放(防灾难性遗忘)loadermix_loader(new_defects,replay_ratio0.2)train(model,loader,epochs30,lr1e-4)回放replay这一步不能省——只拿新缺陷图训模型会把旧缺陷忘干净这就是持续学习里的「灾难性遗忘」问题。混 20% 左右的旧样本回放是经验上比较稳的做法。上面是「有缺陷样本之后」的微调骨架。如果缺陷样本还是零先跑下面这段基于 PatchCore 思路的无监督异常检测最小实现——只用良品图建模三步走完良品建模 → 异常分数计算 → 阈值判定。importtorchimporttorch.nn.functionalasFfromtorchvision.modelsimportwide_resnet50_2,Wide_ResNet50_2_Weights# 第 0 步准备特征提取器冻结的预训练 backbone # 用 ImageNet 预训练的 WideResNet50 做特征提取权重全程冻结不参与训练backbonewide_resnet50_2(weightsWide_ResNet50_2_Weights.IMAGENET1K_V1).eval()forpinbackbone.parameters():p.requires_gradFalsedefextract_features(x):取 layer2 / layer3 的中层特征兼顾纹理细节与语义信息feats[]forname,moduleinbackbone.named_children():xmodule(x)ifnamein(layer2,layer3):feats.append(x)# 统一上采样到同一分辨率后拼接target_sizefeats[0].shape[-2:]feats[F.interpolate(f,sizetarget_size,modebilinear,align_cornersFalse)forfinfeats]returntorch.cat(feats,dim1)# [B, C, H, W]# 第 1 步良品建模只用正常样本构建特征记忆库 defbuild_memory_bank(good_loader,coreset_ratio0.1):把良品图的 patch 特征压成一个记忆库coreset 采样降低冗余bank[]withtorch.no_grad():forimgsingood_loader:featextract_features(imgs)# [B, C, H, W]patchesfeat.permute(0,2,3,1).reshape(-1,feat.shape[1])# [B*H*W, C]bank.append(patches)banktorch.cat(bank,dim0)# 随机 coreset 采样保留 coreset_ratio 比例的特征点控制显存与推理耗时idxtorch.randperm(bank.shape[0])[:max(1,int(bank.shape[0]*coreset_ratio))]returnbank[idx]# [M, C]M 为记忆库大小memory_bankbuild_memory_bank(good_loader)# 几十到几百张良品图即可# 第 2 步异常分数计算每个 patch 找最近邻取最大距离 defanomaly_score(img,k1):返回图像级异常分数与像素级异常热力图withtorch.no_grad():featextract_features(img)# [1, C, H, W]patchesfeat.permute(0,2,3,1).reshape(-1,feat.shape[1])# [H*W, C]# 计算每个 patch 到记忆库所有特征的欧氏距离disttorch.cdist(patches,memory_bank)# [H*W, M]# 取最近的 k 个邻居距离求均值作为该 patch 的异常分数patch_scoresdist.topk(k,largestFalse).values.mean(dim1)score_mappatch_scores.reshape(1,1,*feat.shape[-2:])# 图像级分数 最异常 patch 的分数局部缺陷不会被平均掉img_scorepatch_scores.max().item()returnimg_score,score_map# 第 3 步阈值判定用良品验证集定阈值避免拍脑袋 defcalibrate_threshold(good_val_loader,sigma3.0):在纯良品验证集上跑一遍取 均值 sigma*标准差 作为阈值scores[anomaly_score(img)[0]forimgingood_val_loader]scorestorch.tensor(scores)return(scores.mean()sigma*scores.std()).item()thresholdcalibrate_threshold(good_val_loader)defpredict(img):产线推理入口分数超阈值判 NG并返回热力图供人工复核score,heatmapanomaly_score(img)is_ngscorethresholdreturn{score:score,threshold:threshold,is_ng:is_ng,heatmap:heatmap}三步的分工很明确良品建模把「正常长什么样」固化成记忆库缺陷样本一张都不用异常分数计算用最近邻距离衡量每个 patch 偏离正常的程度取最大值作为图像级分数保证小面积缺陷不被稀释阈值判定在良品验证集上按 3σ 原则自动标定比人工拍一个固定值稳得多。实际落地时把coreset_ratio调到 1%–10%、k取 1–9就能在单张消费级显卡上做到毫秒级推理。关键参数怎么调上面这段代码能跑通但真正决定产线效果的是四个参数。它们不是各自独立的旋钮而是有先后顺序的——顺序错了调一天也调不出稳定结果。参数建议取值范围对漏检的影响对误检的影响调参顺序coreset_ratio记忆库采样比例1%–10%良品图少于 100 张时可放到 20%–30%比例过低会丢掉稀有正常形态漏检上升比例过高记忆库冗余误检略降但推理变慢第 1 步先定记忆库规模k近邻数1–9小面积缺陷取 1–3噪声大的成像取 5–9k 偏大时小缺陷被邻居平均掉漏检上升k 偏小对成像噪声敏感误检上升第 2 步固定阈值前先定 k阈值sigma3σ 系数2.5–4.0漏检代价高取 2.5误检代价高取 4.0sigma 越大阈值越高漏检上升sigma 越小阈值越低误检上升第 3 步前两个参数定完再标定输入分辨率短边 256–512缺陷小于 5 像素时必须 ≥ 512分辨率不足时小缺陷特征被抹平漏检上升分辨率过高引入纹理噪声误检上升第 0 步最先定且定完不再改三条工程经验良品图多样性不足时先扩样本再调阈值。如果良品集只覆盖一种光照、一个批次阈值无论怎么调都会在换批次时崩掉——这时把 sigma 调大只是把问题推迟。正确做法是先补不同光照、不同批次的良品图让分数分布本身变窄再重新标定阈值。coreset_ratio和输入分辨率要一起定且定完就冻结。这两个参数直接决定记忆库大小和推理耗时中途改动会让之前标定的阈值全部失效。经验做法是先用 256 分辨率 5% 采样跑通全流程确认检出能力够用后再往上加而不是一上来就 512 10%。阈值必须在「没参与建模」的良品图上标定。用建模用的那批良品图算阈值分数会偏乐观上线后误检明显偏高。留出 20%–30% 的良品图专门做阈值标定并且每次增量微调或换批次后都重新标一次把阈值当成需要维护的配置而不是一次性常数。四、数据验证这条路线在真实产线上跑通过吗几组可交叉验证的事实学术基准PatchCore 在 MVTec AD 上图像级 AUROC 99.6%CVPR 2022且论文明确报告了少样本场景的竞争力——说明「只用良品 少量样本」不是妥协方案而是当前异常检测的最优解之一。参数效率LoRA 论文2021证明冻结预训练权重、训低秩矩阵可训练参数降一万倍而效果不降——这个结论过去五年被视觉、语音、NLP 各领域的跟进工作反复复现。产线实证江苏海安一家涂布企业浩驰科技上线 AI 视觉检测后不良率从 1.5% 降到 0.2%缺陷数据回流控制系统调工艺参数——注意这个案例的关键机制正是「数据回流→持续调优」而不是一次性训练到位南通市政府官网2026-07-28。政策定调工信部在 2026 年 10 月的国新办发布会上明确要求「开发先进适用的垂域模型」「成熟一个、推广一个」工信部总工程师王卫明2026-10-20。垂域模型的技术路线本身就是「通用底座 行业小样本适配」与小样本路线是同一个逻辑。五、小结「工厂数据少能不能做 AI」这个问题的答案分三层缺陷样本为零→ 用无监督异常检测良品图几十到几百张就能冷启动缺陷样本有几百张/类→ 冻结 backbone 微调检测头或异常检测预筛 监督细分类两级串联数据会持续积累→ 把样本回流池和增量微调机制设计进系统让模型随产线一起长大。真正的门槛不是样本数量是有没有把「缺陷天然稀缺」设计进架构。先让异常检测跑起来挡漏检再让回流机制把每一天的生产变成训练数据——数据少就这样一点点变多。常见问题Q我们厂数据很少能训得动 AI 吗能。缺陷样本一张都没有也能起步无监督异常检测只需要良品图几十到几百张就能建模「正常长什么样」。PatchCore 这类方法在工业标准基准上只用良品训练就做到了 99.6% 的图像级 AUROC。缺陷样本后续通过产线回流慢慢攒攒够一批做一次增量微调。Q做 AI 质检到底需要多少张样本看路线。监督检测方案的经验区间是每类缺陷 200–500 张有效标注才能收敛到可用水平无监督异常检测只需要良品50–500 张起步两阶段串联方案每类缺陷 100–200 张起步。注意样本多样性比数量重要——同一产线同一角度拍两千张不如覆盖不同光照、不同批次的几百张。Q增量微调会不会把模型训坏越训越差会有这个风险叫「灾难性遗忘」——只喂新缺陷样本模型会忘掉旧的。工程对策有两个一是训练时混入 20% 左右的旧样本回放二是冻结预训练主干、只微调检测头或低秩适配层主干表征不动遗忘就有限。每次增量微调后用固定的回归测试集验证旧缺陷检出率不达标就回滚。参考资料Towards Total Recall in Industrial Anomaly DetectionPatchCore— Roth et al., CVPR 2022Amazon/AWSarXiv:2106.08265。正文引用点图像级 AUROC 99.6%、few-sample每类 1–16 张良品图场景验证。LoRA: Low-Rank Adaptation of Large Language Models— Hu et al., 微软2021arXiv:2106.09685。正文引用点可训练参数量减少一万倍、GPU 显存需求降低约 3 倍。MVTec AD 工业异常检测基准数据集— MVTec Software GmbHCVPR 2019 论文发布。正文引用点PatchCore 图像级 AUROC 99.6% 的评测基准。济南人工智能产业大会相关发言— 中国信息通信研究院信通院2026-10-15。正文引用点近一半「人工智能」应用场景停留在试点阶段未放量推广数据底子薄是主要卡点之一。浩驰科技 AI 视觉检测落地案例报道— 南通市人民政府官网2026-07-28。正文引用点江苏海安涂布企业不良率从 1.5% 降到 0.2%缺陷数据回流控制系统调工艺参数。国新办新闻发布会工业和信息化部— 工信部总工程师王卫明2026-10-20。正文引用点「开发先进适用的垂域模型」「成熟一个、推广一个」。关于作者云湃智算VASTIQ专注制造业 AI 落地的技术团队持续分享工业视觉检测、设备数据采集中踩过的坑和填坑方法。