深度度量学习--监督的方法

41 阅读9分钟

简介

我们知道度量学习的目标是创建一个距离度量,确保相似的数据点被紧密地组合在一起,而不相似的数据点则相距甚远。这是通过学习以下特征来实现的 最大化不同数据组之间的距离(类间距离),最小化同组数据点之间的距离(类内距离)。.通过这样做,我们可以确保我们学习的特征能够区分不同的数据组,同时也能够识别这些组内的相似性。

三重损失和对比损失的局限性

Triplet Loss和Contrastive Loss是深度度量学习中两个常用的损失函数。尽管它们很受欢迎,但它们确实有一些局限性和问题被研究人员发现:

  1. 采样问题:Triplet Loss和Contrastive Loss都需要精心挑选的样本进行训练才能有效。在Triplet Loss中,我们需要选择满足某些标准的三联样本,例如有一个锚、一个正面和一个负面的样本。在Contrastive Loss中,我们需要选择一对相似或不相似的样本。这个过程可能很耗时,计算成本也很高,如果不仔细选择样本,还可能导致过度拟合。
  2. 扩展问题: 一个问题是扩展问题,即很难保证具有相同标签的样本会被拉到空间中的一个共同区域。这个问题在大量的类和样本中变得更加明显。此外,在小批量训练期间,这些损失函数只能在局部强制执行该批样本的结构,而不是全局。这意味着它们可能无法捕捉到数据的整个结构,从而导致次优嵌入。

探索替代对比性方法的方法

在深入了解 Center Loss(Wen等人,2016)的具体内容之前,值得讨论一下Softmax Loss,因为它是解决上述问题的先锋之一,而Center Loss是解决这些问题的第一个胜利者。

Center Loss

在多类分类问题中,我们通常在神经网络的顶部添加一个线性层来对输入进行分类。这个层由一个矩阵W和一个向量b表示。我们用Softmax损失来衡量这个线性层对一批N个样本的预测的准确性。Softmax的公式为:

image.png

image.png

从上面我们可以观察到:

(i) 在softmax损失的监督下,深度学习的特征是可分离的,

(ii) 深度特征的判别能力不够,因为它们仍然显示出明显的类内变化。

因此,不适合直接使用这些特征进行度量学习,但它具有良好的类间变化特性。中心损失(Center Loss)的想法是在Softmax Loss的基础上增加一个新的正则化项,将特征拉到相应的类中心。

image.png

Center Loss 通过提供类中心来解决 Expansion Issue  从而迫使样本聚类到相应的类中心。它还解决了采样问题,因为我们不再需要执行硬样本挖掘了。

中心损失的局限性

仍然不能保证你会有一个大的类间变异性,因为离零更近的聚类会从正则化项中受益更少。为了使它对每个类都 "公平",我们为什么不强制要求类中心与中心的距离相同?让我们把它映射到一个超球体上。

SphereFace

在中心损失中,我们的想法是让每个类的特征以其类中心为中心。现在我们可以修改softmax函数,这样:

1.我们可以重写softmax损失函数,其中(Weii)现在可以被认为是不同公制空间中的类中心,如果我们进入极坐标。
2.归一化权重,使∥Wj∥=1, ‖Wi‖=1。
3.固定偏置向量b=0,以方便以后的分析。

image.png

对于修正的Softmax,类ii和jj之间的决策边界实际上是两个类中心向量WiWi和WjWj之间的平分线。有这样一个薄的决策边界不会使我们的特征有足够的辨别力--类间的变化太小了。因此,SphereFace的第二部分--引入边际。我们想放大两个类之间的角度。

我们的想法是,不要求所有j=1,...的cos(θi)>cos(θj),而是要求m(j≠i)的cos(θj)。,m(j≠i)将一个样本归入第i类,而不是像Modified Softmax那样,我们另外强制要求一个余量μ,这样,只有当所有j=1,...,m(j≠i)的cos(μθi)>cos(θj)时,样本才会被归入第i类,要求θi∈[0,πμ]。

但是,cos函数有其局限性,它是一个周期性的函数,所以我们用一个更平滑的函数来代替它的收敛性。我们用单调递减的角度函数ψ(θ)代替cos(θ),我们定义为ψ(θ)=(-1)kcos(μθ)-2k,对于θ∈[kπ/μ, (k+1)π/μ]和k∈[0,μ-1]。因此,SphereFace的最终形式是:

image.png

