Facebook于2021年提出DINO:Emerging Properties in Self-Supervised Vision Transformers
paper:https://arxiv.org/abs/2104.14294
code:https://github.com/facebookresearch/dino
名字解释:a form of self-DIstillation with NO labels
论文核心总结:DINO框架与自监督ViT的新兴特性
简单总结本文的动机就是,transformer得益于自然语言的成功才被尝试用在视觉上,而在自然语言中,基于自监督预训练在transformer上取得了很大的成功(比如BERT),那在transformer用在视觉上是不是也可以用自监督取得好的效果呢?
一、主要解决的问题
-
ViT在视觉任务中的局限性:
监督学习下的Vision Transformer(ViT)相比卷积网络(ConvNets)尚未展现明显优势,计算成本高、依赖大量训练数据,且特征缺乏独特性质。 -
自监督学习对ViT的潜力探索:
借鉴NLP中Transformer通过自监督预训练(如BERT)取得突破的经验,探究自监督学习能否为ViT赋予新特性,例如语义分割能力和更强的特征表示。 -
现有自监督方法的不足:
传统自监督方法(如对比学习、聚类)在ViT上的应用效果有限,缺乏对ViT架构特性(如自注意力机制)的充分利用。
二、技术创新点
-
DINO框架:无标签的自蒸馏范式
将自监督学习重新定义为“无标签知识蒸馏”,通过学生-教师网络结构,让学生网络预测教师网络的输出,教师网络通过动量编码器动态更新(类似Mean Teacher机制),避免依赖对比损失或复杂聚类。 -
自监督ViT的新兴特性发现
- 显式语义分割能力:ViT的自注意力图(尤其是[CLS] token的注意力)能自动捕捉物体边界和场景布局,无需额外监督,如图1。
- 卓越的k-NN分类性能:自监督ViT特征无需微调,直接作为k-NN分类器即可在ImageNet上达到高准确率,表明特征具有强判别性。
-
关键组件的协同优化
- 动量编码器与multi-crop训练:动量编码器提升教师网络稳定性,multi-crop增强(全局+局部视图)促进“局部-全局”特征对齐。
- 小patch尺寸的重要性:使用8×8小patch替代传统16×16 patch,显著提升特征分辨率和空间细节捕捉能力。
- 中心与锐化操作:通过教师输出的中心化(避免维度主导)和锐化(增强分布区分度),简单有效地防止模型崩溃。
三、实现路径
基于知识蒸馏的自监督学习(SSL with Knowledge Distillation)
本文提出的自监督框架DINO,本质是一种无标签的知识蒸馏(self-distillation)方法,其核心是通过“学生-教师网络”架构让模型从数据自身学习特征。以下是具体设计:
1. 学生-教师网络架构与蒸馏目标
- 核心思想:训练学生网络 g s g_s gs模仿教师网络 g t g_t gt的输出分布,通过交叉熵损失让学生网络的输出接近教师网络。
- 网络结构:学生和教师网络采用相同架构 g = h ∘ f g = h \circ f g=h∘f,其中 f f f为骨干网络(ViT或ResNet), h h h为投影头( 3 层多层感知器(MLP),其后紧跟l2归一化和一个具有K维度的权重归一化全连接层,,也是通过测试发现这种最有效);两者参数不同 θ s \theta_s θs为学生参数, θ t \theta_t θt为教师参数)。
- 损失函数:对同一样本的不同多裁切视图,计算教师输出与学生输出的交叉熵损失。具体而言:
- 通过multi-crop从图像生成多个视图集合 V V V,含2个224*224的全局视图 x 1 g , x 2 g x_1^g, x_2^g x1g,x2g和多个96*96局部视图;
- 学生网络处理所有视图,教师网络仅处理全局视图,以实现局部和全局的关联;
- 损失为教师全局视图输出与学生其他视图输出的交叉熵之和:
min θ s ∑ x ∈ { x 1 g , x 2 g } ∑ x ′ ∈ V x ′ ≠ x H ( P t ( x ) , P s ( x ′ ) ) \min_{\theta_s} \sum_{x \in \{x_1^g, x_2^g\}} \sum_{\substack{x' \in V \\ x' \neq x}} H(P_t(x), P_s(x')) θsminx∈{x1g,x2g}∑x′∈Vx′=x∑H(Pt(x),Ps(x′))
其中 H H H为交叉熵, P t , P s P_t, P_s Pt,Ps分别为教师和学生输出的概率分布(经softmax归一化)。
2. 教师网络的动态更新
教师网络并非预先训练好的固定模型,而是基于学生网络的历史参数动态构建:
- 更新规则:采用动量编码器(momentum encoder),教师参数通过学生参数的指数移动平均更新(在5.2节中验证该方式最有效,直接复制学生的参数会不收敛):
θ t ← λ θ t + ( 1 − λ ) θ s \theta_t \leftarrow \lambda \theta_t + (1-\lambda) \theta_s θt←λθt+(1−λ)θs
其中 λ \lambda λ按余弦调度从0.996增至1,类似Polyak-Ruppert平均,实现模型集成效果。 - 优势:教师网络性能始终优于学生,为学生提供更高质量的学习目标。
3. 网络架构细节
- 骨干网络:支持ViT(如ViT-S/16、ViT-B/8)和ResNet(如ResNet-50),ViT默认不含BatchNorm(BN)。
- 投影头:3层MLP(隐藏维度2048)+
ℓ
2
\ell_2
ℓ2归一化 + 权重归一化全连接层(输出维度
K
K
K。ViT的投影头同样不含BN,实现全BN-free系统。
4. 避免模型崩溃的机制
模型崩溃指输出分布退化(如所有输入对应相同输出),DINO通过以下操作避免:
- 中心化(Centering):对教师输出进行均值偏移校正,中心
C
C
C通过指数移动平均更新:
C ← m C + ( 1 − m ) ⋅ 1 B ∑ i = 1 B g θ t ( x i ) C \leftarrow mC + (1-m) \cdot \frac{1}{B} \sum_{i=1}^B g_{\theta_t}(x_i) C←mC+(1−m)⋅B1i=1∑Bgθt(xi)
防止单维度主导输出。 - 锐化(Sharpening):教师输出通过低温度 τ t \tau_t τt的softmax增强分布区分度(温度越低,分布越集中),与中心化平衡以避免退化到均匀分布。
中心化操作可防止单一维度占主导地位,但会促使模型向均匀分布崩溃,而锐化操作则产生相反的效果。同时应用这两种操作可平衡它们的作用,在动量教师网络存在的情况下,足以避免崩溃。选择这种方法来避免崩溃,是以一定的稳定性为代价,换取对批次的低依赖性
实现细节与评估协议
1. 实现细节
- 预训练数据:在ImageNet无标签数据集上训练。
- 优化器与调度:AdamW优化器,批次大小1024(16 GPUs);学习率前10个epoch线性热身至 0.0005 × batchsize / 256 0.0005 \times \text{batchsize}/256 0.0005×batchsize/256,随后余弦衰减;权重衰减从0.04余弦调度至0.4。
- 温度参数:学生温度 τ s = 0.1 \tau_s = 0.1 τs=0.1;教师温度 τ t \tau_t τt前30个epoch从0.04线性增至0.07。
- 数据增强:采用BYOL的增强策略(色彩抖动、高斯模糊、曝光调整)+ multi-crop训练(2个224×224全局视图 + 多个96×96局部视图),通过双三次插值适配ViT的位置嵌入。
2. 评估协议
- 线性评估:冻结预训练特征,训练线性分类器(SGD,100个epoch)。
- 微调评估:用预训练权重初始化模型,在下游任务上微调。
- k-NN评估:冻结模型,存储下游任务训练集特征;对测试样本,通过k近邻(k=20)的标签投票分类,相比以上两种方式无需调参或数据增强。
四、突出效果
-
ImageNet分类性能
- 线性评估:ViT-B/8在ImageNet上达到80.1% top-1准确率,超越同期自监督ConvNet(如ResNet-50)和监督ViT。
- k-NN分类:ViT-S/8无需微调,k-NN准确率达78.3%,接近线性评估结果,验证特征判别性。
-
下游任务泛化能力
- 语义分割:自注意力图直接用于视频实例分割(DAVIS 2017),ViT-B/8的(J&F)m指标达71.4%,超越监督ViT。
- 图像检索与复制检测:在Google Landmarks和Copydays数据集上,DINO ViT特征优于监督模型和传统自监督方法。
-
下游任务迁移学习
- DINO 预训练的 ViT 微调性能均超过监督预训练的 ViT
- DINO 预训练的 ViT 微调性能均超过监督预训练的 ViT
总结
DINO通过将自监督学习重构为无标签自蒸馏,结合动量编码器、multi-crop训练和小patch设计,首次在ViT中揭示了自监督下的语义分割能力和强k-NN特征,不仅刷新了ImageNet自监督性能,还为理解ViT的表征机制提供了新视角。
其他解释与问题思考
- 温度softmax是什么?——https://blog.youkuaiyun.com/u013172930/article/details/146239521
- DINO网络由骨干网络+映射头组成,而下游网络只用到了骨干网络输出的特征,那为什么还要映射头呢?直接用骨干网络的特征的去计算loss不行吗?——作者在附录C中说,
"Similarly to other self-supervised frameworks, using a projection head [12] improves greatly the accuracy of our method"
, 所以实际上这是前人的经验+作者自己验证后的最优结构。