一、引言
论文: DINO: Emerging Properties in Self-Supervised Vision Transformers
作者: Facebook AI Research
代码: DINO
特点: 对于一张图片,该方法首先进行全局和局部的裁剪与增强并分别送入教师和学生网络,之后以两个网络的输出一致性为损失进行学生网络的更新,另外教师网络由指数移动平均更新,还采用了中心化和锐化操作避免模式崩溃。
注意: 这里讲的是一个自监督训练策略,还有一个叫DINO的目标检测方法,请勿混淆。
二、详情
DINO的详细流程如下:
- 对于一张图片,进行2次全局裁剪(面积占比在 [ 0.4 , 1 ] [0.4,1] [0.4,1],resize为224),8次局部裁剪(面积占比 [ 0.05 , 0.4 ] [0.05,0.4] [0.05,0.4],resize为96),之后对所有切片进行随机增强(翻转、色彩变化、高斯模糊、归一化等)
- 教师网络和学生网络结构相同初始参数也相同,可以是ViT、ResNet等等,后面也都跟一个相同的 MLP \textbf{MLP} MLP来进行维度映射,映射到一个希望得到的特征长度。
- 全局视图送入教师网络,全局和局部视图送入学生网络。网络输出两两配对(1个全局和1个局部为1对,重复图像不成对,共18对),每对计算1项损失。
- 教师网络的每个输出先减去center(初始全0)再除以temp=0.04之后求softmax;学生网络的每个输出先除以temp=0.1,然后求softmax再取log;两者相乘得到1项损失(其实就是在标准的交叉熵损失中对教师网络输出引入了锐化和中心化,对学生网络输出引入了锐化)。
除以temp的操作称为锐化(sharping),减去中心的操作称为中心化(centering),两个操作叠加是为了避免模式崩溃(无论哪个图像网络输出softmax后始终是某一项很大或始终接近均匀分布)。锐化能放大分布中某一个值减小其他值,中心化能促使分布更接近均匀分布,两个相反的操作相互作用使得模式崩溃得以避免。
- 之后更新中心center,center用下式更新:
center = center_momentum * center + (1 - center_momentum) * batch_center
其中,center_momentum=0.9,batch_center是当前批次所有全局视图经教师网络输出的均值。其实这个操作就是指数移动平均,一般公式为 b = λ b + ( 1 − λ ) a b=\lambda b+(1-\lambda)a b=λb+(1−λ)a,简单来说就是用另外一个参数更新自己,但是保留自己的一部分。
- 根据5中的损失更新学生网络,教师网络不用损失更新,而是用下式:
θ t = λ θ t + ( 1 − λ ) θ s \theta_{t}=\lambda\theta_{t}+(1-\lambda)\theta_{s} θt=λθt+(1−λ)θs,
其中, λ \lambda λ在训练时是遵循cosine schedule,从0.996到1变化。即用学生网络更新教师网络,但保留教师网络的一部分。
事实上,只进行两次全局裁剪和增强也是可以的,伪代码如下: