摘要
在本文中,我们考虑一个高度通用的图像识别设置,其中给定一组标记和未标记的图像,任务是对未标记集中的所有图像进行分类。在这里,未标记的图像可能来自标记的类或来自新的类。现有的识别方法无法处理这种情况,因为它们做出了一些限制性的假设,例如未标记的实例仅来自已知或未知类别,以及未知类别的数量是先验已知的。我们解决了更不受约束的设置,将其命名为“广义类别发现”,并挑战了所有这些假设。我们首先通过从新类别发现中获取最先进的算法并使其适应此任务来建立强大的基线。接下来,我们建议在这个开放世界设置中使用具有对比表示学习的视觉变形器。然后,我们引入了一种简单而有效的半监督k-means方法,将未标记的数据自动聚类为可见类和未标记类,大大优于基线。最后,我们还提出了一种新的方法来估计未标记数据中的类数。我们充分利用最近的Semantic Shift Benchmark套件,对通用对象分类的公共数据集和细粒度数据集的方法进行了全面评估。
Introduction
想象一个婴儿坐在车里观察世界。物体实例将通过汽车,对于其中一些,婴儿可能已经被告知它们的类别(“那是一只狗”,“那是一辆车”),并能够识别它们。也会有一些婴儿以前没有见过的例子(猫和自行车),看到了很多这样的例子,我们可能会期望婴儿的视觉识别系统将这些聚类成新的类别。
这是我们在这项工作中考虑的问题:给定一个图像数据集,其中只有一些图像被标记为它们的类别,为其余的每个图像分配一个类别标签,可能使用在标记集合中未观察到的新类别。我们将此问题称为广义类别发现(GCD),并建议这是许多机器视觉应用的现实用例:无论是识别超市中的产品;医学影像病理;或者自动驾驶汽车。在这些和其他现实视觉设置中,通常不可能知道新图像是否来自标记或新类别。
相比之下,考虑现有图像识别设置的局限性。在图像分类这个研究最广泛的问题中,所有的训练图像都带有类标签。此外,测试时的所有图像都来自与训练集相同的类。半监督学习(SSL)[7]引入了从未标记数据中学习的问题,但仍然假设所有未标记的图像与标记的图像来自同一组类。最近,开放集识别(OSR)[38]和小说类别发现(NCD)[19]的任务已经解决了开放世界的设置,其中测试时的图像可能属于新的类别。然而,OSR的目的仅是检测不属于标记集中任何一类的测试时间图像,而不需要在这些检测到的图像之间进行进一步分类。与此同时,在NCD中,方法从标记和未标记的图像中学习,并旨在在未标记的集合中发现新的类。然而,NCD仍然做出限制性假设,即所有未标记的图像都来自新类别,这通常是不现实的。
在本文中,我们用许多方法来解决广义类别发现问题。首先,我们通过采用NCD的代表性方法并将其应用于该任务来建立强基线。为了做到这一点,我们调整了它们的训练和推理机制,以适应我们更一般的设置,并使用更健壮的骨干架构重新训练它们。我们表明,现有的NCD方法在这种广义设置下容易过拟合标记类。
接下来,观察NCD方法将其分类头过度拟合到标记类的可能性,我们提出了一种简单但有效的聚类识别方法。我们的关键见解是利用视觉转换器的强大的“最近邻”分类特性以及对比学习。我们提出使用对比训练和半监督k-means聚类算法来识别没有参数分类器的图像。我们表明,无论是在通用对象识别数据集上,还是在更具挑战性的细粒度基准测试上,这些提出的方法都大大优于既定的基线。对于后一项评估,我们利用了最近提出的Semantic Shift Benchmark套件[45],该套件是为识别语义新颖性而设计的。
最后,我们提出了一个具有挑战性的解决方案,图像识别中有待研究的问题:估计未标记数据中的类别数量。几乎所有的方法,包括纯无监督的方法,都假设知道类别的数量,这在现实世界中是一个非常不现实的假设。我们提出了一种利用标记集来解决这个问题的算法。
我们的贡献可以概括如下:(i)广义类别发现(GCD)的形式化,这是图像识别的一个新的和现实的设置;(ii)通过将最先进的标准新类别发现技术应用于这项任务,建立强有力的基线;(iii)一种简单而有效的GCD方法,该方法使用对比表示学习和聚类直接提供类别标签,并且大大优于基线;(iv)一种估算未标记数据中类别数量的新方法,这是一个尚未充分研究的问题;(v)对标准图像识别数据集以及最近的Semantic Shift Benchmark套件进行严格评估[45]。
相关工作
我们的工作与之前在半监督学习、开集识别和新类别发现方面的工作有关,下面我们将简要回顾一下。
半监督学习(Semi-supervised learning) 已经提出了许多方法[7,33,37,40,49]来解决半监督学习(SSL)的问题。SSL假定带标签和未标记的实例来自同一组类。目标是在训练期间利用标记和未标记数据学习一个健壮的分类模型。在现有的方法中,基于一致性的方法似乎是流行和有效的,如LadderNet [36], PI模型[29],Mean-teacher[43]。最近,随着自监督学习的成功,也有人提出了通过增加自监督目标来改进SSL的方法[37,49]。
开集识别(Open-set recognition) 开放集识别(OSR)的问题在[38]中被形式化,其目标是将未标记的实例从与标记数据相同的语义类中分类,同时从未见过的类中检测测试实例。OpenMax[3]是第一个用极值理论解决这个问题的深度学习方法。gan通常用于生成对抗性样本来训练开集分类器,例如[14,25,32]。已经提出了几种方法来训练模型,使具有大重构误差的图像被视为开集样本[34,41,48]。也有一些方法可以学习标记类的原型,并通过与原型的距离从未知类中识别图像[8,9,39]。最近,[8,9]提出学习描述相对于标记类的“他者性”的互易点。[50]联合训练基于流量的密度估计器和基于分类的OSR编码器。最后,Vaze等[45]研究了闭集和开集性能之间的相关性,表明通过提高标准交叉熵基线的闭集精度可以获得最先进的OSR结果。
新类发现(Novel category discovery) 新类别发现(NCD)问题在DTC中被形式化[19]。早期可应用于该问题的方法包括KCL[21]和MCL[22],它们都分别使用标记数据和未标记数据训练两个模型,用于一般任务迁移学习。AutoNovel(又名Rankstats)[17,18]采用三阶段方法解决NCD问题。该模型首先在所有数据上进行自我监督训练,用于低级表示学习。然后,在标记数据的完全监督下对其进行进一步训练,以捕获更高层次的语义信息。最后,进行联合学习阶段,通过排序统计将知识从标记数据转移到未标记数据。Zhao和Han[51]提出了一个具有两个分支的模型,一个用于全局特征学习,另一个用于局部特征学习,通过这两个分支进行双排序统计和相互学习,以更好地进行表征学习和新类发现。OpenMix[53]混合了标记和未标记的数据,以避免模型过度拟合NCD。NCL[52]通过对比学习对未标记数据的成对伪标签进行提取和聚合,并通过在NCD的特征空间中混合标记和未标记的数据来生成硬负( hard negatives)。Jia等[23]提出了一种基于对比学习和赢者通吃哈希的单模态和多模态数据端到端NCD方法。UNO[13]中引入了统一的交叉熵损失,通过交换标记和未标记的分类头中的伪标签,允许模型在标记和未标记的数据上进行联合训练。
最后,我们强调了Girish等人[15]的工作,他们解决了与GCD类似的设置,但用于GAN归因而不是图像识别的任务,以及Cao等人[4]的并行工作,他们在开放世界半监督学习的名称下解决了类似的图像识别设置。与我们的设置不同,它们没有利用大规模的预训练或在语义转移基准上展示性能,这更好地隔离了检测语义新颖性的问题。
Generalized category discovery广义类别发现
我们首先形式化了广义类别发现(GCD)任务。简而言之,我们考虑在数据集中对图像进行分类的问题,其中子集具有已知的类标签。任务是为所有剩余的图像分配类标签,使用在标记的图像中可能观察到也可能没有观察到的类(见图1,左)。
(图1所示。我们提出了一个新的设置:“广义类别发现”和一种解决它的方法。我们的设置可以简洁地描述为:给定一个数据集,其中一个子集具有类标签,对数据集中所有未标记的图像进行分类。未标记的图像可能来自标记或新类。我们的方法利用对比训练的视觉转换器直接通过聚类来分配标签。)
正式地,我们对GCD的定义如下。我们考虑一个包含两部分的数据集D:
D
L
=
{
(
x
i
,
y
i
)
}
i
=
1
N
∈
X
×
Y
L
\mathcal{D}_{\mathcal L} = \{(\mathbf{x}_{i},y_{i})\}_{i=1}^{N} \in \mathcal{X} \times \mathcal{Y}_{\mathcal L}
DL={(xi,yi)}i=1N∈X×YL和
D
U
=
{
(
x
i
,
y
i
)
}
i
=
1
M
∈
X
×
Y
U
,
\mathcal{D}_{\mathcal U} = \{(\mathbf{x}_{i},y_{i})\}_{i=1}^{M} \in \mathcal{X} \times \mathcal{Y}_{\mathcal U},
DU={(xi,yi)}i=1M∈X×YU,其中
y
L
⊂
Y
U
y_{\mathcal{L}}\subset\mathcal{Y}_{\mathcal{U}}
yL⊂YU。在训练期间,模型无法访问
D
U
\mathcal{D}_{\mathcal U}
DU中的标签,而是在测试时进行预测。进一步,我们假设可以访问验证集
D
V
=
{
(
x
i
,
y
i
)
}
i
=
1
N
′
∈
X
×
Y
L
\mathcal{D}_{\mathcal{V}}=\{(\mathbf{x}_{i},y_{i})\}_{i=1}^{N^{\prime}}\in\mathcal{X}\times\mathcal{Y}_{\mathcal{L}}
DV={(xi,yi)}i=1N′∈X×YL,它与训练集不相交,并且包含与标记集相同类别的图像。这种形式化使我们能够清楚地看到与新类别发现设置的区别。NCD假设
y
L
∩
y
U
=
∅
y_{\mathcal{L}}\cap y_{\mathcal{U}}=\emptyset
yL∩yU=∅而现有的方法在训练过程中依赖于这种先验知识。
在本节中,我们将描述我们提出的解决GCD的方法。首先,我们描述我们解决这个问题的方法。利用自监督表示学习的最新进展,我们提出了一种基于对比学习的简单而有效的方法,通过半监督k-means算法进行分类。接下来,我们开发了一种方法来估计未标记数据中的类别数量-这是一项具有挑战性的任务,在文献中尚未得到充分研究。最后,我们通过修改最先进的NCD方法RankStats[18]和UNO[13],为GCD建立了两个强大的基线,以适应我们的设置。
我们的方法
我们在开放世界环境下的图像识别方法的关键见解是消除了对参数分类头的需要。相反,我们直接在深度网络的特征空间中执行聚类(见图1,右)。分类头(通常是基于学习嵌入的线性分类器)最好使用交叉熵损失进行训练,交叉熵损失已被证明容易受到噪声标签的影响[12]。此外,当为未标记的类训练线性分类器时,一个典型的方法是为未标记的实例生成(有噪声的)伪标签。这表明参数化头在未标记类上容易受到性能下降的影响。最后,我们注意到,必须从头开始训练分类头,这进一步使它们容易在标记类上过拟合。
同时,自监督对比学习已被广泛用于NCD的预训练,以实现鲁棒表征[23,52]。此外,当与视觉变压器相结合时,它生成的模型是很好的近邻分类器[6]。受此启发,我们发现对ViT模型进行约束性训练可以让我们直接在模型的特征空间中聚类,从而消除了可能导致过拟合的线性头部的需要。具体来说,我们在不使用任何标签的情况下,在所有图像上训练具有噪声对比损失的表示[16]。这很重要,因为它避免了将特征过度拟合到(部分)标记的类的子集。我们为标记的实例添加了一个进一步的监督对比组件[24],以利用标记的数据(见图1,右中间行)。
表示学习
对于所有方法,我们使用一个视觉变压器(viti - b16)[11],在(未标记的)ImageNet[10]上进行DINO[6]自我监督预训练作为我们的主干。这首先是因为DINO模型是一个强近邻分类器,这表明其特征空间中的非参数聚类效果很好。其次,自监督视觉转换器已经证明了学习的吸引力,即在没有人类注释的情况下关注对象的显著部分。我们发现这个特征对这个任务很有用,因为哪些对象部分对分类很重要,很可能从标记的类别转移到未标记的类别(见第4.5节)。
最后,我们希望反映一个现实和实际的背景。在NCD文献中,为目标任务从头开始训练ResNet18[20]骨干是标准的。然而,在现实世界中,模型通常使用大规模预训练的权重初始化以优化性能(通常是ImageNet监督的预训练)。为了避免与我们的实验设置(假设一个有限的标记集)冲突,我们使用自监督ImageNet权重。为了增强表示,使其更适合我们所拥有的标记和未标记数据,我们进一步微调目标数据上的表示,同时对标记数据进行监督对比学习,并对所有数据进行无监督对比学习。
形式上,设
x
i
x_i
xi和
x
i
′
x_i'
xi′为mini-batch B中同一张图像的两个视图(随机增强),无监督对比损失表示为:
L
i
u
=
−
log
exp
(
z
i
⋅
z
i
′
/
τ
)
∑
n
1
[
n
≠
i
]
exp
(
z
i
⋅
z
n
/
τ
)
,
(
1
)
\mathcal{L}_i^u=-\log\frac{\exp\left(\mathbf{z}_i\cdot\mathbf{z}_i'/\tau\right)}{\sum_n\mathbb{1}_{[n\neq i]}\exp\left(\mathbf{z}_i\cdot\mathbf{z}_n/\tau\right)},\quad(1)
Liu=−log∑n1[n=i]exp(zi⋅zn/τ)exp(zi⋅zi′/τ),(1)式中,
z
i
=
ϕ
(
f
(
x
i
)
)
\mathbf{z}_{i} = \phi(f(\mathbf{x}_{i}))
zi=ϕ(f(xi)),
1
[
n
≠
i
]
\mathbb{1}_{[n\neq i]}
1[n=i]为
n
≠
i
n\neq i
n=i时取值为1的指标函数,
τ
τ
τ为温度值。
f
f
f为特征主干,
φ
φ
φ为多层感知机(MLP)投影头。
有监督对比损失表示为:
L
i
s
=
−
1
∣
N
(
i
)
∣
∑
q
∈
N
(
i
)
log
exp
(
z
i
⋅
z
q
/
τ
)
∑
n
1
[
n
≠
i
]
exp
(
z
i
⋅
z
n
/
τ
)
,
(
2
)
\mathcal{L}_{i}^{s}=-\frac{1}{|\mathcal{N}(i)|}\sum_{q\in\mathcal{N}(i)}\log\frac{\exp{(\mathbf{z}_{i}\cdot\mathbf{z}_{q}/\tau)}}{\sum_{n}\mathbb{1}_{[n\neq i]}\exp{(\mathbf{z}_{i}\cdot\mathbf{z}_{n}/\tau)}}, (2)
Lis=−∣N(i)∣1q∈N(i)∑log∑n1[n=i]exp(zi⋅zn/τ)exp(zi⋅zq/τ),(2)其中,
N
(
i
)
N (i)
N(i)为小批B中与
x
i
x_i
xi标签相同的其他图像的索引。最后,我们将该批的总损失构造为:
L
t
=
(
1
−
λ
)
∑
i
∈
B
L
i
u
+
λ
∑
i
∈
B
L
L
i
s
(
3
)
\mathcal{L}^t=(1-\lambda)\sum_{i\in B}\mathcal{L}_i^u+\lambda\sum_{i\in B_{\mathcal{L}}}\mathcal{L}_i^s\quad(3)
Lt=(1−λ)i∈B∑Liu+λi∈BL∑Lis(3)其中
B
L
B_L
BL对应于
B
B
B的标记子集,
λ
λ
λ是一个权重系数。仅在对比框架中使用标签,而不是在交叉熵损失中使用标签,这意味着未标记和标记的数据被类似地处理。监督对比组件仅用于将网络推向语义上有意义的表示,从而最大限度地减少标记类的过拟合。
用半监督k-means进行标签分配
给定数据的学习表示,我们现在可以为每个未标记的数据点分配类或聚类标签,可以来自标记的类或不可见的新类。我们建议使用非参数方法,而不是像NCD中常见的那样以参数方式执行此操作(并且有过拟合标记数据的风险)。也就是说,我们建议将经典的k-means修改为约束算法,通过强制将 D L D_L DL中的实例分配到基于其真值标签的正确聚类。注意,这里我们假设知道集群的数量k。我们在第3.2节中处理估计这个参数的问题。基于真类标签得到 D L D_L DL的初始 ∣ Y L ∣ |Y_L| ∣YL∣质心,在 D L D_L DL的质心约束下,利用k- memeans ++[1]从 D U D_U DU中获得额外的 ∣ Y U ∖ Y L ∣ |\mathcal{Y}_{\mathcal{U}}\setminus\mathcal{Y}_{\mathcal{L}}| ∣YU∖YL∣(新类数)初始质心。在每个质心更新和集群分配周期中, D L D_L DL中同一类的实例总是强制具有相同的集群分配,而 D U D_U DU中的每个实例可以根据到不同质心的距离分配到任何集群。在半监督k-means收敛后, D U D_U DU中的每个实例可以被分配一个聚类标签。我们在附录B中提供了一个清晰的图表。
估计未标记数据中的类数
在这里,我们处理在未标记数据中查找类数量的问题。在NCD和无监督聚类设置中,通常假设对数据集中的类别数量有先验知识,但这在现实世界中是不现实的,因为标签本身是未知的。为了估计
D
U
D_U
DU中的类别数量,我们利用
D
L
D_L
DL中可用的信息。具体来说,我们在整个数据集
D
D
D上执行k-means聚类,然后仅在标记的子集上评估聚类精度(参见第4.1节的度量定义)。
通过运行Hungarian算法[28]来评估聚类精度,以找到聚类指标集与真值标签之间的最优分配。如果集群的数量高于类的总数,那么额外的集群将被分配给空集,并且分配给这些集群的所有实例都被认为是错误的预测。相反,如果集群的数量低于类的数量,则会将额外的类分配给空集,并且认为所有具有这些基本真值标签的实例都被错误地预测。因此,我们假设,如果在k过高或过低的情况下执行聚类(跨D),那么这将反映在
D
L
D_L
DL上的次优聚类精度上。换句话说,我们假设当
k
=
∣
Y
L
∪
Y
U
∣
.
k=|\mathcal{Y}_{\mathcal{L}}\cup\mathcal{Y}_{\mathcal{U}}|.
k=∣YL∪YU∣.时,标记集上的聚类精度将最大化。这种直觉使我们将聚类精度用作“黑盒”评分函数,
A
C
C
=
f
(
k
;
D
)
ACC = f(k;\mathcal{D})
ACC=f(k;D),我们使用Brent算法对其进行优化以找到最优
k
k
k。与[18]中的方法不同,通过穷尽地迭代所有可能的k值,我们发现黑盒优化允许我们的方法扩展到具有许多类别的数据集。
最后,我们强调具有不同粒度的标记集将诱导不同的类数估计。然而,我们认为标签集定义了分类系统-现实世界数据集的粒度不是图像的固有属性,而是由标签施加的框架。例如,在Stanford Cars中,数据集可以在“制造商”、“模型”或“变体”级别上进行标记,并根据所分配的标签定义分类系统。
两个强有力的基线
我们采用了最近的图像识别子领域——新类别发现(NCD)的两种方法来完成广义类别发现(GCD)任务。RankStats[18]被广泛用作新类别发现的竞争性基准,而UNO[13]是我们所知的最先进的NCD方法。
基线:RankStats+ RankStats在共享特征表示的基础上训练两个分类器:第一个头部从标记集中输入实例,并使用交叉熵损失进行训练,而第二个头部只看到来自未标记类的实例(再次,在NCD设置中,标记类和未标记类是不相交的)。为了使RankStats适应GCD,我们对数据集中的类总数使用单个分类头进行训练。然后我们用交叉熵损失训练头部的前
∣
Y
L
∣
|Y_L|
∣YL∣个元素,用伪标签的二值交叉熵损失训练整个头部。
基线: UNO+ 与RankStats类似,UNO使用标记和未标记数据的分类头进行训练。然后以类似swav的方式训练模型[5]。首先,生成批处理的多个视图(随机增强)并将其提供给同一模型。对于批处理中的标记图像,使用地面真值标签进行交叉熵损失训练标记头部。对于未标记的图像,为给定视图收集预测(来自未标记头部的logits),并将其用作伪标签,以优化来自其他视图的损失。为了适应这种机制,我们简单地将标记和未标记的头部连接起来,从而允许为未标记的样本生成属于数据集中任何类的伪标签。
参考
S. Vaze, K. Hant, A. Vedaldi and A. Zisserman, “Generalized Category Discovery,” 2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), New Orleans, LA, USA, 2022, pp. 7482-7491, doi: 10.1109/CVPR52688.2022.00734.