自监督ViT:DINO-v1和DINO-v2

本文深入探讨了基于ViT的自监督学习算法DINO,包括DINO-v1和DINO-v2。DINO-v1利用ViT的语义表达能力,通过自蒸馏和滑动平均更新策略训练教师和学生网络。DINO-v2引入了mask机制,借鉴IBOT方法,并优化了数据处理,以提高模型性能。
摘要由CSDN通过智能技术生成

1. 概述

基于ViT(Vision Transformer)自监督在最近几年取得了很大进步,目前在无监督分类任务下已经超过了之前的一些经典模型,同时在检测分割等基础任务领域也展现出了强大的泛化能力。这篇文章将主要基于DINO系列自监督算法介绍它们的算法原理,方便 大家快速了解相关算法。

2. DINO-v1

参考代码:dino

这个方法源自于一个很重要的发现,自监督的ViT在图像语义分割的显式信息表达上具有独特性,也就是说相比有监督的ViT网络或者是传统的CNN网络其具有更强的语义表达能力和分辨能力。基于此使用k-NN算法作为分类器便能在一个较小的ViT网络上实现78.3% ImageNet top-1的准确率。在该方法中构建自蒸馏的方式训练和更新教师和学生网络,同样也适用了参数类似滑动平均更新和输入图像多重裁剪训练策略。对于训练得到的网络对其中的attention map进行可视化,确实也呈现出了上述提到的物体语义区域的感知能力,见下图可视化效果:
在这里插入图片描述

整体上文章提出的方法pipeline见下图所示:
在这里插入图片描述
在上图中包含了两个相同结构的网络 g θ s g_{\theta_s} gθs g θ t g_{\theta_t} gθt,喂给它们同一张图不同的信息(local和global,也就是图像分辨率一个大一个小),之后对输出用交叉熵损失函数约束。但是这里需要注意的是只有student网络会存在梯度反向传播,teacher是通过类似滑动平均更新的形式更新参数。整体流程比较简洁,其自监督运算流程如下:
在这里插入图片描述
step1 :为teacher和student分别准备不同的数据
step2:将teacher和student的输出软化,用teacher结果作为pseudo GT和交叉熵损失函数更新student参数
step3:使用类似滑动平均更新方式更新teacher的参数,同时更新teacher的数据中心分布( C C C),用它和 τ t \tau_t τt来避免collapse

输入处理:
在自监督方法设计过程中,teacher网络是没有任何先验初始化的,而teacher需要正确引导student网络学习。那么要使得自监督能够进行下去,则teacher应该能获取到更多的信息,而student相应的获取较少信息,这样才有信息的梯度差异,实际中是通过给teacher和student网络不同的图像分辨率图像实现的。对应的在输入图像的过程中也会经过一些数据增广操作,如视图扭曲、裁剪等操作。

student网络蒸馏和更新:
在ViT骨干网络基础上,会连接几个fc层(中间会使用l2-norm)得到这张图的高维度表达(表达的维度为 K K K): P s P_s Ps P t P_t Pt。为了避免生成的分布不够平滑这里对student和teacher的输出引入不同温度因子进行平滑:
P s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值