← 阅读室全部精读正在排版公式与图表…
PAPER ANALYZER · P24 · 跨场景方向

PCFRL:哪些负样本人脸其实应该靠近

从邻域亲和度到假负样本校准,逐项核对公式与评估实现

Liu 等 · IJCV 2025 · DOI 10.1007/s11263-025-02348-z · 学术型 · 核查于2026-10-23

一句话总结

PCFRL 在 PCL 上加入分支独立的邻域亲和度与正对校准;阈值、批量组成和对数内权重是理解关键。

从 PCL 继续:不同图片真的都应该互相远离吗

Sample-Cohesive Pose-Aware Contrastive Facial Representation Learning 发表于 IJCV 2025,DOI 为 10.1007/s11263-025-02348-z。本文沿着 PCL 的姿态解耦思路继续研究通用人脸表征:在自监督阶段,没有身份、表情或姿态真值帮助选择正对,通常只把同一图片的增强当作正样本,其余图片一律推开。这个方便的规则可能把语义相近的样本也错误地排斥。

例如两张不同人的人脸都朝左转,对姿态分支而言,它们可能应该接近;两张来自不同视频的脸表现出相近局部动作,对面部因素也可能提供共享信息。所谓假负样本,就是被训练规则当作负样本、实际上在当前表征语义下值得靠近的样本。它不要求两个图片完全相同,也不等于两个人身份相同。

PCL 已经把姿态与面部因素分开,但其对比学习仍受负对构造限制。PCFRL 增加邻域相关的亲和度分析,在两个分支分别寻找候选假负样本,并把合适候选校准为正关系。这里的学习顺序是 PCL 的机制先修、PCFRL 的样本关系扩展,不是推理时必须先后运行两个独立模型。

三个原文关键词“sample-cohesive”“pose-aware”“negative samples”分别强调样本凝聚、因素语义和负对校准。凝聚不代表所有人脸混成一团;只有符合某个分支关系的候选才应靠近。面部与姿态分支的邻居可以不同,这正是分开计算亲和度的理由,而不是在一个公共列表里简单挑相似图片。

Figure 1 对比前序方法与新增机制,Figure 2 展示整体网络,Figure 3 展示邻域亲和度。初学者应在阅读损失前手工画一个小样本图:有些点直接距离近,有些点共享相似邻居。本文要利用的不仅是两点直接相似,还包括它们与其他样本的关系模式。

保留姿态解耦,再改变正负样本集合

基础部分延续姿态解耦解码器。原图与翻转图经过共享主干,形成姿态因素与面部因素;通过原组合与交换组合重建图像,再以正交约束减少因素重叠。本文的重点不是重新发明这部分,而是在此基础上改变对比学习的训练关系。分析增益时要与同样基础网络的 PCL 对照,而不只与很弱的随机基线对照。

邻域亲和度分析 NPA 先计算批量样本的余弦相似度矩阵,再计算两样本对于其他点的相似度乘积之和。这里的“邻域”在公式中使用批量中的其他样本,不是已经限定为若干最近邻。若把它直接写成 K 近邻算法,就会改变方法。批量大小和组成因此会影响亲和度的量级与稳定性。

算法对每个锚点寻找最高亲和度的负样本候选;只有其达到阈值,才加入校准正对集合。不是把所有超过阈值的样本同时加入,也不是无条件选固定个数。Figure 5 展示没有合适候选时的处理,这说明“没有新增正对”是合法结果。为了凑足数量强行拉近不相似样本,会引入新的错误监督。

姿态分支与面部分支独立执行这一选择。一个候选与锚点的朝向接近,不代表表情或身份因素也接近。Figure 9 展示两类分支挑出的不同邻居,适合作为阅读机制的视觉依据。若实现时把两分支的邻居索引混用,就失去了因素感知的意义,即便训练损失仍然能下降。

flowchart TD
 I[人脸与增强] --> B[共享主干]
 B --> F[面部因素]
 B --> P[姿态因素]
 F --> NF[面部亲和度与候选筛选]
 P --> NP[姿态亲和度与候选筛选]
 NF --> CF[原正对与校准正对]
 NP --> CP[原正对与校准正对]
 CF --> L[分支对比损失]
 CP --> L
 F --> D[交换重建与正交]
 P --> D
 D --> J[联合训练]
 L --> J
 B --> E[冻结线性评价]

公式逐项读:亲和度不是标签,也不是概率

$$S_{ij}=\frac{v_i^\top v_j}{\|v_i\|\|v_j\|}$$

原文 Eq.4。v 是某个分支中的特征。余弦相似度关注方向,通常落在负一到一之间。它衡量当前网络认为的接近程度,而不是人工语义真值;训练早期特征不可靠时,直接用它选择正对可能形成错误反馈。

$$NS_{ij}=\sum_{k\ne i,j}^{2N}S_{ik}S_{kj}$$

原文 Eq.5。如果 i 和 j 都接近某个 k,乘积为正并累加,说明它们共享关系模式。但两者都与 k 负相关也会产生正乘积,所以不能简单解释为“共同朋友数量”。这里没有在公式中除以邻居数量,批量变大可能改变分数尺度。

$$PA_{ij}=S_{ij}+\alpha NS_{ij}$$

原文 Eq.3。直接相似与邻域结构共同形成亲和度,α 控制邻域项的影响。原文实验采用 α 为十,不能不经检查搬到不同批量规模。PA 不是归一化概率,超过一并不必然是实现错误。

$$j^*=\arg\max_{j\in\mathcal N_i}PA_{ij},\quad \mathcal C_i=\{j^*:PA_{ij^*}\ge T\}$$

Algorithm 1 的教学形式。候选从负集合中选,达到阈值才转为校准正对。原文实验阈值为一。构建集合时必须排除自身和原正对,否则最高相似的自身可能总被选中,制造看似容易但没有实际价值的训练信号。

$$\ell_i^{cal}=-\log\frac{w_i\exp(S_{ij^*}/\tau)}{\sum_{n\in\mathcal N_i}\exp(S_{in}/\tau)},\quad w_i=\beta PA_{ij^*}$$

原文 Eq.7 的结构。权重位于对数内部的分子,不能擅自改写成损失乘权重。β 在姿态与面部分支分别取不同值。是否让亲和度参与梯度、负集合是否移除校准项,都会影响具体实现,需要代码或明确实验定义。

$$-\log(w_i a_i/b_i)=-\log(a_i/b_i)-\log w_i$$

教学推导,解释 Eq.7。若 w 被当作固定常数,新增项对模型梯度没有直接影响,影响主要来自正对选择;若 w 可微,则额外引入亲和度梯度。这与常见的加权损失有本质差别,也是复现时必须核对而不能凭名字猜测的细节。

$$\mathcal L=\mathcal L_{PDD}+\alpha_p(\mathcal L_p+\mathcal L_p^{cal})+\alpha_f(\mathcal L_f+\mathcal L_f^{cal})$$

原文 Eq.8。原正对与校准正对共同训练两个因素分支,再结合重建解耦。动态权重调节分支贡献,但不会自动纠正错误邻居。若候选筛选过松,错误正对可能被反复强化,因此筛选消融比只展示总损失更重要。

原文实验设置部分对姿态增强的正负关系有易混表述:某处把翻转与旋转列为姿态正对,而前序 PCL 的解释把改变姿态的增强作为负关系。当前公开评估仓库未提供足够证据消解这一点,本篇保留歧义,不擅自替作者修订。独立复现必须明确每个增强在哪个分支属于正或负。

一个可计算的小例子是两个候选与锚点直接相似度接近,但其中一个与其他多个样本的相似度模式更一致。NPA 可能优先选后者。这并不证明后者的表情一定相同,只说明当前特征空间认为它们结构相近。可靠的研究应抽样检查选中候选的真实属性,而不是把算法的选择直接当作正确解释。

实验:增益不大时,更要看对照与单位

原文 Tables 1–4:与 PCL 的主要比较,姿态误差越低越好
任务PCLPCFRL
FER2013准确率56.8157.30
RAF-DB准确率74.4775.68
LFW验证准确率79.7279.89
CPLFW验证准确率64.6166.17
DISFA平均AU F154.857.8
AFLW2000姿态MAE/度12.3612.08

