0%

MTMCT方向的度量学习梳理

MTMCT方向的度量学习梳理。

背景

在以行人重识别(Person Re-Identification, ReID)为代表的一些视觉任务中,测试阶段出现的类别(即具体的行人身份或目标ID)在训练阶段是未知的。这从根本上要求模型具备提取具备强判别力(Discriminative)且高泛化性特征的能力,而非单纯地记忆训练集中的类别标签。

度量学习,Metric Learning 正是解决这一核心矛盾的关键技术途径。其本质旨在通过深度神经网络构建一个非线性的特征映射函数,将存在于高维像素空间的原始数据投影至低维的嵌入空间(Embedding Space)或流形(Manifold)上。在此度量空间中,距离度量(如欧氏距离或余弦相似度)直接对应于样本间的语义相似度。

理想的度量学习模型应当满足两个基本几何约束:

  • 同类样本在特征空间中高度紧凑(Intra-class Compactness)
  • 异类样本在特征空间中尽可能分离(Inter-class Separability)

问题定义

从数学角度形式化地看,度量学习的目标是学习一个参数化的映射函数:

fθ:XRdf_\theta: \mathcal{X} \rightarrow \mathbb{R}^d

其中 X\mathcal{X} 为输入图像空间,Rd\mathbb{R}^ddd 维特征向量空间。

对于任意给定的三元组样本 (xa,xp,xn)(x_a, x_p, x_n),其中 xax_a 为锚点样本,xpx_p 为与 xax_a 同一身份的正样本,xnx_n 为不同身份的负样本,度量学习旨在优化参数 θ\theta,使得在映射后的特征空间中满足:

D(fθ(xa),fθ(xp))D(fθ(xa),fθ(xn))D(f_\theta(x_a), f_\theta(x_p)) \ll D(f_\theta(x_a), f_\theta(x_n))

其中 D(,)D(\cdot, \cdot) 为预定义的距离度量函数。

当前优化的方向

首先是传统损失函数的优化瓶颈,以最经典的 Softmax 为例,Softmax 交叉熵损失函数虽然在概率空间能够有效区分训练类别,但在特征空间并未施加显式的距离约束,导致学习到的特征在类内分布较为松散。

具体来说,Softmax 的目标是最大化正确类别的后验概率。在数学上,只要特征向量 fi\mathbf{f}_i 在正确类别权重 wyi\mathbf{w}_{y_i} 方向上的投影比在其他类别方向上的投影稍微大一点,Loss 就会减小。也就是说,只要 AA 被分到了类 A,哪怕它仅仅跨过了决策边界一点点,模型也认为任务完成了。但在度量学习任务中,不仅 AA 要被分到类 A,而且 AA 必须尽可能靠近类 A 的中心,并且远离类 B。

其次是困难样本挖掘的策略设计。在海量训练数据中,绝大多数样本对包含的梯度信息极其微弱,即模型已能轻易区分大部分不同类别,只有少数位于决策边界附近的困难样本对模型的优化具有实质性贡献。如何高效地筛选出这些高价值样本,同时避免因标注噪声导致的模型坍塌,是设计高效度量学习系统的关键。

此外,特征空间的几何结构选择亦至关重要。早期的研究多基于欧氏空间进行度量,但近年来的研究表明,将特征归一化并约束在超球面上,利用角度距离代替欧氏距离往往更加有效。

具体来说,在传统的欧氏空间(欧氏距离)中,特征向量 f\mathbf{f} 的长度(范数 f\|\mathbf{f}\|)代表了模型对该样本的置信度或显著性,在某个方面可以理解为图像的清晰度。在计算欧氏距离 f1f2\| \mathbf{f}_1 - \mathbf{f}_2 \| 时,模长的差异会掩盖方向的相似性。模型可能会因为两张图片的“清晰度”相近而认为它们是同一个人。

而超球面(Hypersphere)的解法:通过归一化,将所有特征映射到模长为 1 的超球面上。模型被迫只通过“方向”来判别身份,消除了图像质量、光照等因素带来的幅值干扰。

相关工作(REID与MTMCT方向)

深度度量学习范式

深度度量学习(Deep Metric Learning, DML)旨在通过深度神经网络将语义相似的图像映射到邻近的特征空间。根据优化目标的构建方式,现有的主流方法可大致划分为基于样本对(Pair-based)的方法和基于代理(Proxy-based)的方法两大类。

基于样本对的方法直接在样本之间构建约束。早期的开创性工作如 Siamese Network(孪生网络)引入了对比损失(Contrastive Loss),该方法接受一对样本作为输入,通过拉近正样本对距离并推远负样本对距离来学习特征表示。

Contrastive Loss

假设有一对输入样本 (xi,xj)(x_i, x_j),其对应的特征嵌入为 f(xi)f(x_i)f(xj)f(x_j)。我们定义这两者在特征空间中的欧氏距离为:

dij=f(xi)f(xj)2d_{ij} = \| f(x_i) - f(x_j) \|_2

