【计算机视觉】【聚类】SwAV:基于对比簇分配的无监督视觉特征学习
基于对比簇分配的无监督视觉特征学习《Unsupervised Learning of Visual Features by Contrasting Cluster Assignments》论文地址:https://arxiv.org/pdf/2006.09882.pdf一、简介无监督(或者自监督)视觉表示的目标是,在不使用人工标注的情况下或者图像的特征。目前,无监督方法在计算机视觉任务中快速的接
论文地址:https://arxiv.org/pdf/2006.09882.pdf
相关博客:
【自然语言处理】【聚类】基于神经网络的聚类算法DEC
【自然语言处理】【聚类】基于对比学习的聚类算法SCCL
【自然语言处理】【聚类】DCSC:利用基于对比学习的半监督聚类算法进行意图挖掘
【自然语言处理】【聚类】DeepAligned:使用深度对齐聚类发现新意图
【自然语言处理】【聚类】CDAC+:通过深度自适应聚类发现新意图
【计算机视觉】【聚类】DeepCluster:用于视觉特征无监督学习的深度聚类算法
【计算机视觉】【聚类】SwAV:基于对比簇分配的无监督视觉特征学习
【计算机视觉】【聚类】CC:对比聚类
【计算机视觉】【聚类】SeLa:同时进行聚类和表示学习的自标注算法
【自然语言处理】【聚类】ECIC:通过迭代分类增强短文本聚类
【自然语言处理】【聚类】TELL:可解释神经聚类
一、简介
无监督(或者自监督)视觉表示的目标是,在不使用人工标注的情况下或者图像的特征。目前,无监督方法在计算机视觉任务中快速的接近这有监督预训练方法。近期,许多state-of-the-art方法都是建立在实例级判别任务,这些自监督任务主要依赖两个元素的组合:(1) 对比损失函数;(2) 一组图像变换。对比损失函数通过直接比较图像的特征,从而移除了实例的类别概念;而图像变换则在特征中定义了不变性。这两个元素对于最终的网络质量至关重要,本文也是在损失函数和图像变换上进行了改进。
对比损失函数将同一图像的不同视图( view \text{view} view)拉近,并拉远不同图像的视图。但是,在大规模数据集上进行两两比较是不切实际的。因此,大多数的实现方法都是在训练过程中缩减比较的数量。例如,基于聚类的方法区分具有相似特征的图像组,而不是区分单个图像。聚类的方式虽然易于处理,但是因为需要遍历整个数据集,所以不太适合大的数据集。本文提出的 SwAV \text{SwAV} SwAV会在线计算codes,并强制相同图像的不同视图获得的codes保持一致。图像特征和codes都是在线学习的,所以本方法可以不受数据数量的限制进行扩展。此外, SwAV \text{SwAV} SwAV能够适应各种batch,且不需要 memory bank \text{memory bank} memory bank或者 momentum encoder \text{momentum encoder} momentum encoder。
除了在线聚类方法以外,本文还提出了一种图像变换的改进。许多对比学习方法只会对比同一图像的一对变换,但是有证据表明在训练过程中比较更多的视图能够改善最终的模型。本文提出了 multi-crop \text{multi-crop} multi-crop,通过使用较小的图像来增加视图的数量。
本文在若干个标准自监督benchmarks上进行了评估。在使用标准 ResNet-50 \text{ResNet-50} ResNet-50的情况下,能够在 ImageNet \text{ImageNet} ImageNet上达到 75.3 % 75.3\% 75.3%的top-1准确率。此外,实验证明了 multi-crop \text{multi-crop} multi-crop策略具有普适性,能够改善不同自监督方法的效果。总的来说,本文的贡献如下:
- 提出了一个可扩展的在线聚类损失函数,能够在 ImageNet \text{ImageNet} ImageNet带来 +2% \text{+2\%} +2%的改进;
- 引入了 multi-crop \text{multi-crop} multi-crop策略,在若干个自监督方法上能够带来2%到4%的改进;
- 合并两个技术贡献至单个模型,能够在 ImageNet \text{ImageNet} ImageNet上带来 + 4.2 % +4.2\% +4.2%的改进;
二、方法
code是指样本的簇分配;
prototype可以看做是聚类中每个簇的向量表示;
本文的目标是在无监督的情况下,以在线学习的方式学习视觉特征。先前基于聚类的方法都是离线的,其在簇分配和训练两个步骤交替进行。但是,这样的方式并不适合于在线学习,因为需要在整个数据集上多次计算图像特征。本文提出了一种替代方案,强制同一个图像的不同增强视图的codes保持一致。直观上,这种方法相当于通过对比图像的簇分配来实现对比学习。
具体来说,从图像的一个增强视图计算code,然后使用另一个增强视图来预测这个code。给定一个图像的两个不同增强版本的特征
z
t
\textbf{z}_t
zt和
z
s
\textbf{z}_s
zs,通过将特征匹配至
K
K
K个prototype集合
{
c
1
,
…
,
c
K
}
\{\textbf{c}_1,\dots,\textbf{c}_K\}
{c1,…,cK}来计算它们的code
q
t
\textbf{q}_t
qt和
q
s
\textbf{q}_s
qs。本文还通过下面的损失函数设置了一个
"swapped"
\text{"swapped"}
"swapped"预测问题
L
(
z
t
,
z
s
)
=
l
(
z
t
,
q
s
)
+
l
(
z
s
,
q
t
)
(1)
L(\textbf{z}_t,\textbf{z}_s)=l(\textbf{z}_t,\textbf{q}_s)+l(\textbf{z}_s,\textbf{q}_t) \tag{1}
L(zt,zs)=l(zt,qs)+l(zs,qt)(1)
其中,函数
l
(
z,q
)
l(\textbf{z,q})
l(z,q)衡量特征
z
\textbf{z}
z和编码
q
\textbf{q}
q的拟合程度。直觉上,本文提出的方法通过code
q
t
\textbf{q}_t
qt和
q
s
\textbf{q}_s
qs来比较特征
z
t
\textbf{z}_t
zt和
z
s
\textbf{z}_s
zs,如果两个特征捕获了相同的信息,那么它们应该能够从彼此的特征中预测code。
1. 在线聚类
从图像变换集合 T \mathcal{T} T中采样具体的变换 t t t,将其应用在图像 x n \textbf{x}_n xn上得到增强的视图 x n t \textbf{x}_{nt} xnt。在 x n t \textbf{x}_{nt} xnt上应用非线性映射 f θ f_\theta fθ获取该视图的向量表示,并对向量表示投影至单位球面上,即 z n t = f θ ( x n t ) / ∥ f θ ( x n t ) ∥ 2 \textbf{z}_{nt}=f_\theta(\textbf{x}_{nt})/\parallel f_\theta(\textbf{x}_{nt}) \parallel_2 znt=fθ(xnt)/∥fθ(xnt)∥2。然而,通过将 z n t \textbf{z}_{nt} znt映射至 K K K个可训练的prototype { c 1 , … , c K } \{\textbf{c}_1,\dots,\textbf{c}_K\} {c1,…,cK},从而获得对应的code q n t \textbf{q}_{nt} qnt。这里使用矩阵 C \textbf{C} C表示所有的prototype,其列为 c 1 , … , c k \textbf{c}_1,\dots,\textbf{c}_k c1,…,ck。
1.1 Swapped预测问题
等式
(
1
)
(1)
(1)中的"swapped"预测问题主要是通过从特征
z
s
\textbf{z}_s
zs预测编码
q
t
\textbf{q}_t
qt和从
z
t
\textbf{z}_t
zt预测
q
s
\textbf{q}_s
qs来实现的。其中,每个项的计算如下:
l
(
z
t
,
q
s
)
=
−
∑
k
q
s
(
k
)
log
p
t
(
k
)
,
where
p
t
(
k
)
=
exp
(
1
τ
z
t
⊤
c
k
)
∑
k
′
exp
(
1
τ
z
t
⊤
c
k
′
)
(2)
l(\textbf{z}_t,\textbf{q}_s)=-\sum_k\textbf{q}_s^{(k)}\text{log}\;\textbf{p}_t^{(k)},\text{where}\quad\textbf{p}_t^{(k)}=\frac{\text{exp}(\frac{1}{\tau}\textbf{z}_t^\top\textbf{c}_k)}{\sum_{k'}\text{exp}(\frac{1}{\tau}\textbf{z}_t^\top\textbf{c}_{k'})} \tag{2}
l(zt,qs)=−k∑qs(k)logpt(k),wherept(k)=∑k′exp(τ1zt⊤ck′)exp(τ1zt⊤ck)(2)
τ
\tau
τ是temperature参数。
在所有图像和增强视图上采用这个损失函数将得到损失函数
−
1
N
∑
n
=
1
N
∑
s
,
t
∼
T
[
1
τ
z
n
t
⊤
Cq
n
s
+
1
τ
z
n
s
⊤
Cq
n
t
−
log
∑
k
=
1
K
exp
(
z
n
t
⊤
c
k
τ
)
−
log
∑
k
=
1
K
exp
(
z
n
s
⊤
c
k
τ
)
]
(3)
-\frac{1}{N}\sum_{n=1}^N\sum_{s,t\sim\mathcal{T}}\Big[\frac{1}{\tau}\textbf{z}_{nt}^\top\textbf{Cq}_{ns}+\frac{1}{\tau}\textbf{z}_{ns}^\top\textbf{Cq}_{nt}-\text{log}\sum_{k=1}^K\text{exp}(\frac{\textbf{z}_{nt}^\top\textbf{c}_k}{\tau})-\text{log}\sum_{k=1}^K\text{exp}(\frac{\textbf{z}_{ns}^\top\textbf{c}_k}{\tau})\Big] \tag{3}
−N1n=1∑Ns,t∼T∑[τ1znt⊤Cqns+τ1zns⊤Cqnt−logk=1∑Kexp(τznt⊤ck)−logk=1∑Kexp(τzns⊤ck)](3)
这个损失函数能够联合优化prototype
C
\textbf{C}
C和图像编码器
f
θ
f_\theta
fθ的参数
θ
\theta
θ。
1.2 在线计算codes
要使本文的方法能够在线执行,需要基于单个batch内的图像特征来计算codes。 SwAV \text{SwAV} SwAV会将单个batch内的样本聚类至prototypes C \textbf{C} C,这样可能会导致平凡解,即每个图像都具有相同的code。为了解决平凡解的问题,本文强制添加约束来保证单个batch内的图像属于不同的codes。
给定
B
B
B个特征向量
Z
=
[
z
1
,
…
,
z
B
]
\textbf{Z}=[\textbf{z}_1,\dots,\textbf{z}_B]
Z=[z1,…,zB],目标是将这些特征映射至prototype
C
=
[
c
1
,
…
,
c
K
]
\textbf{C}=[\textbf{c}_1,\dots,\textbf{c}_K]
C=[c1,…,cK]上。使用
Q
=
[
q
1
,
…
,
q
B
]
\textbf{Q}=[\textbf{q}_1,\dots,\textbf{q}_B]
Q=[q1,…,qB]来完成两者的映射,并通过优化
Q
\textbf{Q}
Q来最大化特征向量和prototype间的相似度,即
max
Q
∈
Q
Tr
(
Q
⊤
C
⊤
Z
)
+
ϵ
H
(
Q
)
(3)
\mathop{\text{max}}_{\textbf{Q}\in\mathcal{Q}}\;\text{Tr}(\textbf{Q}^\top\textbf{C}^\top\textbf{Z}^)+\epsilon H(\textbf{Q}) \tag{3}
maxQ∈QTr(Q⊤C⊤Z)+ϵH(Q)(3)
其中,
H
(
Q
)
=
−
∑
i
j
Q
i
j
log
Q
i
j
H(\textbf{Q})=-\sum_{ij}\textbf{Q}_{ij}\text{log}\textbf{Q}_{ij}
H(Q)=−∑ijQijlogQij是信息熵,
ϵ
\epsilon
ϵ是超参数。实验发现
ϵ
\epsilon
ϵ太高会导致平凡解,即所有的样本都退化成唯一的向量表示,且会被均匀分配到所有的prototype。因此,实验中使用较低的
ϵ
\epsilon
ϵ。
Asano
\text{Asano}
Asano等人通过约束矩阵
Q
\textbf{Q}
Q为transportation多面体来强制完成均等划分,但他们的方法是在整个数据集上的。本文通过约束mini-batch的样本为transportation多面体,从而实现均等划分
Q
=
{
Q
∈
R
+
K
×
B
∣
Q1
B
=
1
K
1
K
,
Q
⊤
1
K
=
1
B
1
B
}
(4)
\mathcal{Q}=\Big\{\textbf{Q}\in\mathbb{R}_+^{K\times B}|\textbf{Q1}_B=\frac{1}{K}\textbf{1}_K,\textbf{Q}^\top\textbf{1}_K=\frac{1}{B}\textbf{1}_B\Big\} \tag{4}
Q={Q∈R+K×B∣Q1B=K11K,Q⊤1K=B11B}(4)
其中,
1
K
\textbf{1}_K
1K表示
K
K
K维全1向量。这个约束会强制prototype在每个batch被至少平均选择
B
K
\frac{B}{K}
KB次。
通过公式
(
3
)
(3)
(3)得到解
Q
∗
\textbf{Q}^*
Q∗,然后通过舍入的方式能够得到离散的code。离散的code在整个数据集上的效果很好,但是在在线(online)的场景中,离散的code要差于连续code。一个可能的原因是,code的舍入操作时一个比梯度更加激进的优化策略,导致模型收敛太快并得到次优解。因此,本文不进行舍入并保留了
Q
∗
\textbf{Q}^*
Q∗。
Q
∗
\textbf{Q}^*
Q∗是通过公式
(
3
)
(3)
(3)在集合
Q
\mathcal{Q}
Q得到的解,其形式为标准指数化矩阵
Q
∗
=
Diag
(
u
)
exp
(
C
⊤
Z
ϵ
)
Diag
(
v
)
(5)
\textbf{Q}^*=\text{Diag}(\textbf{u})\text{exp}\Big(\frac{\textbf{C}^\top\textbf{Z}}{\epsilon}\Big)\text{Diag}(\textbf{v}) \tag{5}
Q∗=Diag(u)exp(ϵC⊤Z)Diag(v)(5)
其中,
u
∈
R
K
\textbf{u}\in\mathbb{R}^K
u∈RK和
v
∈
R
B
\textbf{v}\in\mathbb{R}^B
v∈RB是renormalization向量。renormalization向量通过
Sinkhorn-Knopp
\text{Sinkhorn-Knopp}
Sinkhorn-Knopp算法来计算。
1.3 在小batch上运行
当batch的尺寸 B B B小于prototype的数量 K K K时,不可能等分batch至 K K K个prototypes。因此,当 batch太小时,需要使用前一个batch的数据来增大 Z \textbf{Z} Z。然后,在计算loss时仅使用当前的batch。
2. Multi-corp \text{Multi-corp} Multi-corp:使用较小图像进行视图增强
先前的实验表示,比较一个图像的随机裁剪有助于捕获场景或者物体间各个部分的关系。但是,增加裁剪视图的数量到导致内存消耗和计算量的上升。本文提出了 multi-crop \text{multi-crop} multi-crop策略,其使用两个标准分辨率的裁剪视图和 V V V个低分辨率的裁剪视图。具体来说,这里将等式 ( 1 ) (1) (1)的损失函数进行推广
L
(
z
t
1
,
z
t
2
,
…
,
z
t
V
+
2
)
=
∑
i
∈
{
1
,
2
}
∑
v
=
1
V
+
2
1
v
≠
i
l
(
z
t
v
,
q
t
i
)
(6)
L(\textbf{z}_{t_1},\textbf{z}_{t_2},\dots,\textbf{z}_{t_{V+2}})=\sum_{i\in\{1,2\}}\sum_{v=1}^{V+2}\textbf{1}_{v\neq i}l(\textbf{z}_{t_v},\textbf{q}_{t_i}) \tag{6}
L(zt1,zt2,…,ztV+2)=i∈{1,2}∑v=1∑V+21v=il(ztv,qti)(6)
需要注意,仅使用全分辨率的裁剪视图来计算code。
multi-crop
\text{multi-crop}
multi-crop策略也可以用于其他几种自监督方法。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)