RAF-DB 增加一点二一个百分点,若按旧值为分母则相对增长约一点六二百分比;这两个说法不能混写。姿态误差下降零点二八度,不是下降零点二八个百分点。LFW 提升较小,在缺乏重复实验置信区间时,应避免将细小差异解读为稳定的普遍优势。

原文 Tables 6–7:RAF-DB 的模块与选择策略结果
设置准确率
SimCLR71.06
PCL74.47
PCL加入NPA74.63
完整校准75.68
固定选Top-175.33
固定选Top-271.10
固定选Top-567.68
阈值筛选75.68

固定选更多邻居反而明显下降,直接支持“正对质量比数量重要”的机制解释。它也提醒初学者:一个看似合理的增强,如增加正样本数,可能破坏训练。阈值筛选允许没有新邻居,比每次硬选五个更保守,但阈值是否适合不同数据密度仍需单独验证。

Table 5 表明仅按直接余弦相似度校准在 RAF-DB 只有七十三点四一,低于 PCL;加入邻域结构才有较好结果。Table 8 进一步比较直接相似、注意机制与组合策略。与此同时,AU9 的表现从五十三点二降到四十七点四,说明平均 AU F1 提升并未解决每个局部动作的困难。

Table 10 给出相同主干参数量约一千六百八十万及相近报告耗时。不能由主干 FLOPs 相同推导整个训练完全没有额外开销:亲和度矩阵及关系乘积需要批量计算,内存与运行时间依赖实现。原文时间标签与数值尺度也不宜直接当成完整 epoch 的硬件预算;本篇未实测这些训练耗时。

代码核查:公开评估包不能自动验证 NPA 训练

源码:test-master/Models/exppose.py,L78–90(固定提交 7af055681cfd)

            if config['eval_mode'] == 'exp':  # exp
                state_dict = torch.load(config['load_model'])['state_dict']
                for k in list(state_dict.keys()):
                    if k.startswith('module.encoder'):
                        state_dict[k[len("module.encoder."):]] = state_dict[k]
                    elif k.startswith('module.exp_fc') or k.startswith('module.pose_fc'):
                        state_dict[k[len("module."):]] = state_dict[k]
                    #     # if k.startswith('module.exp_fc'):
                    #     #     state_dict[k[len("module.exp_"):]] = state_dict[k]
                    #     del state_dict[k]
                    # if k.startswith('module.exp_encoder'):
                    #     state_dict[k[len("module.exp_encoder."):]] = state_dict[k]
                    del state_dict[k]

这段代码从检查点取出主干与分支参数并调整键名,属于评估加载逻辑。后续使用非严格加载但断言缺失键为空,说明权重键格式需要认真核对。仅凭文件能读入不代表预训练协议一致,更不能证明训练时实现了论文中的亲和度校准。

源码:test-master/configs/remote_ExpPose_linear_eval.yaml,L24–36(固定提交 7af055681cfd)

epochs: 6000
continue_train: False
eval: True
eval_mode: 'exp' # 'exp' or 'pose' or 'face_cycle'
eval_epochs: 300
seed: 3456
log_path: ./logs
model_name: exppose # 小写
dataset_name: lineardb # 小写
img_size: 100  # train 64 eval 100
lr: 1.0e-4
print_img: 50
print_loss : 20

配置明确 eval 为真、线性评价三百轮、输入尺寸一百。仓库 README 主要提供评估说明,其命令中的部分配置名称与实际文件不一致;实际配置还把验证与测试指向同一 RAF-DB 列表。作为自己的研究,不应直接复制这种设置做超参数选择,应另划训练内部验证集,最后一次测试。

本次在固定提交 7af055681cfd 中检索核心模型文件,未找到可以完整对应论文 NPA 与阈值校准训练的实现链。因此以上两处源码只用于说明可核验的评估部分,不冒充 NPA 官方源码。论文公式的梯度细节、增强关系及完整训练设置仍需要作者补充或独立实现并明确标注。

可执行学习路线:让一个小矩阵先回答机制问题

第一天建立六个二维单位向量,手工计算余弦矩阵,再按公式算邻域项与总亲和度。把某个向量复制一份,观察共同关系如何改变排名。验收产物是三个矩阵和每个锚点选中的索引,能说明对角线、原正对及自身为什么要排除。这个实验不需要任何视频数据和显卡。

