ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

小样本图像识别:方法演化、评测陷阱与工业落地实践

小样本图像识别:方法演化、评测陷阱与工业落地实践 我从一个真实的业务场景说起。前两年我在某制造企业的视觉检测项目里遇到一个特别典型的困境某类产品的外观缺陷现场能拿到的坏品样本只有一两百张标注师傅花了整整一周才凑出一个勉强能用的训练集结果模型刚上线客户新增了两种缺陷形态准确率立刻掉到没法看。这就是小样本学习Few-shot Learning真正要解决的问题——不是学术界自娱自乐而是工业落地中每天都在发生的“数据不够任务照做”。在图像领域小样本学习研究的是如何让模型在每类只有几张、几十张标注样本的情况下依然具备可靠的识别、检测和分割能力。这篇文章我会从问题定义开始梳理方法演化的几条主线再重点讲评测基准里的隐形陷阱最后结合我自己在项目里反复踩坑换来的实操经验聊聊到底哪些技术在真实场景中管用、哪些看着美好但实际上很难落地。无论你是刚接触这个方向的研究生还是在工业视觉、自动驾驶、医疗影像里被数据短缺折磨的算法工程师都可以从中找到自己能直接用的东西。1. 小样本学习在图像任务里解决的是哪一类真问题1.1 先用一个业务场景把问题说透先说清楚小样本学习不是什么“锦上添花”的技术。在很多人的印象里深度学习模型只要有大量数据就能工作但现实里大量数据本身就是奢侈品。比如工业质检缺陷样本少是因为生产线上合格品占绝大多数缺陷种类又特别多每一种都要单独积累数据比如医疗影像罕见病的阳性切片全国可能都凑不出几百张再比如遥感图像里的特定目标某种类型的船只或者车辆可能某段时间内只出现在几张卫星图上。这些场景的共同点是类别多、每类样本少、新类别还在不断出现你不可能每遇到一个新类别就重新标几千张图。小样本学习的核心设定正是针对这种困境模型在训练阶段见过大量类别这个阶段叫基类学习base class learning但最终要被测试的类别是它没见过的每个新类别只给少量标注样本一般是每类1张或5张看模型能不能快速适应。这就是为什么在小样本学习的论文里你永远会看到“N-way K-shot”这种说法它的意思是测试时一共有N个新类别每个类别给K张标注图片。1.2 训练逻辑与传统分类有一个关键区别小样本学习和普通分类任务最大的不同在于训练方式。传统分类训练时模型学会的是“这张图是猫还是狗”的决策边界小样本学习训练时模型要学会的是“如何利用少量样本快速建立决策边界”这个能力本身。为了训练这种能力研究者设计了一种被称为“episodic training”的训练范式。每次训练迭代会模拟一次小样本测试从训练集中随机抽N个类别作为虚拟的新类别每个类别抽K张作为支持集support set再抽若干张作为查询集query set。模型只能在支持集上学习然后对查询集做预测。通过反复模拟这种低数据场景模型慢慢就学会了“遇到陌生类别时应该怎么看图、怎么比较、怎么做决策”。这里我要强调一个很多初学者容易忽略的点小样本学习模型的“泛化能力”和传统模型的“泛化能力”不是一回事。传统模型要泛化到同分布的新样本小样本模型要泛化的是“适应新类别的方法论”它得面对比普通分类大得多的不确定性。所以你不能简单地把小样本问题当成“用少量数据微调一个预训练模型”这种做法在类别偏移大的场景下往往效果很差后面我会专门讲这一点。2. 从方法演化看主线度量、元学习与预训练的三波推动2.1 第一波度量学习让“像不像”变得可计算小样本图像识别最早一批被广泛认可的方法核心思想可以概括成一句话把问题从“这个图是什么”变成“这张图和哪张已知图更像”。这个思路直接催生了度量学习方法家族。我见过很多工程出身的人第一次接触这类方法时的反应这不就是K近邻加了一个神经网络特征提取器吗这么说其实不算错但关键差别在于特征提取器是怎么被训练出来的。早期的孪生网络Siamese Network用成对图片作为输入让网络学会判断两张图是否属于同一类后续的匹配网络Matching Network则引入了可学习的距离度量。到原型网络Prototype Network出现时方法变得非常优雅对每个类的K张支持集图片提取特征算出一个“原型”作为该类的特征均值查询集的图片只要看它和哪个原型最近就行。关系网络Relation Network又往前走了一步它不满足于用固定距离函数而是让网络自己学习“什么样的相似度判断最合理”。我很喜欢原型网络的一点是它虽然简单但在很多真实场景中反而是最稳的baseline。因为它几乎没有额外参数不容易过拟合而且对特征质量的要求非常直接——只要你的特征提取器足够好原型分类就能打得过一堆花里胡哨的算法。这类方法后来还衍生出了很多变体比如对特征做特征变换、用多个原型描述一个类别的多模态分布等但底层逻辑始终没变。2.2 第二波元学习把“学会学习”变成可优化的目标度量学习虽然有效但它有一个潜在的天花板模型本质上是被动地比较特征而不是主动地为新任务调整自己的行为。元学习Meta-learning试图突破这个天花板它的思路是让模型在大量小样本任务上训练出一个“初始状态”这个初始状态经过少量几步梯度更新就能在新类别上表现良好。这类方法里最具代表性的思路是“基于梯度的元学习”算法维护一组模型参数在每个训练任务上先计算几步梯度更新再根据更新后的模型在查询集上的表现反推初始参数应该怎么调整。你可以把训练过程想象成“训练一个容易被微调的模型”也就是找到一个特别好的起点从起点出发每个新任务只要走上几步就能到达低损失区域。这种思路在数学上很漂亮但我在实际使用中必须提醒大家它对计算资源的要求不低而且在训练分布和测试分布差异较大的时候梯度元学习的优势常常发挥不出来。还有一个工程上的坑是这类方法通常要展开多次梯度计算显存消耗高调参也敏感稍有不慎训练就不稳定。与梯度元学习并行发展的还有另一条线即“基于参数生成的元学习”。这类方法不直接优化初始参数而是用一个额外的生成网络根据支持集信息直接生成分类器的参数。它的好处是测试时不需要迭代更新推理速度和普通分类一致很适合工程部署。但代价是生成网络本身很难训练对小数据集尤其苛刻。2.3 第三波预训练与自监督正在重新定义少样本问题近几年小样本学习的研究重心发生了明显转移。过去大家拼命设计复杂的算法来解决“数据太少怎么办”现在越来越多的证据表明一个在超大规模数据上预训练过的通用视觉特征提取器哪怕不做任何小样本特殊优化直接拿特征做最近邻分类结果就能超过很多精心设计的元学习算法。这个现象听起来反直觉但实际上很好理解。预训练模型见过海量的图像分布它学习到的特征表征包含了丰富的语义信息比如纹理、形状、部件结构。新类别和预训练数据里的类别即使完全不同也共享大量的底层视觉结构。小样本学习算法要做的本质上就是在这个通用表征之上做快速适应地基打好了楼就好盖。自监督预训练在这个方向上的作用更明显。它不需要任何人工标注可以在大规模无标注数据上学习特征这正好缓解了小样本场景“标注稀缺”的痛点。我个人的判断是未来几年小样本图像识别的工作重心会有相当大一部分转移到“如何在强大的预训练特征之上设计更高效的适配模块”上而不是再去发明一个全新的学习范式。3. 评测基准里的那些隐形陷阱数据划分与跨域失效3.1 主流基准是怎么构造的小样本图像识别能快速发展很大程度上依赖一套相对统一的评测基准。研究者通常从一个规模较大的图像数据集中挑选若干类别作为基类另外选互不重叠的若干类别作为新类然后反复随机抽取N-way K-shot任务来评估模型。这里最关键也最容易被忽视的是基类和新类之间的划分方式。不同的划分方式会带来完全不同的难度。早期比较常见的划分方式是纯随机划分所有类别都来自同一个大领域的自然图像基类和新类在语义上非常接近模型只要学会了通用的视觉比较能力迁移起来就容易。后来出现了一些更难的数据集划分时会刻意让基类和新类来自不同的高阶语义类别比如基类里全是植物和日用品新类里全是某种特定动物这样模型就不能只靠“见过类似类别”来蒙答案必须真正学会理解新类的判别性特征。3.2 三类最容易翻车的评测陷阱第一类陷阱是数据泄露。小样本学习的标准设定是基类类别与新类类别完全不相交但不少人在构造实验时会把同一个类别的不同图片既放在训练阶段又放在测试阶段哪怕不是严格意义上的测试集泄露也会让评测结果虚高。尤其是在用公开数据集随机裁剪子集做实验时如果不仔细检查类别ID的冲突很轻松就会造出一个看起来精度很高但实际上没有意义的模型。第二类陷阱是类别粒度的不一致。有些数据集里的类别是粗粒度概念比如“汽车”作为一个类有些数据集里的类别是细粒度概念比如“某品牌某年款轿车的侧前方视角”。小样本模型在粗粒度类别上看起来效果很好一旦切换到细粒度类别同类之间的差异可能比异类之间的差异还小精度会断崖式下跌。实际业务中遇到的基本都是细粒度问题比如不同型号的电路板、不同品种的农作物病害所以实验室效果好到业务里未必顶用。第三类陷阱是跨域失效。很多论文的实验都在和训练数据同分布的测试类别上做精度报表漂亮但到了真实场景里光照、角度、背景、成像设备一变性能立刻打回原形。我在跨域小样本的复现实验里见过不少案例同一个模型在标准基准上能达到80%以上的精度换到一个新的成像域之后只剩不到50%。这也是为什么现在越来越多的研究工作开始专门讨论跨域评测基准而不是只在同一个数据源里自娱自乐。4. 从论文到落地我在真实项目里积累的实操经验4.1 先用预训练特征做Baseline别急着上元学习这是我踩过多少次坑之后最重要的经验任何小样本图像项目第一版模型都应该用“预训练特征 最简分类器”来做。具体来说用在大规模图像数据上预训练好的骨干网络提取特征然后尝试三种最简分类方式最近邻、线性分类器、原型分类。这个组合几乎不需要额外训练推理速度极快而且往往能给你一个意外高的起点。我经历过好几个项目团队花了几周时间实现和调优元学习算法最后发现性能比预训练特征加最近邻还低一截。这里面的原因并不复杂元学习算法的训练目标是在模拟的小样本任务上提升但模拟任务和真实任务之间存在分布差距算法在模拟上表现好不等于在真实上表现好。而当预训练特征本身已经很强时复杂的自适应机制反而可能破坏原有特征的空间结构。正确的做法是先把Baseline跑通确认特征提取器本身的性能边界如果Baseline已经能到70%左右那么后续方法选择的重点就应该放在“如何更有效地利用这K张支持集样本做决策”上而不是推翻重来。4.2 数据增强与扩充策略的性价比排序在样本极少的情况下数据增强几乎是必选项但不是所有增强方法都值得做。我的经验是要按性价比排序来做不要一上来就堆所有增强手段。首先最简单也最稳妥的是几何增强包括随机裁剪、水平翻转、旋转、缩放这些操作不改变图像的语义内容适合绝大多数视觉任务。其次是颜色抖动包括亮度、对比度、饱和度的微调它模拟的是光照环境的变化对鲁棒性有帮助但不要调得过猛否则会让模型学到错误的颜色关联。再往后是更复杂的增强比如混合增强、基于生成模型的样本合成、基于特征空间插值的增强等这些方法在特定场景下很有效但实现成本和调参难度都高需要谨慎评估。我自己的经验是对于每类只有5张图的场景几何增强加颜色抖动就能带来明显的提升这个提升往往比换一个更复杂的模型结构来得实在。另外一个值得注意的细节是数据增强不一定要在训练时对所有样本统一应用可以把原始样本保留不动只在构造支持集时对K张原图做增强扩充这样可以同时利用原始数据的真实性和增强数据的多样性。4.3 Transductive还是Inductive根据业务形态选择小样本学习里有一对容易被忽略的概念inductive和transductive。Inductive推理是标准的单样本推理模式模型看一张查询图根据支持集做一次判断各张查询图之间互不影响。Transductive推理则是批量预测模式模型一次拿到一批查询图可以利用这批查询图的整体分布信息来辅助决策比如统计查询集的特征分布来判断类别中心的偏移。在标准学术评测中transductive方法通常能比inductive方法高出好几个百分点因为查询集的分布信息相当于额外的无标注数据。但工业落地时能不能用transductive方法完全取决于你的业务流程。如果系统是单张图片实时传入的比如在线质检工位每一次来一张图那就只能做inductive推理如果是离线批量处理比如一批历史图片统一识别那transductive方法就能派上用场。我在一个离线图片归档项目里尝试过transductive方法提升确实可观但也要注意它的稳定性问题。批次的大小、查询集的类别分布形态都会影响结果极端情况下如果一批查询图全部属于同一个新类transductive方法的类别估计可能会严重跑偏。所以生产环境如果用这类方法一定要做批次粒度的监控。4.4 少样本场景的评价指标与调参建议小样本图像任务里很多人习惯只看平均精度但在实际项目中这个指标远远不够。当类别数较多且样本极少时少数困难类别会把整体精度拖低只关注平均精度会让你以为模型整体不错实际上某些关键类别完全不可用。我建议至少同时观察三个指标整体平均精度、每类精度标准差、以及业务上最关心的核心类别的单独精度。调参方面我认为小样本场景中最敏感的超参数不是学习率而是支持集图片的预处理方式。同样的增强策略在普通大规模训练里只是锦上添花在每类只有几张图的场景里却能直接决定成败。另一个容易踩坑的地方是骨干网络的参数量选择。很多人习惯性地用大网络但在小样本场景中大的骨干网络往往更容易过拟合到支持集上反而不如一个中等规模的网络加充足的数据增强来得稳。5. 当前的开放问题与我认为值得投入的方向5.1 跨域小样本问题比同域更难也更实用接下来聊几个我认为这个领域目前真正有价值的方向。第一个是跨域小样本问题也就是训练时的基类和测试时的新类不仅可以语义不同连图像风格、成像模态都可能完全不同。典型的例子是训练数据是普通自然图像测试数据是医学内窥镜图像、无人机视角图像或者红外图像。跨域条件下预训练特征的优势会被大幅削弱因为特征提取器没见过这种图像分布。跨域小样本里最突出的挑战是“域偏移”和“类别偏移”同时存在。模型不仅要判断“这个没见过的东西是什么”还要先解决“这种图像长什么样”。目前比较有希望的方向包括利用域自适应技术拉近特征空间的距离或者在预训练阶段就让模型接触更多样的图像域。我认为这个方向会在工业落地带来越来越大的价值因为真实场景没有哪个是干干净净的同一个数据源。5.2 分布外问题与小样本的结合和跨域问题相关但又不同的一类挑战是分布外检测也就是模型应该知道自己什么时候不知道。小样本场景下新类别的特征空间极其稀疏模型很容易把一张不属于任何已知类别的图像强行归类到某个新类中去。这个误差在真实业务中代价很高比如工业质检里一种完全没见过的缺陷类型如果被归类为某个已有缺陷类型就会导致漏检。我的建议是任何小样本分类系统上线前都要加一个拒绝机制。最简单的做法是在特征空间里设定一个距离阈值当查询图像离所有已知原型的距离都超过阈值时判定为“未知”而不是强行分类。这个阈值可以用验证集来调原则是宁可牺牲一点已知类别的召回率也要降低未知样本的误判率。别小看这个设计在很多严格监管场景里它才是系统能否被接受的关键。5.3 主动学习、人机协同与大模型辅助最后一个我长期看好的方向是把小样本学习放到完整的人机协同闭环里去思考。小样本学习本身是解决“数据少”的问题但现实系统中数据是可以持续增长的问题是如何花最小的标注代价获得最大的性能提升。主动学习正好互补模型先对一批无标注数据做预测筛选出最不确定、信息量最大的样本给标注人员标注后的样本继续补充到支持集中形成一轮一轮的正向循环。大模型的辅助作用同样值得关注。多模态预训练模型内化了大量视觉和语言知识可以为零样本和小样本任务提供更强的先验。比如通过图文对齐找到一个更好的特征空间让新类别的语义理解和特征定位都更准确或者用一个强大的通用模型对无标注数据做高质量伪标注再在小样本模型上筛选使用。当然这类方法对算力和工程实现都有要求但它确实代表了一个很清晰的趋势小样本学习不再是一个孤立的模块而是整个数据生产与模型迭代链路中的一环。我自己实际使用中的一个体会是小样本学习项目的成败往往不是取决于模型算法本身多么前沿而是取决于整个数据闭环设计得是否合理。你能不能在模型失败时快速定位是特征问题还是分类问题能不能高效地把新样本转化为支持集能不能在类别逐渐增多的过程中保持旧类别的稳定性这些工程问题综合起来决定了一个系统能不能从实验室里的演示变成生产线上的工具。把这个闭环想清楚比追着一篇篇新论文换算法要重要得多。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表