为了区分样本对的关系,定义标签 y{0,1}y \in \{0, 1\}

  • y=1y=1 表示同类样本(Positive Pair)
  • y=0y=0 表示异类样本(Negative Pair)

对比损失函数的标准形式如下:

L(dij)=12[ydij2+(1y)max(mdij,0)2]\mathcal{L}(d_{ij}) = \frac{1}{2} \left[ y \cdot d_{ij}^2 + (1 - y) \cdot \max(m - d_{ij}, 0)^2 \right]

其中,m>0m > 0 是一个预设的阈值(Margin)。

这个公式不是很好理解,我们拆解yy的两种情况:

  • y=1y=1 时,同类拉近,公式简化为 L=12dij2\mathcal{L} = \frac{1}{2} d_{ij}^2。这是一个二次函数,其最小值在 dij=0d_{ij}=0 处取得。无论正样本对靠得有多近,损失函数始终施加一个向心的拉力,让他们可以更加靠近。
  • y=0y=0 时(异类推远)公式简化为 L=12max(mdij,0)2\mathcal{L} = \frac{1}{2} \max(m - d_{ij}, 0)^2。这是一个分段函数。只有当 dij<md_{ij} < m 时,损失才大于 0。如果两个不同类别的样本离得足够远(dijmd_{ij} \ge m),模型认为它们已经安全,LossLoss 变为 0,不产生任何斥力。如果它们靠得太近(dij<md_{ij} < m),损失函数会产生一个斥力,将它们推开,直到距离至少为 mm
Triplet Loss

对比损失是二元的,它孤立地看正对(Positive Pair)或负对(Negative Pair)。其数学局限在于:

  • 它迫使所有正对的距离 d(a,p)d(a, p) 趋近于 00
  • 它迫使所有负对的距离 d(a,n)d(a, n) 必须大于固定值 mm

FaceNet 提出的三元组损失(Triplet Loss)将约束关系扩展至三元组 (Anchor,Positive,Negative)(Anchor, Positive, Negative),不再强制要求正负样本对的绝对距离,而是关注它们之间的相对距离差。这种相对约束极大地提升了模型在人脸识别和行人重识别等开集任务中的判别能力,成为该领域的经典基准。

三元组损失的函数定义为:

L=max(d(a,p)d(a,n)+α,0)\mathcal{L} = \max(d(a, p) - d(a, n) + \alpha, 0)

在三元组约束下,模型不再局限于 d(a,p)0d(a, p) \approx 0。只要 d(a,p)d(a, p)d(a,n)d(a, n) 小一个间隔 α\alpha 即可。比如,如果某人的特征本身较分散(例如姿态多变),模型允许其 d(a,p)d(a, p) 稍大(如 0.5),只要负样本 d(a,n)d(a, n) 被推到更远(如 1.0)即可。

困难样本挖掘策略

在度量学习的训练过程中,样本的选择策略对模型性能的影响往往大于损失函数本身。由于深度网络具有强大的拟合能力,随着训练的进行,绝大多数随机采样的三元组均满足距离约束,这些无效样本不仅浪费计算资源,还会导致梯度消失,使得模型无法进一步优化决策边界。

为了解决这一梯度稀疏问题,困难样本挖掘(Hard Negative Mining)成为必然选择。经典的挖掘策略倾向于寻找那些使得损失函数值最大的“最难”样本。Hermans 等人在行人重识别任务中系统性地验证了多种采样策略,并提出了 Batch Hard(TriHard)采样方法。

该方法不再依赖全数据集的离线挖掘,而是动态地在每个训练批次(Batch)内,针对每一个 Anchor 样本,选取距离最远的正样本和距离最近的负样本构建三元组。这种在线(Online)挖掘策略在保证训练稳定性的同时,显著提升了模型对外观相似个体的区分能力,目前已成为 ReID 领域的标准配置。

Batch Hard (TriHard)

定义一个 Batch 的构成:随机抽取 PP 个身份(ID),每个身份抽取 KK 张图片。Batch 总量 N=P×KN = P \times K
对于 Batch 中的任意一个锚点样本 xaix_a^i(属于身份 ii),TriHard 损失函数的数学表达式为:

LBH=i=1Pa=1K[maxp=1Kd(f(xai),f(xpi))最难正样本距离minj=1P,n=1Kjid(f(xai),f(xnj))最难负样本距离+α]+\mathcal{L}_{BH} = \sum_{i=1}^{P} \sum_{a=1}^{K} \left[ \overbrace{\max_{p=1 \dots K} d(f(x_a^i), f(x_p^i))}^{\text{最难正样本距离}} - \underbrace{\min_{\substack{j=1 \dots P, n=1 \dots K \\ j \neq i}} d(f(x_a^i), f(x_n^j))}_{\text{最难负样本距离}} + \alpha \right]_+