第二天实现阈值选择,分别运行无候选、唯一候选与多个高分候选三种情况。加入同分情形并固定处理规则,确保随机种子可重复。验收是每个锚点最多新增一个校准正对,并且没有达到阈值时不会偷偷退化成无条件 Top-1;输出候选数量分布而不是只检查代码没有报错。

第三天对 Eq.7 做自动微分实验,比较权重 detach、权重可微和损失乘权重三种写法。固定相似度与候选集合,打印梯度差异。验收是解释为什么对数内部固定权重只增加常数项,而损失乘权重直接改变梯度尺度。这样才能知道你复现的是原文表达、某种解释还是一个新变体。

第四天在现成小规模人脸特征上比较直接余弦与 NPA 邻居,人工检查每个分支至少二十组候选。分别记录姿态相似、表情相似、身份相同与背景相似,不把它们混成一个“语义正确”。验收是找到至少两种错误校准模式,并说明可能需要调整的是特征、阈值还是批量构成。

进入训练阶段后,先只替换候选选择而保持主干、增强、损失与数据划分不变。再单独比较有无校准损失,最后研究动态权重。用多个随机种子报告均值与波动,尤其关注一点以内的小提升。若有限算力只能验证一个任务,清楚标记范围,不能据 RAF-DB 单项结果声称通用人脸表征全面改进。

作者局限与独立判断

作者讨论了光照、阴影与遮挡等因素尚未充分解耦,未来可结合更明确的物理先验。当前机制依赖已有表征构建邻域,在复杂输入上仍会受错误特征影响。它不是从零获得可靠语义的监督来源,也没有保证在任意姿态、文化或采集设备上都保持同样关系结构。

本文独立判断是:NPA 的优势是把单对相似度放到批量关系中审视,风险是批量组成会影响监督。若某批全是相近背景或同一身份,邻域结构可能强化捷径。适合你的扩展是固定模型,改变按身份、姿态或场景组织批量的方式,观察校准正对质量与下游结果;这比立即增加复杂网络更能检验方法假设。

把机制变成可以复查的实验记录

线性评估的权重加载需要先检查主干参数是否完整匹配,再确认分类头从随机初始化开始。若误把已有分类头也加载进来,得到的就不是同等条件下的新线性读出。可以保存加载前后的参数键、缺失键和冻结状态清单,再用一次反向传播确认只有分类头梯度非空;这比看到准确率上升更能验证协议。

亲和度矩阵可以用矩阵乘法理解。先把所有归一化特征堆成矩阵,乘自身转置得到余弦矩阵;邻域项与相似度矩阵的乘积有关,但还要排除公式规定的自身与配对项。直接使用整个平方矩阵而忘记这些排除项,会让高对角值通过路径放大直接相似,从而改变方法原本想增加的关系信息。

批量变化实验应从最简单的控制开始:固定锚点和两个候选,只往批量里加入无关向量,观察它们的亲和度排序与是否过阈值变化。如果排名稳定但分数整体增大,说明阈值尺度受到批量影响;如果排名也变化,就需要分析新样本与候选的关系。这个测试能具体检验固定阈值迁移的假设。

对错误校准,应区分把不相似样本当正对与漏掉真实相似样本。前者可能直接破坏表征边界,后者只是失去额外学习机会,因此两类错误代价未必相同。阈值选择可以同时报告校准精确率、校准覆盖率和下游指标,不要只追求每批新增正对数量最多。

课程练习结束时,建议提交一个六样本的完整计算记录和一页真实特征邻居审计。每个被校准的对要注明分支、直接相似、邻域项、总亲和度及选择原因。读者应能根据这些数字重现你为什么选择它,而不是只能看到一张经过挑选的漂亮近邻可视化。

原文与核验边界

论文原文及出版信息。本篇依据全文、附录和表格编写;文中的教学计算与研究建议均不冒充作者实验证据。核验日期:2026-10-23。

自己的解释与验收记录

写出一条输入到输出的链路、一个关键公式的含义,以及你完成的最小检查。笔记仅保存在当前浏览器,可从主站「我的学习笔记」导出。