简单来说,广义类别分类就是利用部分已知类别的标签,给一批混合了“已知类和未知类”的无标签数据进行分类,同时发现其中的新类别。即GCD 需要同时实现已知类识别和新类发现。论文名——Generalized Category Discovery,论文链接:https://doi.org/10.1109/CVPR52688.2022.00734
图1:GCD
下面我将根据论文思路详细走一遍GCD整体流程。
GCD
1、加载ViT-B/16权重
权重如何获得:在 ImageNet (一种大型数据集)上通过 DINO (一种自监督方法,详细介绍附在后面了)自监督学习得到的 ViT-B/16(一种网络结构)权重。
如何用:该阶段无需自己做,加载预训练好的模型权重即可。即先创建一个结构相同、参数尚未训练的 ViT-B/16 网络(随机初始化 ViT-B/16),再把 DINO 在 ImageNet 上预训练得到的 ViT-B/16 权重加载进去。
权重下载入口:https://github.com/facebookresearch/dino
说明:DINO与ViT的详细介绍见DINO和ViT小节。
2、配置GCD微调网络
使用加载好的ViT-B/16网络提取每个增强视图的特征,在后接一个多层感知器(multi-layer perceptron, MLP)投影头。即:
其中
故输入图像的投影特征为:
3、无监督对比损失和监督对比损失计算
数据处理:
从和
中取样,组成一个mini-batch:
。然后对于每个样本
,独立进行两次随机增强:
两个视图通过同一个ViT和投影头,得:
注意:两个视图使用的是同一套网络参数。
损失计算:
计算全部样本的自监督对比损失,让同一样本的两个视图靠近。
计算带标签样本的监督对比损失,让同一类别的不同样本靠近。
4、微调(特征提取)
将两部分损失加权计算总损失:
其中,自监督部分在整批样本上计算,监督部分在有标签子集上计算。
接着执行:(1)根据当前特征计算出来总损失后,反向传播,计算可训练参数的梯度。(2)优化器更新ViT中可训练部分以及投影头。(3)取下一批样本重复前面步骤。
5、半监督k-means 聚类
微调完成后,根据验证集上旧类别聚类准确率选出表现最优的ViT-B/16骨干网络参数。在后续特征提取和聚类阶段(测试阶段),加载并固定该参数,不再进行梯度更新,同时移除用于对比学习的MLP投影头(丢弃投影头)。将带标签数据
和无标签数据
中的样本输入骨干网络,加载表现最优的骨干网络参数,重新提取用于聚类的特征
,并进行L2归一化。
然后,根据有标签样本提供的类别约束,在无标签样本()上进行半监督k-means 聚类。图2展示的是GCD这篇论文中给出的适用于 GCD 的半监督 k-means 算法。
图2:半监督k-means聚类流程
图2的详细流程可以分为以下几步:
- 已知总类别数K
(1)确定分成多少个簇
(2)用带标签样本初始化已知类别中心
(3)在已有中心的基础上,用k-means++初始化剩余中心
(4)分配样本:有标签样本强制归属,无标签样本自由选择
(5)根据当前分组更新所有中心
- 总类别数未知
(1)新类别数估计(详见论文 GCD 3.2. Estimating the class number in unlabelled data)
大致思路:尝试不同的总簇数k,在对全部数据进行普通k-means 聚类,再用有标签样本
的聚类准确率评价这个k是否合适,最后选择得分最好的候选值。
(2)重复已知总类别数k的步骤(1)-(5)
说明:普通k-means 聚类算法这里就不多加赘述了,这部分网上资源应该挺多的。
DINO
输入:原始图像
具体流程:对原始图像做的两次不同的随机增强:
分别输入学生网络和教师网络,两个网络分别输出概率分布和
。通过交叉熵损失让学生输出
接近教师输出
,流程图如图2所示。
图2:Self-Distillation with No Labels (DINO)
其中,只对学生网络反向传播,从而进行梯度下降更新。教师模型不通过梯度更新,而是由学生参数的指数移动平均(Exponential Moving Average, EMA)更新。
说明:DINO采用ViT作为学生网络和教师网络。其中图1中灰色模块由骨干网络(ViT-B/16)和DINO投影头组成。
论文详见:Emerging Properties in Self-Supervised Vision Transformers | IEEE Conference Publication | IEEE Xplore
ViT
我们将一张图像切分为固定大小的图像块,对每个图像块做线性嵌入,加入位置嵌入,再把得到的向量序列送入标准Transformer编码器。为完成分类任务,我们采用常规方法,在序列中额外添加一个可学习的“分类标记”。模型框架如图3所示。
图3:Vision Transformer (ViT)
论文详见:[2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
距离计算
1、欧式距离(Euclidean Distance)
最直观的空间直线距离,衡量向量空间上绝对的远近,对各维度的量纲很敏感。
数学定义:
2、余弦距离(Cosine Distance)
余弦相似度:
用于衡量两个向量之间的夹角,刻画向量的方向相似程度,忽略向量本身的长度(模 / 幅值大小)。
数学定义:
其中,
余弦距离:
余弦距离是由余弦相似度转换得到,用于做距离度量。
数学定义:
其中余弦距离取值范围 [0, 2]。
3、马氏距离(Mahalanobis Distance)
考虑数据集的协方差矩阵,消除特征量纲,同时消除特征之间的相关性。衡量样本点到数据集中心的标准化距离;也可以计算两个向量之间马氏距离。
数学定义:
(1)样本到数据集中心
的马氏距离:
(2)向量与向量
之间的马氏距离:
其中,为数据集的全局协方差矩阵(维度为
)。