SphereFace推出后,许多新方法被开发出来,利用角距离与角余量。值得注意的是,这些方法只在一种特定的学习类型中起作用,这种学习类型被称为监督的深度度量学习。在其他情况下,例如在测试过程中没有标注数据或有许多不同类型的数据,对比学习方法仍然被认为是一个好的选择。

CosFace损失

SphereFace的决策边界是根据角度空间的余弦来创建的。这可能使优化变得困难,因为余弦函数并不总是单调递减。为了解决这个问题,需要一个额外的技术,使用一个不同的函数,确实是单调递减的。此外,SphereFace的决策余量是基于角度的,这意味着不同类别有不同的余量。因此,类之间的一些特征比其他特征有更大的边际,这可能会降低模型区分它们的能力。

CosFace提出了一种更简单但更有效的方法来定义边距。这与SphereFace类似,对权重矩阵W的行进行标准化处理,即∥Wj∥=1,并将偏差b=0归零。此外,我们也对特征z(由神经网络提取)进行标准化处理,因此∥z∥=1。然后,CosFace目标定义为:

image.png

其中s被称为缩放参数,m被称为边际参数。它在余弦空间而不是角度空间(如A-Softmax)定义了一个决策余量。因此,对于C1来说,cos(θ1)被最大化,而cos(θ2)被最小化(对于C2也是如此),以进行大边际分类。

image.png

ArcFace 损失

Arcface类似于cosface,其中:-
1. 偏置b=0
2.权重被归一化||Wj∥=1
3.特征向量也被归一化 ∥z∥=1
4.但是,与CosFace损失函数不同的是,它是在角面而不是余弦空间中定义余量。

image.png

其中s是缩放参数,m是余量参数。

image.png

为了使arcface变得更好,我们做了进一步的改进:-

  1. 如何选择超参数s和m?
    AdaCos:自适应缩放余弦对数,有效地学习深度人脸表征

  2. 每个类的多个中心
    当类内样本差异较大时,将样本压缩到嵌入空间中的一个聚类是不可取的,当大型和嘈杂的数据集由于错误的样本产生高损失值时,训练会受到影响。
    子中心ArcFace:通过大规模的嘈杂网络人脸提升人脸识别率

  3. 处理不平衡的数据集

    为了使模型在严重不平衡的情况下更好地收敛,较小的类需要有更大的边际,因为它们更难学习。与其根据类的大小手动设置不同的边际水平,不如引入动态边际,这是一个将类的大小映射到边际水平的连续函数系列。
    带有动态边际的ArcFace。谷歌地标识别2020竞赛第三名解决方案

课程失颜

这个损失函数包含了课程学习的概念,它涉及到以逐渐增加的难度顺序呈现训练实例。CurricularFace在不同的训练阶段动态地调整容易和困难样本的重要性,以实现更有效和高效的训练策略。损失函数根据样本的困难程度分配不同的权重,容易的样本在早期训练阶段被分配更多的权重,较难的样本在后期阶段被分配更多的权重。

这种方法允许模型首先从较简单的例子中学习,逐渐增加训练例子的难度,从而促进更好的学习和概括。

image.png

ElasticFace损失

边际惩罚softmax损失,如ArcFace和CosFace,假设不同身份之间和内部的测地距离可以用固定的惩罚边际来平等学习。然而,这样的学习目标对于具有不一致的类间和类内变化的真实数据来说是不现实的,这可能会限制人脸识别模型的分辨力和通用性。ElasticFace loss,通过提出弹性惩罚边际损失来放松固定惩罚边际的约束,允许灵活地推动类的可分离性。其主要思想是在每次训练迭代中利用从正态分布中抽取的随机边际值。这样做的目的是给决策边界以提取和缩减的机会,为灵活的类分离性学习留出空间。

image.png

参考文献

  1. hav4ik.github.io/articles/de…
  2. "CosFace:用于深度人脸识别的大边际余弦损失。"CVPR 2018。
  3. "A Discriminative Feature Learning Approach for Deep Face Recognition"。ECCV 2016。
  4. "SphereFace:用于人脸识别的深度超球体嵌入。"CVPR 2017。
  5. "ArcFace:用于深度人脸识别的加法角差损失。"CVPR 2019。
  6. "谷歌地标识别2020竞赛第三名方案"
  7. "CurricularFace:用于深度人脸识别的自适应课程学习损失"CVPR 2020
  8. "ElasticFace:用于深度人脸识别的弹性边际损失" CVPR 2022