CaRA 论文完整复习总结
一、解决的核心问题
零样本细粒度检索中,CNN 模型只关注最显著区域(鸟头、车头、Logo),激活值过高掩盖周边细微特征,导致对没见过的新类别泛化差。
传统方案:
- 人工标注部位 → 成本高、不通用
- 多任务集成 → 结构复杂、开销大
本文目标:不额外标注、不加复杂结构,仅通过通道级抑制,让模型关注更多细节,同时不丢失判别力。
二、基础模型与基本概念
- 基础网络
CNN(ResNet50) - 特征图结构
C × H × W- C:通道数(每个通道≈一种特征检测器)
- H×W:空间大小
- 激活值
卷积 + 偏置 + ReLU 之后的每个像素数值- 数值大 → 模型关注这里
- 过大 → 显著区垄断注意力
三、核心模块:CARP
1. 作用
给每个通道设置无损激活上限,只压过高的显著激活,不破坏语义,把注意力分给周边区域。
2. CARP 计算步骤
(1)高斯平滑全局最大池化(得到原始峰值 P)
- 对每个通道特征图先做高斯平滑(去噪)
- 再做全局最大池化(取该通道最大激活)
- 得到通道峰值向量:
P ∈ R^C
→ P 代表每个通道原本的显著强度
(2)抑制系数预测
- 对特征图做全局平均池化得到通道均值
- 经过一个可学习 C×C 全连接矩阵
- 过 sigmoid 得到抑制系数 S ∈ (0,1)^C
- 训练时只学习这个 C×C 矩阵
(3)得到 CARP
$\text{CARP} = P \odot S$
- CARP 是每个通道的激活上限
- 只压过高通道,不压有用弱通道
四、特征校正
原始特征 Z
CNN 最后一层 ReLU 后的特征图:
Z ∈ R^{C×H×W}校正后特征 F’
对 Z 逐通道逐位置裁剪:$F’{c,i,j} = \min(Z{c,i,j},\text{CARP}_c)$
- 大于上限 → 裁到 CARP
- 小于等于 → 保持不变
- 最终检索特征
对 F’ 做 GAP 得到一维向量,用于距离计算。
五、五大损失函数(训练约束)
总损失:
$$L_{total} = L_{cls} + L_{triplet} + L_{mut} + L_{ssc} + L_{fng}$$
1. 分类损失 $L_{cls}$
- 输入:校正特征 F’
- 操作:GAP → FC 层 → 分类概率
- 计算:交叉熵
- 作用:让特征具备基础类别判别能力。
2. 三元组损失 $L_{triplet}$
- 样本:锚点 a、同类正样本 p、异类负样本 n
- 特征:都用 F’ 池化后的向量
- 目标:$dist(a,p) < dist(a,n)$
- 作用:保证同类近、异类远,适配检索任务。
3. 互学习损失 $L_{mut}$
- 两个输入:
- 原始通道峰值 P
- 校正上限 CARP
- 各加一个小线性分类头
- 计算:KL 散度拉近两个分类分布
- 作用:保证压后通道重要性不变,语义不丢失。
4. 语义一致性损失 $L_{ssc}$
- 两个输入:
- 原始特征 Z
- 校正特征 F’
- 用同一个 FC得到分类概率
- 计算:KL 散度拉近分布
- 作用:保证 Z 和 F’ 语义等价,压完不跑偏。
5. 特征导航损失 $L_{fng}$
- 输入:Z 和 F’ 经同一 FC 的分类得分
- 约束:$Score_{new} \ge Score_{old}$
- 作用:防止压太狠导致特征判别力下降。