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

news2024/11/26 14:29:56

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 ( x ) = e x p ( g θ s ( x ) / τ s ) ∑ k = 1 K e x p ( g θ s ( x ) / τ s ) P_s(x)=\frac{exp(g_{\theta_s}(x)/\tau_s)}{\sum_{k=1}^Kexp(g_{\theta_s}(x)/\tau_s)} Ps(x)=k=1Kexp(gθs(x)/τs)exp(gθs(x)/τs)
参考上面的式子,其对teacher网络也一样适用,只不过它们的温度因子策略有所不同。 τ s = 0.1 \tau_s=0.1 τs=0.1 τ t ∈ [ 0.04 , 0.07 ] \tau_t\in[0.04,0.07] τt[0.04,0.07]且有一个warm-up的过程。那么对于这两个分布最后是采取在不同输入下交叉熵最小化来更新student网络的参数的:
min ⁡ θ ∑ x ∈ { x 1 g , x 2 g } ∑ x ′ ∈ V , x ′ ≠ x H ( P t ( x ) , P s ( x ′ ) ) \min_\theta\sum_{x\in\{x_1^g,x_2^g\}}\sum_{x^{'}\in V,x^{'}\neq x}H(P_t(x),P_s(x^{'})) θminx{x1g,x2g}xV,x=xH(Pt(x),Ps(x))

teacher网络更新:
这里teacher网络的更新机制采用的是类似滑动平均更新的形式:
θ t = λ θ t + ( 1 − λ ) θ s \theta_t=\lambda\theta_t+(1-\lambda)\theta_s θt=λθt+(1λ)θs
也就是使用student网络的参数去更新teacher,其中参数 λ ∈ [ 0.996 , 1.0 ] \lambda\in[0.996,1.0] λ[0.996,1.0]在训练过程中会依据cosine函数进行变化。

teacher输出中心分布 C C C的更新:
同理teacher网络参数的更新机制,这里也是采用类似滑动平均的方式在Batch维度进行统计得到的:
C = m C + ( 1 − m ) 1 B ∑ i = 1 B g θ t ( x i ) C=mC+(1-m)\frac{1}{B}\sum_{i=1}^Bg_{\theta_t}(x_i) C=mC+(1m)B1i=1Bgθt(xi)

前文中一些模块对性能的影响:
在这里插入图片描述

3. DINO-v2

参考代码:dinov2

在V1版本中使用ViT作为backbone,而ViT在输入的时候会将图像切块,之后送入到网络编码。在切块基础上之前的一些文章,如MAE,会将其中的一些块给丢弃掉(mask掉),之后通过编解码器得到完整图像,表明了mask机制能带来较好自监督效果。则在v2版本中也借鉴了mask的操作,不过它使用的是teacher和student模型的形式,其方法借鉴自IBOT

【论文阅读】IBOT : IMAGE BERT PRE-TRAINING WITH ONLINE TOKENIZER

同时,数据这块文章指出精心设计过的数据能带来更好的性能,所以不是说自监督直接喂给图片就能拿到最好效果。

数据处理:
这里从ImageNet-22k、ImageNet-1k的train部分、Google Landmarks和其它一些数据中使用数据清洗手段筛选更具表达能力的数据,新得到的数据集被命名为LVD-142M。具体的,数据清洗过程见下图:
在这里插入图片描述
结合上图描述的过程,可以将整个处理流程划分为如下几步:
step1:对图片进行编码,去掉冗余信息
step2:使用编码结果进行去重
step3:去重之后的图片中检索与当前query图像类似的图像

对比是否对数据进行清洗,其差异见下表:
在这里插入图片描述

V2相比V1显著区别:

  1. V2中借鉴iBot方法引入mask机制,从而引导teacher和student网络在mask掉的区域上表达一致
  2. teacher网络将之前的softmax-centering方法替换为Sinkhorn-Knopp (SK) batch normalization,用以避免collapse。而student网络还是使用softmax归一化
  3. 为了使得一个batch中分布更加均匀使用了KoLeo regularizer
  4. 为了适应下游任务中增大分辨率的需求,在训练快结束阶段会将分辨率调整到 518 ∗ 518 518*518 518518

一些改动对性的影响:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NoSQL之Redis高可用与优化

目录 一、Redis高可用二、Redis 持久化2.1 Redis 提供两种方式进行持久化2.2 RDB持久化2.2-1 触发条件2.2-2 执行流程2.2-3 启动时加载 2.3 AOF 持久化2.3.1 开启AOF2.3.2 执行流程2.3.3 执行流程启动时加载 三、RDB和AOF的优缺点四、Redis 性能管理4.1 查看Redis内存使用4.2 内…

Linux上,多个JDK版本如何管理(交流贴)

1. 多个JDK版本面临的问题 公司大多数业务都是用Oracle JDK 8,笔者做大数据查询引擎调研时,则需要使用JDK 17 因此,需要在Linux服务器同时安装JDK 8和17,同时需要能智能地快速切换JDK版本,已使用不同的查询引擎需求 …

一致性哈希算法

如何分配请求? 大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。 但是问题来了,现在有那么多个节点(后面统称服务器为节点&#xf…

史上最详细sqlmap入门教程

最近做安全测试,遇到了SQL盲注的漏洞,从发现漏洞,确认漏洞,协助开发复现漏洞,验证漏洞一整套流程下来,有了亿点点收获,下面分享给大家,希望对软件测试同学有所启发,难度不…

ChatGPT原理简介

承接上文GPT前2代版本简介 GPT3的基本思想 GPT2没有引起多大轰动,真正改变NLP格局的是第三代版本。 GPT3训练的数据包罗万象,上通天文下知地理,所以它会胡说八道,会说的贼离谱,比如让你穿越到唐代跟李白对诗,不在一…

JavaScript如何实现上拉加载,下拉刷新?

一、前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中。本质上等同于PC网页中的分页,只是交互形式不同。开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pulltorefresh.js库等等。这些第三方库使用起来非常便捷。我们通过原生的方式…

(13)ADDA

AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号,ADC模拟-数字转换器 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换…

Spring MVC 框架

Spring MVC 框架 Spring MVC 简介Spring MVC 概述 Spring MVC入门案例案例步骤案例总结Bean 加载控制 请求与响应RequestMapping 设置请求路径请求参数五种类型参数传递普通参数POJO 数据类型嵌套POJO类型参数数组类型参数集合类型参数 JSON 数据传输参数日期类型参数传递响应 …

WPF MaterialDesign 初学项目实战(5):设计首页

原项目视频 WPF项目实战合集(2022终结版) 25P 其他内容 WPF MaterialDesign 初学项目实战(0):github 项目Demo运行 WPF MaterialDesign 初学项目实战(1)首页搭建 WPF MaterialDesign 初学项目实战(2)首页…

甲骨文云服务器 您无权访问任何应用程序?怎么办

背景 注册了甲骨文,登入是个难题,每次登入都这样显示 您无权访问任何应用程序 解决办法 因为我的服务器在于日本的大阪,每次登入链接即使采用书签的方法都会自动跳转到中国或者美国,所以是登入的连接错误了,我们需…

Mysql实现对某一字段排序并将排名写入另一字段

文章目录 前言一、数据库表结构和样例数据二、排名操作1.普通排名2.无间隔排名3.有间隔排名运行结果如图,我们可以看出此时的75已然变成了6,实现了跳跃: ![在这里插入图片描述](https://img-blog.csdnimg.cn/34f7c4db158945f1a709fc40d6f1843…

.Net C# 使用 EF Core

使用ORM框架可以加快开发速度,现在简单说下在.Net开发中使用微软官方提供的ORM框架 Entity Framework Core初始化数据库及数据表上手用法。 首先引入依赖项,通过Nuget服务添加如下3个包,因为当前使用的SQL Server数据库所以引入的是SQL Ser…

【Java算法题】剑指offer_01数据结构

前言 刷题链接: https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 1. 链表 JZ24 反转链表 思路:基本操作,如下所示。 /* public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} }…

【开源硬件篇】STM32F103C8T6核心板

STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一、STM32F103C8T6芯片1.1 STM32F103C8T6简介1.2 芯片引脚说明 二、去耦电路2.1 原理图设计2.2 原理分析2.2.1 结论2.2.2 去耦效果图2.2.3 放置距离问题2.2.3 放置位置问题 2.3 PCB设计示例 三、晶振电路3.1 原理图设计3.2 原…

(9)AT24C02存储器

AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 存储介质:E2P ROM通讯接口:I2C总线容量:256字节 I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线 …

linux(基础IO)下

目录: 1.追加实现重定向 2.dup2系统调用 3.程序替换是否会影响我们曾经打开的文件呢?? ---------------------------------------------------------------------------------------------------------------------------- 1.追加实现重定向…

Linux操作系统安全

账号的基本概念 用户: Linux中通过建立不同权限的用户,合理的控制和运用系统的资源,并且可以帮助用户构建自己的私人空间,更好的组织和管理自己的文件。 当创建一个用户时,系统会操作 /etc/passwd /etc/shadow 这两个文…

(10)DS18B20温度传感器

DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器(如热敏电阻),具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围:-55C 到 125C通信接…

希望计算机专业同学都知道这些博主

湖科大教书匠——计算机网络 “宝藏老师”、“干货满满”、“羡慕湖科大”…这些都是网友对这门网课的评价,可见网课质量之高!最全面的面试网站 湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程,用简单的语言描述复杂的…

二十九、搜索与图论——克鲁斯卡尔算法(Kruskal 算法,稀疏图)

Kruskal算法主要内容 一、基本思路1、基本思想与概念2、算法步骤3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、基本思想与概念 解决问题: 多个城市中铺公路,使城市之间可以相互联通,问如何才能让铺设公路的长度最短——铺…