DINO:自监督视觉Transformers的新兴特性
背景
DINO是一种用于自监督视觉学习的深度学习模型,于2021年由Facebook AI提出。
相比于监督学习需要人为提供标签,自监督学习无需任何显式标签(类似于NLP预训练中的next word prediction或masked language modeling)。只需输入图像并通过特定机制,网络就能学会理解图像本身的语义信息。
例如,可以通过图像旋转、随机裁剪等变换,使模型学习到不同角度、不同尺度下的特征。也可以通过模型自身的预测来构建任务,如预测图像的局部块、颜色等。这些任务不需要人类标注,因此可以在大规模无标签数据上进行训练,提供了一种从无标签数据中学习特征表示的新方法。
方法
DINO的名称来源于Distillation和NO labels的缩写,既表达了采用自蒸馏方法的特点,也突出了它是一种基于无监督学习的模型。具体来说,DINO使用"无监督自蒸馏"方法,模型使用自身的输出生成"伪标签",然后用这些伪标签重新训练模型,进一步提高性能和泛化能力。
No labels(无标签)
DINO中最核心的数据采样策略是图像裁剪,这也是自监督学习领域广泛应用的主策略之一。裁剪后的图像分为两种:
- Local views(局部视角):也称为small crops,抠图面积小于原始图像的50%
- Global views(全局视角):也称为large crops,抠图面积大于原始图像的50%
在DINO中,学生模型接收所有预处理过的crops图,而教师模型仅接收来自global views的裁剪图。这是为了鼓励从局部到全局的响应,训练学生模型从小裁剪画面中推断更广泛的上下文信息。
Distillation(蒸馏)
学生和教师网络均输出相同embeddings的情况容易出现模式崩塌(mode collapse)现象。《Momentum Contrast for Unsupervised Visual Representation Learning》一文提出解决方案:应用"动量教师"模型。教师模型不是基于反向传播更新(因为直接通过反向传播更新参数波动过大),而是在对学生模型进行梯度回传后,通过指数移动平均(EWA)将学生网络学习到的模型参数更新给教师网络。
教师权重的更新公式:
θt=λθt+(1−λ)θs\theta_t = \lambda\theta_t + (1-\lambda)\theta_sθt=λθt+(1−λ)θs
下标s和t分别指代教师和学生网络的模型参数;λ则跟随余弦学习率衰减策略在训练过程中从0.996到1之间变化。
Loss Function(损失函数)
自监督学习中,模式崩塌是指网络学习过程中出现多样性减少的现象。具体来说,当网络学习到一组特征表示时,多个输入数据可能映射到相同的特征表示。这种现象通常是由于网络在优化过程中陷入局部最优解,只能考虑到一部分数据的特征表示,而忽略其他数据样本的模式和特征,从而导致多样性缺失,对模型鲁棒性产生负面影响。
DINO论文中还有两个重要技术:Centering和Sharpening,这是防止模式崩塌的两种有效方式。
Centering(中心化)
教师网络输出减去一个滑动平均的均值向量:
C=m∗C+(1−m)∗mean(teacher_output)C = m * C + (1-m) * mean(teacher\_output)C=m∗C+(1−m)∗mean(teacher_output)
这个操作的目的是使激活值有时为正(高于平均值时),有时为负(低于平均值时)。由于softmax函数在处理负数时会给出较小的概率值,在处理正数时会给出较大的概率值,因此这种操作能够防止任何一个特征占据统治地位。
Sharpening(锐化)
对教师网络的输出应用较低的温度系数(τₜ):
Pt=softmax((zt−C)/τt)P_t = softmax((z_t - C) / τ_t)Pt=softmax((zt−C)/τt)
其中zₜ是教师网络的原始输出(logits),C是Centering的滑动平均中心向量。锐化防止均匀输出,使教师网络的概率分布更"尖锐",突出重要特征,引导学生模型更好地了解哪些特征应该变得更加强大。
DINOv2:无需监督学习鲁棒的视觉特征
背景
基于DINO的版本,DINOv2分别对于数据处理、自监督训练以及解决模型的崩塌做了一些处理优化。
方法
介绍了技术创新以充分挖掘自监督学习潜力,包括:
- 自动化数据管道用于获取更好的数据集
- 训练包含10亿个可调参数的ViT模型
- 通过无监督蒸馏方法将其压缩成一系列适用于不同任务的小模型
数据处理
预处理
数据集来源包括公开数据集和网络数据集。网络数据集进行了预处理,对下载的图像进行后处理,包括:
- PCA哈希去重
- NSFW过滤
- 模糊可识别的人脸
检索相似图片
此数据集通过从大量未标注数据中检索出与几个精心整理数据集中相似度很高的样本组成。本文使用在ImageNet-22k上预训练过的ViT-H/16自监督神经网络计算每个图像的嵌入。
图片去重
预处理低质量数据后,必然存在许多冗余图像。本文采用《A self-supervised descriptor for image copy detection》论文提出的copy detection pipeline进行图像查重,有效减少冗余并增加图像多样性。
最终生成的LVD-142M数据集包含142百万张图像。整个预处理过程只需不到两天时间。
自监督训练
本文提出了一种用于学习特征的判别式自监督方法,由多个损失函数组成,包括:
- DINO:Transformers之间的局部信息最大化
- iBOT:特征之间的相似度最小化
- SwAV:样本中心化
同时添加了一个正则项,使特征在特征空间中更均匀分布。
DINOv2还进行了短暂的高分辨率训练阶段,以进一步提高特征的鲁棒性。
模型蒸馏
使用student与teacher联合蒸馏训练的思路。模型蒸馏通过在小模型中复制大模型的输出来训练小模型,旨在通过最小化大模型和小模型对一组给定输入的输出之间的距离来实现。
对于训练,研究人员利用同样的训练循环,使用更大的模型作为冻结的教师模型,保留学生模型的EMA作为最终模型,并移除遮蔽和随机深度。
Image-level目标(图像级)
基本思想是将来自同一图像不同裁剪的视图作为正样本,来自不同图像的视图作为负样本,使用交叉熵损失函数衡量这些视图之间的相似性和差异性,从而训练学生网络。使用指数移动平均方法构建教师网络,其参数是过去迭代的加权平均值,以减少训练波动。
Patch-level目标(补丁级)
将输入的一些Patch随机遮盖,只将未被遮盖的Patch提供给教师网络,然后使用交叉熵损失函数衡量学生和教师网络在每个被遮盖Patch上的特征表示的相似性和差异性,从而训练学生网络。
损失函数权重
图像级别和Patch级别进行联合训练,但它们的损失函数共享网络参数(权重)。实验发现,当两个级别的损失函数共享同样参数时,模型在Patch级别会欠拟合,在图像级别会过拟合。因此,可以将这些参数解绑,使模型在两个级别都能更好地学习特征表示。
Adapting the resolution(调整分辨率)
在预训练的最后一段时间内,将图像分辨率提高到518×518,以便在下游任务中更好地处理像素级别的信息,如分割或检测任务。高分辨率图像通常需要更多计算资源和存储空间,因此只在预训练最后阶段使用这种方法,以减少时间和资源成本。
防止模型崩塌
Sinkhorn-Knopp centering
在原来的方法中,教师模型中的softmax-centering步骤在某些情况下可能导致不稳定性,因此本文采用Sinkhorn-Knopp(SK)批量归一化方法代替。核心思想是通过正则化使学生和教师网络在特征表示上更加接近。使用3次Sinkhorn-Knopp算法迭代实现归一化。对于学生网络,仍然使用softmax归一化。
KoLeo regularizer
一种正则化方法,通过计算特征向量之间的差异来确保它们在批次内均匀分布。具体使用Kozachenko-Leonenko差分熵估计技术,这是一种估计随机样本密度的方法。