基于蒸馏的思想,实现图像的自监督学习。这里只是自监督的预训练模型,还需要针对下有任务微调的。
首先区分,生成式的任务和判别式的任务。比如图像生成,那mask掉一块让模型把这块补出来,自监督比较容易实现。但如果判别式的,比如实例分割、分类、检索等任务,自监督应该监督什么信息?
已有的研究,监督一张图各种数据增强后还和自身相近,但实现方式上有end-to-end和memory-bank,主要是对负例的管理方式,监督采用对比学习。MoCo系列,提出了momentum encode思想,作为二者的中间状态,V1核心思想,V2加了点SimCLR的优化点,V3移植到了ViT模型并主要在优化自监督的ViT训练时不稳定的问题(训练中acc发生dip),采用的是冻结第一层的思路,因为发现dip是第一层梯度暴涨并逐渐传播后导致的。
DINO,借鉴了MoCo系列的momentum encode思想,同时借鉴了知识蒸馏的思路,希望让ViT中基于无监督训练先获得足够多的认知,避免直接监督信号后被快速积压到监督目标任务而无法积累全局性基础理解能力。
教师和学生网络,同一个模型结构但不同模型参数;一张图,学生模型有全局视野和局部视野两种裁剪程度的输入,教师模型只有全局视野程度的;然后,学生模型和教师模型softmax输出概率要交叉熵对齐,逼迫学生模型也要能学到全局视野的信息;学生模型正常BP训练,教师模型也是momentum式(指数移动平均)基于学生模型的参数更新。
另外,输出时教师模型加入了centering+sharpening,目的是不同batch的结果保持稳定,自然就可能克制dip的问题。
实验中,发现ViT的patch取的分辨率小一点,效果更好但计算效率也骤降;用更大更好的数据自监督训练,微调后对应任务表现可能更好。