论文阅读笔记可微分EMD距离的DeepEMD确实治好了我的小样本焦虑这几年做小样本图像分类最折磨人的不是模型训练不起来而是“训练得很好换一个类别就崩”尤其当支持集和查询集之间出现形变、遮挡、背景差异时类内特征一散准确率直接跳水。大部分人第一反应是“加强特征提取器”或者“再加几个数据增强”但说实话这些都是在同一个度量空间里打转没有解决根本问题你拿什么距离去衡量两张图片“像不像”。最近的论文阅读笔记我刷到一篇《DeepEMD: Few-Shot Image Classification with Differentiable Earth Movers Distance》思路很有意思——它把图像分类问题重新定义成“用一堆局部特征块把查询图片逐步搬向支持图片”的最优传输问题用一种可微的推土机距离EMD当作度量自动找到两组图片之间最合理的匹配权重。这篇论文吸引我的地方在于它不是简单地把某个现成距离换掉而是连带把匹配过程做成了端到端可学习。换句话说它想通了一个小样本领域绕了很久的弯子与其强行把所有图像压进同一个全局向量空间不如在局部结构上做结构对齐让距离计算自己去“发现”哪些区域是真正可比的。这篇文章适合正在做小样本学习、少样本分类、图像检索方向的朋友或者对最优传输在视觉中的应用有兴趣的读者。我会从论文要解决的问题、方法的核心逻辑、训练与推理的细节以及我自己复现和迁移使用时踩过的坑这几个方向展开尽量把这套方法讲透。1. 论文准备解决的关键问题以及为什么非要用“搬运”的思路1.1 小样本分类的核心困难全局平均池化把空间信息全抹平了绝大多数小样本分类基线模型走的都是同一条路用骨干网络提取特征然后接一个全局平均池化GAP把整张图压成一个向量再用余弦距离或欧氏距离去比较查询图片和支持图片。这个方法在类间差异足够大时没问题但小样本场景里最棘手的情况恰恰是类内差异非常大而支持图片又只有一两张因为样本姿态、视角、物体部分遮挡等原因全局向量一平均真正有用的判别性细节也跟着被“平均”掉了。比如你拿一张“完整展开翅膀的鸟”作为支持图片查询图片里是一只“停在枝头侧身的鸟”。全局特征向量会把两只鸟的轮廓、背景、姿态全部混在一起比较结果可能是“不同物种的正面展翅鸟”比“同物种的侧面停栖鸟”在特征空间里更接近。这就是全局特征在小样本任务上的天然短板它假设两张图片在“整体”上相似而忽略了“局部区域的对应关系”。DeepEMD的动机很直白能不能不把整张图压成一个点而是保留特征的局部空间结构然后针对两张图片的多个局部特征块找到它们之间最优的匹配方式最后用这个匹配代价作为相似度1.2 为什么选择最优传输里的EMD而不是直接算余弦相似度你可能会问局部特征对齐这件事用注意力机制也能做为什么偏偏要用EMD关键还是小样本场景里“没有多余标签来训练一个复杂的对齐网络”。注意力机制当然可以做对齐但它需要额外的可学习模块和足够的数据去拟合而小样本任务每次只给你几个类、每类一两张图注意力模块在很多情况下学不到稳定的空间先验。EMD就不一样了它是一个非参数的全局最优匹配方案给定两组局部特征带权重的EMD自动寻找到底哪些块对应哪些块不需要额外训练只需要在测试时做一次优化求解。生活化类比一下你有一仓库的货物查询图上的局部块需要搬运到另一仓库支持图上的局部块每个货位有不同的需求量和单位成本两堆特征的距离EMD计算的就是把货物全部搬完所需的最小总运输成本。这个“最小搬运成本”天然就是一个度量距离而且它对局部形变、遮挡有更强的容忍度因为被遮挡的块在匹配时会被自动分配极低的权重不会像全局向量那样把遮挡区域的信息强行参与距离计算。2. 核心方法拆解从特征提取到可微分EMD每一步都在为“对齐”服务2.1 图像表示用空间位置信息换取局部结构的可比性DeepEMD的输入表示带着明确的空间意图。它没有像传统方法那样直接对整个特征图做平均池化而是保留了特征图的二维空间布局把每张图片表示成多个局部特征块并且每个特征块带有位置信息和权重。这个设计几乎是全篇方法的核心前提——只有保留了局部结构后面的匹配才有意义。具体来说论文用的是类似滑动窗口的嵌入表示从最后的卷积特征图上取若干个局部区域的特征每个区域被看作一个“货位”。对于支持集的每一张图片所有局部特征块都带有相同的初始权重而对于查询图片论文的做法更讲究——权重也设置为可学习的量让它能在训练中学到“哪些区域对分类判别更重要”。这一步相当于把整张图的判别性信息散落到各个空间位置后续的EMD即基于这种加权分布进行度量。在你第一次接触这个方法时最容易忽略的是权重不是等权平均的而是被纳入了可学习参数的范畴。大量后续论文在复现时直接把EMD当作度量模块接入却忘了处理权重的学习导致效果大打折扣。这一点在后面的训练复盘部分我会再展开。2.2 EMD的计算细节不要把常识性误解带进来最优传输问题有很多实现方式DeepEMD并不是直接使用原始形式那种约束极值求解而是用一种可约束的快速近似版本。它的核心思想是在保证支持集和查询集两边各自权重分布即总量一致的约束下寻找一个最优的“转移矩阵”使得运输总代价最小。论文采用的求解方式是IPOTInexact Proximal Optimal Transport一种迭代算法它能够在小样本场景下快速收敛又天然满足可微性。这也是标题中“Differentiable”一词的来源虽然EMD的原始定义适合做度量但它本身是一个线性规划问题直接用梯度下降优化很困难而IPOT给出了一条光滑近似的可微路线使得整个模型可以端到端地用反向传播训练。实际计算流程大致是这样提取支持图片和查询图片的特征块得到两组带权重的分布。计算两组特征块两两之间的地面距离ground distance论文中用的是余弦距离在某些修正实现里也有用欧氏距离试过。把地面距离当作运输成本用IPOT迭代计算最优匹配矩阵。将最终的最小运输总代价作为两张图片的相似性分数并转化为分类损失。值得注意的是这里的“地面距离”决定了物体局部块之间的语义距离而EMD又通过最优传输把地面距离结构化组合成一个全局度量。所以整个算子的可解释性也是它的卖点之一你能直接看到哪些块和哪些块进行了匹配、匹配权重有多大。2.3 网络结构到底加在哪一层骨干输出的特征图直接算距离论文提出的方法不限制具体骨干网络常用的是ResNet系列。在实现上骨干网络负责输出特征图然后特征图经过一个查找模块采样出若干局部特征块支持集与查询集的特征块共同送入EMD模块得到匹配代价。整个网络在训练时参数涉及两块一是骨干特征提取网络本身在backbone中微调二是权重生成相关的层比如位置权重学习模块。这种“在特征层做度量学习”的路线比“直接在向量空间做对比学习”更大的优势在于即使骨干网络没有刻意训练成“类间可分”只要它能输出结构合理的局部特征EMD仍然能找到可迁移的匹配关系。3. 论文里的实验设计以及我复现时的实测反馈3.1 论文报告的核心实验结论跨域的迁移能力最让我关注论文在几个常用的小样本分类基准上做了大量实验例如miniImageNet、tieredImageNet及跨域场景。给我印象最深的是不同“距离”和“特征表示”的消融对比同样是ResNet骨干把全局余弦相似度替换为DeepEMD的分数后准确率提升了十余个百分点而使用不同深度的骨干网络则显示越强的骨干与EMD结合的增益越明显。这说明DeepEMD的性能上限在很大程度上取决于特征提取的质量——这也是后来我迁移该方法到一个具体工业场景时最受用的一个判断依据。跨域实验的结论也很有价值在完全不同的域之间比如从自然图像到线稿、到纹理图像DeepEMD的准确率下降幅度明显小于传统方法。我个人的解读是全局欧氏距离习惯把不同域的数据映射到同一个特征空间强行比较而EMD允许“局部块尽量找各自最相似的对应”保留了结构上的灵活性因此在域偏移面前更稳。3.2 我自己复现时遇到的实际问题权重初始化太粗暴模型根本学不动按照论文结构复现第一步时我踩了一个典型的坑权重初始化。前面提到查询图片的局部特征块权重是参与训练的很多公开实现的默认初始化是“均匀权重”。在小样本数据量有限的条件下均匀初始化会让模型在早期误认为所有区域的重要性相同反向传播梯度分摊到每个位置后权重学习效率变得非常低。解决方式也不算复杂在训练早期把权重的学习率调成略高于骨干网络同时添加一个轻量的温度参数让权重分布的熵变得更温和。换句话说权重学习的信号一开始很弱你需要人为地给一点“放大”才能让它更快地发现判别性区域。这个经验在很多复现踩坑帖里都出现过但很少被明确写进论文。另一个值得注意的细节是距离度量中使用的温度系数。DeepEMD的后续版本或优化实现中会对距离矩阵乘上一个学习的温度标量让距离分布更加尖锐。在复现中我发现固定温度系数虽然稳定但无法适应不同数据集特征分布的差异而学习温度在训练充足时效果好但在训练不足时容易导致数值不稳定。建议先从固定温度开始训练稳定后再放开温度训练。4. 使用DeepEMD做实际小样本分类项目时你需要避开的几个关键坑4.1 特征图分辨率对结果的影响比想象中大得多论文中多数实验是基于输出尺寸较大的特征图例如25x25但我第一次迁移到实际场景时为了减少计算量把特征图缩小到了11x11甚至7x7结果准确率下滑非常多。原因是EMD匹配的粒度取决于局部块的数量。特征图越小局部块之间信息重叠越大匹配的区分度迅速下降特征图越大搬运计划的自由度越高但计算复杂度也随之爆炸。如果计算资源有限我更推荐的方案是保持特征图分辨率不变用稀疏化采样降低参与EMD的局部块数量而不是粗暴降低分辨率。举个例子保留25x25的特征图但只在每个2x2方格内选取一个中心点作为局部块这样既维持空间分布的覆盖面又将计算量压缩到将近原来的四分之一。实测下来这种“光滑采样”在精度和速度之间能达到较好的平衡。4.2 别把EMD当作黑盒可视化匹配矩阵反而能帮你快速找BugDeepEMD一个非常可贵的特性是它的最优匹配矩阵天然具有可解释性。我在一次实际分类任务中支持图片是“有黑色条纹斑点的猫头鹰”查询图片是“纯灰色猫头鹰”分类结果错误。事后我把匹配矩阵可视化发现大部分权重被分配到了背景区域说明特征提取器被背景信息主导了。这时候你其实不需要重新训练模型只需要检查特征提取器和权重生成层是否过于关注背景纹理。我采用的方法是在训练阶段给支持图片做裁剪和擦除增强强制权重学习关注前景对象同时在损失函数上为查询图片权重加一个轻量的一致性正则让它在不同增强版本下尽可能选择相同的判别性区域。这个修正让准确率回升了很多。4.3 小样本在训练集类别少的情况下EMD优势反而可能变成劣势DeepEMD的思路在小样本中与其说是“在学类别”不如说是在学“局部结构的对应关系”。如果你的训练集类别非常少且类间视觉差异极大EMD在训练集上容易退化成简单重复匹配“同一形状区域”的先验反而削弱了模型对新类的泛化能力。我在项目里遇到的情况是训练集只有十几个大分类每一个分类的对象在形态和位置上高度一致导致最终测试新类时EMD对形变的容忍度显著下降。建议你在这种情况下引入领域内的合成形变数据比如镜像、轻微旋转、局部遮挡对训练集做增广强制性逼迫匹配模块学习更具弹性结构的对应关系。5. 我对这篇论文的整体评价以及在实际项目中该如何用它5.1 方法的优点和适用场景DeepEMD真正解决的是小样本分类中“全局向量度量失真”的痛点。它在处理局部遮挡、空间形变、背景干扰较严重的图像时比基于全局特征的度量方法明显更稳。适用场景包括商品识别同一产品的不同角度、自然图像细粒度分类、医学图像小样本分类等。在实施时有一个取舍EMD的迭代求解比直接算向量距离慢但它换来的增益在大类间差异小或类内形变大的任务里相当可观。如果你所在的任务里全局特征已经能轻松达到95%以上准确率那DeepEMD可能不是最优选但如果卡在细粒度分类或跨域场景上它值得一试。5.2 后续扩展思路以及个人实践建议我后来把DeepEMD的匹配矩阵接进了一个基于图神经网络的小样本分类框架让EMD算出的匹配权重充当图中边的初值再在支撑图上学边权修正效果有进一步提升。这也说明DeepEMD并不仅限于做分类度量它产出的匹配矩阵本身是一种高质量的结构先验可以用作其他模块的输入特征。在工程落地层面我个人建议这样三步走先用论文的官方设定在标准数据集上复现确认baseline然后用自己的数据做小规模finetune在权重维度和温度系数上重点调试最后再考虑用采样策略加速或与现有特征提取器做级联改造。每一步都有明确的数据指标可以参考不至于上来就乱了方向。这些年读了不少小样本分类的文章很多方法的方向是在特征空间里做文章变着花样地设计损失函数。DeepEMD的做法给我最大的启发是它把“距离度量”本身当作可以学习的结构对齐过程而不仅仅是几何空间的一个公式。这让我在小样本项目的架构设计上又多了一个值得信赖的备选项。