Facebook的DINO
参考:https://blog.csdn.net/hello_dear_you/article/details/133695006
代码:https://github.com/facebookresearch/dino/tree/main
DINO本质上是一种自监督学习方法,其核心思想是通过在大规模的无标签数据集上进行对比学习,期待学习到更好的视觉通用表征。该方法采用自蒸馏的方式,即将一个student和teacher的输出进行比较,以学习出更好的表示。
第一步:使用无标签数据训练一个基础大模型。
原理:
整个框架包含teacher和student模型,并且两者的网络结构相同,但参数不同;
【multi-crop learning】
DINO中会对输入图像进行不同尺度的裁剪采样,这个也是自监督学习领域应用非常广泛的策略,裁剪后的图像可以分为两种:
local views:局部视角,也称为small crops,指的是crop图像的面积小于原图的50%;
global views:全局视角,也成为global crops,指的是crop图像的面积大于原图的50%;
在DINO中,student模型接收的是所有的crops图,而teacher模型接收的只是global views的裁剪图。通过这种方式,监督student模型学习到从局部到全局的响应。
此外,为了增强网络的鲁棒性,采用了其他的数据增强手段,如:颜色扰动、高斯模糊和曝光增强。
【momentum teacher】
teacher模型的权重参数更新不是基于反向传播更新的,而是通过指数移动平均法,将student模型学习到的权重参数更新给teacher。
【centering and sharpening】
在DINO中,采用centering和shapening来防止model collapse模型坍塌。在自监督学习中,模型坍塌指的是网络学习过程中出现了多样性减少的现象。具体而言,当模型把多个输入数据映射到相同的特征表示时,只考虑了一部分数据的表示,而忽略了其他数据样本的特征,从而导致多样性缺失,对模型的鲁棒性会产生很大的负面影响。
训练细节:
训练集:不包含标签的ImageNet数据集
优化函数:Adamw optimizer
Batch size: 1024
学习率在最初的10epochs相对于base值呈线性增长,按照如下规则: lr=0.0005 * batchsize / 256,在warmup之后,使用余弦策略衰减学习率
权重衰减也是按照余弦衰减策略从0.04到0.4
在最开始的30epochs,温度系数设置为0.1,使用linear warm-up从0.04到0.07
使用BYOL数据增强:color jittering、Gaussian blur和solarization,multi-crop使用bicubic interpolation适应position embedding
第二步:使用第一步得到的模型进行特征提取,再进行继续训练分类模型或者分割模型。以相同方式的分类模型为指标,评估第一步模型的效果。
分类:linear 和k-NN 评估,其中linear评估指的是冻结预训练模型的权重,仅训练linear层;k-NN分类评估先使用预训练模型计算和保存数据集的特征,然后使用k-NN基于提取的特征对输入图像进行分类。
分割: