广义类别发现(Generalized Category Discovery, GCD)_1
2026/9/13 22:42:47 网站建设 项目流程

简单来说,广义类别分类就是利用部分已知类别的标签,给一批混合了“已知类和未知类”的无标签数据进行分类,同时发现其中的新类别。即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)向量与向量之间的马氏距离:

其中,为数据集的全局协方差矩阵(维度为)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询