这是一篇CVPR2020 oral的论文
论文链接:https://arxiv.org/abs/1912.06798
代码链接:https://github.com/MalongTech/research-xbm
1. 预备知识
首先要知道深度度量学习(DML)主要分两类:pair-based和proxy-based(其中pair-based代表性损失函数有contrastive loss, triplet loss, N-pair loss和multi-similarity (MS) loss等等;而proxy-based代表性损失函数有Softmax等)。
这两类深度度量学习的区别:
1) pair-based的方法特征是从当前模型前向出来的,可以很好的表示当前模型,但是其计算量大,信息局限,只可以利用当前mini-batch的信息,不能看到模型在整体的数据的表现,一直在做局部的优化;
2) proxy的方法可以有global的信息,但是,proxy是基于历史信息,或者是网络一步步学过来的,未必能够准确的表达当前模型,譬如,在softmax中,它是fc层的,在memory的方法中,它是存储在memory中的特征。
本文主要考虑的是pair-based类的损失函数,实验也是在这上面进行的。
详细可以查看知乎:https://zhuanlan.zhihu.com/p/141409820
2. 问题
对于深度度量学习(DML)来说,挖掘出含有信息的困难样本是至关重要的,但是本质上这个任务受到mini-batch训练的限制,即在每次迭代中只能访问一个mini-batch的样本进行模型优化
3. Cross-Batch Memory Embedding Networks
1)Delving into Pair-based DML
现有的所有pair-based DML方法通过使用文献【1】中描述的GPW框架可以定义到一个统一的pair-weighting形式:
其中m是mini-batch的大小,w_ij是分配给S_ij的权重。
由此我们可以看出,实际上,设计pair-based DML的主要思路就是在一个mini-batch中为成对的数据样本分配一个更好的权重机制。由下Figure 1中Left和Middle可以看到,在大规模数据集中mini-batch越大R@1的只能性能越好。直观地说,负对的数量会随着mini-batch大小的增长而二次增长,这自然会提供更多的信息。我们的直觉是简单地收集足够的信息负对,而不是开发另一种高度复杂的算法来给信息对加权,在这种情况下,一个简单的加权方案,例如对比损失,可以很容易地胜过最先进的加权方法。这为解决DML中的hard挖掘问题提供了一种直接但更有效的新途径。
2)Slow Drift Phenomena
训练过程中,已经过去的mini-batch嵌入通常被认为是过时的,因为模型参数在整个训练过程中不断变化。这种过时的特征总是被丢弃了,但我们知道,通过识别‘’慢漂移‘’现象,它们可以成为一种重要的资源,同时无需计算。我们通过测量同一实例在不同的训练迭代下计算出的特征的差异来研究嵌入的漂移速度。形式上,在拥有步长?t的t-th次迭代中,输入x的特征偏移是定义为:
如下Figure 3所示,我们用对比损失从头开始训练GoogleNet,并计算一组连续采样实例在不同步骤{10, 100, 1000}下的平均特征漂移。如仅仅在10次迭代内,特征漂移始终很小。大的step,如100和1000,在早期特征改变明显,但是到大约3K迭代次数时就相对稳定。而且,当学习率下降,偏移变得非常缓慢,这种现象在这里定义为‘slow drift’(慢偏移),即在一定的训练次数下,实例嵌入的漂移非常缓慢,导致不同的训练迭代所生成的特征之间存在微小的差异。
此外,本论文证明了这种慢漂移现象可以为基于配对的损失的梯度误差提供一个严格的上限。为了简单起见,论文考虑单个负对的对比损失
其中v_i,v_j是当前模型的嵌入。
其中
是v_j的近似值。Lemma 1表明,在Lipschitz假设下,梯度的误差由嵌入误差控制。因此,慢漂移现象保证了跨小批挖掘可以为基于成对的方法提供有效信息的负对。
3)Cross-Batch Memory Module
本文提出的cross-batch memory(XBM)模块算法步骤如下:
实际上,就是在pair-based DML上用XBM进行hard负样本挖掘。对于一个pair-based loss,基于【1】中的GPW,可以将其铸造成公式(1)中一个mini-batch内成对相似关系的统一加权公式(在一个mini-batch中计算一个相似矩阵S)。执行XBM机制后,可以简单在当前mini-batch样本和存储的样本嵌入之间计算一个cross-batch相似矩阵。形式上,
其中注意相似矩阵
我们研究了我们的XBM机制的hard挖掘能力,我们研究了每个记忆模块产生的有效负对的数量,证明了具有非零梯度的负对是有效的。统计结果如Figure 4所示。在整个训练过程中,我们的记忆模块每次迭代稳定地贡献约1,000hard负对,而少于10个有效对的是由原来的min-batch机制产生。
4. Experiments and Results
1 )实现总框架图
2)最新方法实验对比
分别在三个数据集(SOP,In-Shop,VehicleID)上进行实验:
3)对比试验
- 不同的pair-based方法对比
contrastive loss作为基本pair-based方法性能最好
- GPU内存消耗情况对比
- 使用contrastive loss作为基本pair-based方法,不同mini-batch大小的对比
mini-batch大小越大,性能越好
5. 结论
1)发现了嵌入漂移在训练过程中异常缓慢的慢漂移现象;
2)此基础上,为pair-based DML提出了一种概念简单、易于操作和内存高效的cross-batch挖掘机制——一个跨批内存(XBM)模块来动态更新最近的mini-batch实例的嵌入,从而使我们能够在多个mini-batch甚至整个数据集中收集到足够的hard负对;
3)我自己在已有框架下,triplet loss优化的网络模型中直接插入XBM进行实验,不知道是不是参数调整不到位还是其他原因,最后呈现的效果并不好。这说明这个XBM虽然是个独立模块,插入已有框架很简单,但是效果另说。
以上只是个人拙见,若存在问题欢迎指出一起讨论!!(o)/~