我们在之前一篇文章中详细解释了这一方法,其核心概念为类内差异的最大化,和类间距离的最小化。

  • 最大化类内差异(Max-Pooling in Positives):maxd(a,p)\max d(a, p) 找到了当前 ID 下分布最散的样本。这是在优化该类别的半径,强制将离群点(Outliers)拉回中心。
  • 最小化类间距离(Min-Pooling in Negatives):mind(a,n)\min d(a, n) 找到了距离当前类别最近的异类。这是在探测决策边界。只有通过推开这些“最近邻”的异类,才能在特征空间中腾出足够的缓冲区。

序列深度度量学习方法

集合空间的映射形式化

在基于序列的度量学习中,输入对象不再是单一的样本 xXx \in \mathcal{X},而是一个包含 TT 帧图像的序列集合 S={x1,x2,,xT}\mathcal{S} = \{x_1, x_2, \dots, x_T\},其中 TT 为变量。

数学上,我们的目标是学习一个非线性映射函数

Φ:XTRd\Phi: \mathcal{X}^T \rightarrow \mathbb{R}^d

将高维的图像序列张量投影为低维的固定长度嵌入向量。
这一映射过程必须满足两个关键的数学性质:

  • 置换不变性(Permutation Invariance): 对于集合模型而言,特征表示不应受输入帧顺序的影响(除非显式建模动作信息),即 Φ(x1,x2)=Φ(x2,x1)\Phi(x_1, x_2) = \Phi(x_2, x_1)
  • 尺寸不变性(Size Invariance): 无论输入序列长度 TT 是 5 帧还是 50 帧,输出特征向量的维度 dd 必须恒定。为此,序列度量学习通常采用“编码-聚合”(Encode-Aggregate)的二阶段数学范式:首先通过 CNN 骨干网络 fθf_\theta 将每一帧映射为帧级特征 vt=fθ(xt)v_t = f_\theta(x_t),随后通过时序聚合函数 G()G(\cdot) 生成最终的序列表征 e=G({v1,,vT})\mathbf{e} = G(\{v_1, \dots, v_T\})

基于注意力的时序聚合机制

最朴素的聚合函数是时间平均池化(Temporal Average Pooling, TAP),即 Gavg=1TvtG_{avg} = \frac{1}{T}\sum v_t。然而,从信息论角度看,序列中的每一帧所含有的“身份信息量”是不均匀的(例如,遮挡帧的信息熵极高,包含大量噪声)。

为了最大化特征信噪比,现代方法(Quality Aware Network for Set to Set Recognition)引入了**注意力机制(Attention Mechanism)**作为一种可学习的加权算子。

数学上,这等价于学习一个评分函数 h(vt)h(v_t),用于估计第 tt 帧的特征质量。加权聚合过程定义为:

eatt=t=1Tαtvt\mathbf{e}_{att} = \sum_{t=1}^{T} \alpha_t \cdot v_t

其中权重 αt\alpha_t 需满足概率单纯形约束(Sum-to-one),通常通过 Softmax 函数获得:

αt=exp(wTtanh(Wavt+ba))τ=1Texp(wTtanh(Wavτ+ba))\alpha_t = \frac{\exp(\mathbf{w}^T \tanh(\mathbf{W}_a v_t + \mathbf{b}_a))}{\sum_{\tau=1}^{T} \exp(\mathbf{w}^T \tanh(\mathbf{W}_a v_\tau + \mathbf{b}_a))}

此处,Wa,ba,w\mathbf{W}_a, \mathbf{b}_a, \mathbf{w} 均为参与反向传播优化的参数。该数学结构迫使模型在特征空间中自动进行“去噪”,梯度下降过程会抑制那些与身份主向量正交的噪声分量的权重。

集合间距离度量与优化目标

定义了序列特征 Φ(S)\Phi(\mathcal{S}) 后,核心问题在于如何定义两个集合 Si\mathcal{S}_iSj\mathcal{S}_j 之间的度量 D(Si,Sj)D(\mathcal{S}_i, \mathcal{S}_j)

  • 聚合嵌入距离(Aggregated Embedding Distance):最直接的方法是在聚合后的特征向量上计算欧氏距离:

D(Si,Sj)=Φ(Si)Φ(Sj)2D(\mathcal{S}_i, \mathcal{S}_j) = \| \Phi(\mathcal{S}_i) - \Phi(\mathcal{S}_j) \|_2

这种方法计算效率最高,且完全兼容标准的 Triplet Loss。

  • 最小点集距离(Minimum Set Distance):为了解决聚合带来的信息平滑问题,可以保留帧级特征,定义两个集合的距离为“最佳匹配帧”之间的距离:

Dmin(Si,Sj)=minvnSi,vmSjvnvm2D_{min}(\mathcal{S}_i, \mathcal{S}_j) = \min_{v_n \in \mathcal{S}_i, v_m \in \mathcal{S}_j} \| v_n - v_m \|_2

这种非参数化的度量方式在数学上允许序列在局部进行对齐,对于处理视角剧烈变化(如从正面逐渐转到背面)的序列具有更强的几何解释性。