项目标题:
细粒度图像分类挑战
项目背景:
细粒度图像分类的目标,是区分同一超级类别下外观高度相似的多个子类别。与普通图像分类相比,细粒度分类不能只依赖整体轮廓或主体语义,还需要识别花蕊形态、花瓣边缘、局部纹理和颜色分布等细微视觉差异。这些能够区分相似类别的关键局部区域,通常称为判别性区域
以往工作常常从以下角度提升
- 判别性区域定位
- 早期方法常依赖部件位置、目标框或局部区域标注,以显式定位关键区域。这类强监督方法具有较强的可解释性,但标注成本高,且不同类别的关键部件并不完全一致,难以扩展到大规模类别体系。
- 弱监督方法只使用图像级类别标签,通过注意力机制、类激活图、多实例学习或区域排序等方式自动发现与分类相关的局部区域。由于模型无需额外局部标注,更适合实际应用场景。
- 学习细粒度特征
- 定位局部区域后,还需要学习具有判别力的局部表征。常见方法包括多尺度特征融合、局部特征聚合和高阶特征交互。以双线性卷积网络为例,模型通过外积操作建模不同特征通道之间的高阶关系,从而增强对局部纹理和细微结构的表达能力。部分方法还会分别建立全局分支和局部分支,使整体语义与局部细节形成互补。
- 优化表征空间
- 仅使用交叉熵损失时,模型主要关注分类边界是否正确,但不一定能够形成紧凑、可分的特征空间。对比学习、度量学习和基于间隔的约束可以进一步拉近同类样本,并分离外观相似但类别不同的困难样本,从而提高细粒度识别能力。
此次比赛要求对152类花卉进行分类,每类花卉样本数不超过200,存在某些花卉样本数在50左右。比赛要求模型大小不超过500MB,推理时间不超过100ms一张。禁止外部标注数据。
因此,本项目面向一个低资源、弱监督且具有部署约束的细粒度花卉分类任务。模型需要在缺少部件标注的情况下,自动定位判别性区域,增强局部特征表达,并以较低的参数量和计算成本实现全局语义与局部细节的协同分类。
方法
架构设计

从输入到显著区域
我们输入大小为448*448大小的图像进入冻结的DINOv3 backbone。利用Attention Rollout的思想,取5、8、11层的attention矩阵(B, 12, 789, 789)进行累乘。具体来说是每次先使用softmax归一化后,加上单位矩阵除以二,因为考虑到残差连接。最后对每个head求平均,得到输出rollout矩阵大小为(B,789,789),其中rollout[: 0, 1+reg] 就是显著性分数,大小为(B,784)
得到显著性分数后,我们每次选出一个patch后屏蔽其3 * 3邻域内的patch,如果遍历一次结束但候选池未满,则取消屏蔽从头再次遍历知道选出32个候选区域。
从显著区域到判别性区域
我们从最后一层中取出cand_idx对应的token,并且输入到一个简单的线性中获取一个判别性分数。此分数只用于排序而不是分类所以计算很简单。
实际训练时,这个判别性分数在前期主要依赖于显著性分数,后期显著性分数的占比逐步下降
实际应用时,我们从多层取出这些parts,并进行对齐融合。
在知道目标标签的时候很好选出对应Top-k,但是我们在实际推理的时候是没有对应标签的,所以对于这些候选区,不仅需要进行分类,还要进行ranking。从一张图的32个候选区域选出6个判别区域的过程有些像多实例学习。
为了学好分类器,我们先挑出logit最高的四个区域,然后取出这四个区域完整的logis向量求平均(参考)后softmax,最后计算交叉熵。这里取top-r pooling本质上就好比找出最有价值的局部区域共同投票。
而DecisionRank的目的是训练一个不依赖标签的评分器。它对每个候选区只输出一个标量,推理阶段真正参与局部区域筛选的是这个评分分数,而这个ranking Loss的作用就是在训练阶段教会它哪些区域应该排在前面。也就是说,上述的分类器作为老师,而这个评分器作为学生。我们设计评分机制,也就是说,我们可以依据这个分数对候选区域进行排序。
老师希望区域A得学生分数至少比区域B高出一个margin(γ = 0.05),所以定义Ranking Loss:
判别性区域辅助分类
CAP 提出细粒度识别不仅需要定位信息区域,还要考虑信息区域的空间结构和上下文关系。它关注的是具有空间连续性的 imformative integral,而不是孤立点。对此我们聚合空间邻近 3*3 的 token,具体来说我们收集这个中心点的周围一圈,总共9个token:,然后我们对每个领域token根据Attention Rollout分数做softmax后加权求和,。领域聚合完成后,我们对中心patch做残差融合,其中α = 0.6
到了这里我们已经拥有了6个局部区域token,我们让全局CLS主动读取局部区域信息,从而得到一个局部增强后的全局表征。
我们对CLS和parts做cross attention。其中q=CLS,k=选出来的六个局部区域,v也是六个被读取得parts。
具体来说,当前只有一个CLS Query,。六个局部Parts为:。Cross-Attention输出得到一个被局部信息增强的全局分类表征。如果将CLS作为key的话,每个Part都无条件读取相同的CLS信息,无法在六个局部区域之间做选择,同时还需要额外设计一个池化操作,将六个增强后的part汇总成一个分裂表征。
具体计算过程中,我们先计算Q K转置,也就是求内积得到CLS和每个part的相似度,接着除以根号dk进行缩放,然后softmax得到六个局部区域的权重。最后对Value进行加权求和。
最后我们得到两类logits后加权求和
对比学习
我们对局部增强表征做监督对比学习。我们将一个batch内的表征先做L2归一化后求点积衡量相似度(点积有一个温度参数)。对此我们定义Loss
其中m=0.4.这个Loss和TransFG完全一样。属于是最基础的pair-wise loss。
训练技巧
数据增强
| 类型 | 参数 | 强度 | 目的 |
|---|---|---|---|
| RandomResizedCrop | (0.70, 1.0) |
保守 | 保留花朵主体 |
| 随机旋转 | ±60° |
较强 | 增强方向鲁棒性 |
| 90 度旋转 | p=0.2 |
中等偏低 | 进一步减少方向依赖 |
| RandAugment | N=2, M=4 |
轻中等 | 增强颜色/形变/光照鲁棒性 |
| Random Erasing | p=0.05, area 2%~8% |
很轻 | 防止过度依赖单一区域 |
| 自定义增强 | p=0.18 |
偏轻 | 降低背景/环境依赖 |
| MixUp | alpha=0.0 |
关闭 | 避免破坏局部区域监督 |
| CutMix | alpha=0.30 |
中等 | 提高局部鲁棒性 |
| CR-CPL SnapMix | 开启 | 关键增强 | 用语义区域修正 CutMix 标签权重 |
学习率调度
前5个epoch线性warm up
cosine Annealing 缓慢下降