【论文精读】DINO

摘要

       基于对ViT在监督学习领域的表现质疑,探究自监督方法下的ViT是否具有更好的特征提取能力,进而发现:

  • 自监督ViT特征包含场景布局、对象边界。这些信息可以在最后一自注意力模块中直接访问。
  • 自监督ViT特征结合最近邻分类器(k-NN)分类头中表现很好,无需任何微调、线性分类器或数据增强,在ImageNet上实现了78.3%的最高精度。
  • 自监督下ViT可以比卷积网络获得更多有用的语义信息。

算法框架

       SSL with Knowledge Distillation
image

input

       定义学生网络 g θ s g_{\theta_s} gθs和教师网络 g θ t g_{\theta_t} gθt两个网络,参数表示为 θ s \theta_s θs θ t \theta_t θt,两者体系结构相同,但参数不同。在教师网络上应用停止梯度(sg)算子。具体如下:

       给定输入图像 x x x,经过两种数据增强方式局部随机裁剪(local crop)和全局随机裁剪(global views)得到 ( x 1 , x 2 ) (x_1,x_2) (x1,x2) x 1 x_1 x1(local crop)传递给学生网络 g θ s g_{\theta_s} gθs x 2 x_2 x2(global views)传递给教师网络 g θ t g_{\theta_t} gθt。用来鼓励局部到全局的通信。

数据增强

       DINO 中最核心的数据采样策略便是图像裁剪,将裁剪后的图像分为两种:

  • Local views: 即局部视角,也称为small crops,指抠图面积小于原始图像的 50%
  • Global views: 即全局视角,也称为large crops,指抠图面积大于原始图像的 50%

       DINO 中也采用一些其它的随机增强,包括:颜色扰动(color jittering) 、高斯模糊(Gaussian blur) 、曝光增强(solarization)。

网络架构

       神经网络 g g g由backbone f f f和投影头 h h h组成,故有 g = h ◦ f g = h ◦ f g=hf。backbone f f f为ViT或者ResNet, 可应用于下游任务。投影头 h h h为3层的MLP,隐层维度为2048(遵循L2 normalization)和一个 K K K维归一化的全连接。与标准的深度网络不同,该系统完全没有BN(batch normalization)模块。
L = L ( W ) + λ ∑ i = 1 n w i 2 L=L(W)+\lambda\sum^n_{i=1}w^2_i L=L(W)+λi=1nwi2

       上式右侧项为L2正则化。

loss和反向传播

       教师网络和学生网络的最终输出 P s P_s Ps P t P_t Pt都为 K K K维概率分布。概率 P P P通过网络输出 g g gsoftmax归一化得到。 τ > 0 \tau >0 τ>0是一个控制输出分布锐度的temperature参数。
P s ( x ) ( i ) = exp ⁡ ( g θ s ( x ) ( i ) / τ s ) ∑ k = 1 K exp ⁡ ( g θ s ( x ) ( k ) / τ s ) P_s(x)^{(i)}=\frac {\exp(g_{\theta_s}(x)^{(i)}/\tau_s)} {\sum^K_{k=1}\exp(g_{\theta_s}(x)^{(k)}/\tau_s)} Ps(x)(i)=k=1Kexp(gθs(x)(k)/τs)exp(gθs(x)(i)/τs)

       通过最小化交叉熵损失匹配教师网络 θ t \theta_t θt学生网络 θ s \theta_s θs的参数。其中 H ( a , b ) = − a log ⁡ b H(a,b)=-a\log b H(a,b)=alogb
min ⁡ θ s H ( P t ( x ) , P s ( x ) ) \min_{\theta_s}H(P_t(x),P_s(x)) θsminH(Pt(x),Ps(x))

       具体,从给定的图像,生成一个集合 V V V,集合包含两个全局视图 x 1 g x_1^g x1g x 2 g x_2^g x2g以及几个分辨率较小的局部视图。学生网络接收所有视图,教师网络只接收全局视图,因此鼓励“局部到全局”的通信。两个网络得到最终输出后,计算交叉熵。
min ⁡ θ s ∑ x ∈ { x 1 g , x 2 g } ∑ x ′ ∈ V , x ′ ≠ x H ( P t ( x ) , P s ( x ′ ) ) \min_{\theta_s}\sum_{x\in\{x^g_1,x^g_2\}}\sum_{x'\in V , x' \not = x}H(P_t(x),P_s(x')) θsminx{x1g,x2g}xV,x=xH(Pt(x),Ps(x))

       学生网络通过反向传播更新参数,教师网络不参与反向传播,通过对学生网络的参数进行EMA更新,教师网络的权重更新自学生网络。 λ λ λ在训练期间,遵循余弦学习率衰减策略从0.996到1之间变化。
θ t ← λ θ t + ( 1 − λ ) θ s \theta_t←\lambda\theta_t+(1-\lambda)\theta_s θtλθt+(1λ)θs

Centering and Sharpening

       在自监督学习中,mode collapse是指网络的学习过程中出现了多样性减少的现象。当网络学习到一组特征表示时,会出现多个输入数据映射到相同特征的情况,即模式坍塌。这种现象通常由于网络在优化过程中陷入了局部最优解,只考虑到一部分数据的特征表示,忽略了其它数据的模式和特征,从而导致了多样性缺失的现象,因此会对模型的鲁棒性产生很大的负面影响,故而引入Centering和Sharpening。

       教师网络输出 g θ s g_{\theta_s} gθs后,会接一个centering操作,可以看成教师网络的输出再加上一个偏置项 c c c
g t ( x ) ← g t ( x ) + c g_t(x)←g_t(x)+c gt(x)gt(x)+c

       偏置 c c c随着教师网络参数的EMA更新而更新,更新策略如下,其中 m > 0 m > 0 m>0是一个速率参数, B B B是批量大小。
c ← m c + ( 1 − m ) 1 B ∑ i = 1 B g θ t ( x i ) c←mc+(1-m)\frac 1 B \sum^B_{i=1}g_{\theta_t}(x_i) cmc+(1m)B1i=1Bgθt(xi)

       从上述公式看出偏置 c c c实则为一个均值项,centering操作的目的是使得激活值高于平均值时为正,低于平均值时为负。由于softmax函数在处理负数时会给出较小的概率值,而在处理正数时会给出较大的概率值,因此这种操作能够防止任何一个特征占据统治地位。

       Sharpening即概率 P P P中的 τ \tau τ参数。这种技巧通过在softmax函数中加入一个temperature参数,让模型将概率分布更加尖锐化。由于小差异会被夸大,可防止所有激活值相同。这个技巧和中心化操作搭配使用,可以使得激活值不断变化,从而引导学生模型更好地了解哪些特征应该变得更大。

算法伪代码

image

模型版本

image

实验

对比实验

image
       上图为在ImageNet上应用使用不同自监督算法应用线性头和k-NN头分类,DINO在ResNet-50上达到75.3%的最先进效果。在ViT架构时,在线性分类方面比BYOL、MoCov2和SwAV高出3.5+%,在k-NN评估方面高出7.9+%。

       用DINO训练的8 × 8 patch的ViT在线性分类中达到了80.1%的top-1,用k-NN分类器达到了77.4%,比SCLRv2的参数少10倍,运行时间快1.4倍。
image
       上图比较预训练vit、resnet作为监督模型和DINO算法骨干网络下在不同数据集检测的性能。可以看到DINO优于监督学习算法。
image
       上图做复制检测实验。在Copydays数据集“strong”子集上计算复制检测的mAP性能。对比multigrain算法,DINO的优于该算法。
image
       上图在平均区域相似度 J m J_m Jm和平均contour-based精度 F m F_m Fm两个指标下比较现有的监督、自监督方法在DAVIS 2017视频对象分割的性能。DINO的优于其余算法
image
       上图DINIO在不同数据集中迁移学习后进行微调实验,在top-1准确率下DINO优于监督方法。

消融实验

image
       上图为对DINO的消融实验,可以看到缺失动量编码器(行2)即教师网络的EMA参数更新,模型将无法训练;添加Sinkhorn-Knopp批量归一化方法(行3)对算法提升效果不大;缺少MC数据增强方法(行4),效果会下降;采用MSE损失(行5),模型效果会大幅下降;最优搭配为动量编码器与多组增强和交叉熵损失(行1)。
image
       上图比较了使用不同patch大小(16 × 16, 8 × 8和5 × 5)训练的ViT-S模型的k-NN分类性能,所有模型都训练了300个epoch。可以看到随着patch的减小,性能大大提高,但同时吞吐量会随之下降。
image
       上图为不同MC方法下,分别在100和300epochs中达到不同top1精度的训练时间,可以看到行1中没有使用MC方法性能达到72.5%耗时45.9小时,而行4中的设置仅24小时达到74.6%。这是+2%的改进,同时只需一半的时间,但内存使用更高(15.4G与9.3G)。观察到在行1中设置中进行更多的训练无法赶上MC方法带来的性能提升,这显示了“局部到全局”增强的价值。
image
       上图为在不同batch size下分别进行100次没有MC方法的top1精度,证实了可以小批量地将模型训练到高性能。

可视化

image       上图为从DINO训练的ViT-S/8的最后一块中可视化自注意力模块。image
       用DINO表示的ImageNet类的t-SNE可视化。对于每个类别,通过在验证集中取该类的所有图像的平均特征来获得嵌入。

投影头实验

image
       上图为DINO添加投影头与否的计算框架,并做下列实验:
image
       上图为对投影头模块添加BN层的实验,可以看到添加BN后效果反而会变差,故DINO系统中不使用任何BN层。
image
       上图对有或没有l2-归一化瓶颈的情况下训练的准确性,改变了投影头中线性层的数量对准确率的影响实验。没有l2-归一化瓶颈时,增加投影头的深度DINO训练失败。说明l2归一化瓶颈稳定了深度投影头的训练,且该种情况下增加投影头的深度可以提高精度。
image
       上图为投影头输出输出维度K对准确率的影响实验,可以看到大的输出维度可以提高性能。
image
       ViT中使用的激活是高斯误差线性单位(GELU)。故而为了架构内的一致性,在投影头中也选择使用GELU。上图中评估了使用ReLU代替GELU的效果,观察到将激活单元改为ReLU的影响相对较小。

避免坍塌实验

image
       由于自监督学习容易陷入特征上图研究了Centering和Sharpening的互补作用,以避免坍塌。坍缩有两种形式,无论输入是什么,模型输出沿所有维度均匀或由一个维度支配。Centering避免了一个维度支配导致的坍塌,但鼓励了均匀的输出,削尖会产生相反的效果。通过将交叉熵 H H H分解为熵 h h h和KL散度 D K L D_{KL} DKL展示这种互补性:
H ( P t , P s ) = h ( P t ) + D K L ( P t ∣ P s ) H(P_t,P_s)=h(P_t)+D_{KL}(P_t|P_s) H(Pt,Ps)=h(Pt)+DKL(PtPs)

       KL等于0时,意味着学生和教师网络的概率分布一致,表示坍塌。从上图右侧看出,缺失Centering和Sharpening任何一项,都会导致特征坍塌。

       从上图左侧看,0表示没有中心化和 − l o g ( 1 / K ) −log(1/K) log(1/K)表示没有锐化,表明这两种操作导致了不同的崩溃形式。应用这两种操作可以平衡这些效果。故而temperature参数 τ \tau τ的取值很关键。
image
       上图对 τ \tau τ的消融实验观察到:

  • 需要低于0.06的temperature才能避免坍塌。当temperature高于0.06时,训练损失始终收敛到 l n ( K ) ln(K) ln(K)
  • 如果从一个较小的值开始训练,并在第一个epoch期间增加,则使用比0.06更高的温度不会崩溃。实践中,在训练的第一个30阶段对 τ \tau τ使用从0.04到0.07的线性退火。
  • τ → 0 τ → 0 τ0(极端锐化)对应于argmax操作,将导致one-hot硬分布。

reference

Caron, M. , Touvron, H. , Misra, I. , Hervé Jégou, Mairal, J. , & Bojanowski, P. , et al. (2021). Emerging properties in self-supervised vision transformers.

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

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

相关文章

java-8组合式异步编程

11.1 Future 接口 Future接口在Java5中被引人,设计初衷是对将来某个时刻会发生的结果进行建模。它建模了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。在Future中触发那些潜在耗时的操作把调用…

【VSCode】使用笔记

目录 快捷键系列 相关插件 相关文档链接 快捷键系列 调出终端 ctrl 或者是ctrlJ 结束进程 ctrlc 注释 ctrlkc 取消注释 ctrlku 上下移动代码 alt方向键 多行光标ctrlalt方向键 快速跳过某个单词 ctrl方向键 相关插件 1.每次修改后,自动保存启动项目 相…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)

效果演示 文章目录 效果演示系列目录前言存储加载物品信息源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快…

黄金交易策略(Nerve Nnife.mql4):移动止盈的设计

完整EA:Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 相较mt4的止盈止损,在ea上实现移动止盈,可以尽最大可能去获得更高收益。移动止盈的大体逻辑是:到达止盈点就开始追踪止盈,直到在最高盈利点回撤指定点数即平…

内网渗透Searchall敏感凭证信息搜索工具

一、开发背景 在实战中进入内网的时候,大家需要搜集一些敏感信息例如账号,密码甚至浏览器的账号密码。searchall完美解决了这个问题。所以我就结合自身的经验写了一款搜索敏感信息的利用工具。它可以搜索敏感信息,更快为你获取到有价值的信息…

【机器学习】数据清洗之识别重复点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…

武器级工具包 Immunity Canvas 7.26安装使用体验

介绍: Immunity Canvas工具包有集成化、自动化、简单化的特点,大幅降低了攻击门槛。该工具是Immunity公司的一款商业级漏洞利用和渗透测试工具,包含了480多个以上的漏洞利用,该工具工具本来并不开源,但是在2021年Immu…

函数递归与迭代附n的阶乘+顺序打印一个整数的每一位数+求第n个斐波那契数

1. 什么是递归&#xff1f; 递归其实是一种解决问题的方法&#xff0c;在C语言中&#xff0c;递归就是函数自己调用自己。 下面是一个最简单的C语言递归代码&#xff1a; #include <stdio.h> int main() {printf("hehe\n");main();//main函数中⼜调⽤了main函数…

基于Java (spring-boot)的房屋租赁管理系统

一、项目介绍 基于Java (spring-boot)的房屋租赁管理系统功能&#xff1a;登录、管理员、租客、公告信息管理、房屋信息管理、用户信息管理、租金信息管理、故障信息管理、房屋出租信息详情、个人信息、修改密码、等等等。 适用人群&#xff1a;适合小白、大学生、毕业设计、课…

linux优化空间完全卸载mysql——centos7.9

文章目录 ⭐前言⭐linux命令使用&#x1f496; 基础命令&#x1f496; 内存优化&#x1f496; 完全删除mysql ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享 linux优化空间&完全卸载mysql——centos7.9。 linux内存分配 在Linux中&#xff0c;内存分配是…

第7讲 SpringSecurity执行原理概述

SpringSecurity执行原理概述 spring security的简单原理&#xff1a; SpringSecurity有很多很多的拦截器&#xff0c;在执行流程里面主要有两个核心的拦截器 1&#xff0c;登陆验证拦截器AuthenticationProcessingFilter 2&#xff0c;资源管理拦截器AbstractSecurityInterc…

为什么电路要设计得这么复杂?

首先提出这个问题就很不容易啊&#xff0c;我们看两个精彩回答。 From 骄建&#xff1a; 假设我们回到第一个实用放大电路诞生之前&#xff1a; 某天你开始做一个CS单管放大器&#xff0c;电阻负载&#xff0c;可是有一大堆问题&#xff0c;电阻做的不准&#xff0c;温度对器…

AI:129-基于深度学习的极端天气事件预警

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

HTML5 Canvas与JavaScript携手绘制动态星空背景

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>星空背景</title> </head> <body style"overflow-x:hidden;"><canvas …

wayland(xdg_wm_base) client 使用 dmabuf 最简实例

文章目录 前言一、zwp_linux_dmabuf_v1 协议二、wayland client 使用 zwp_linux_dmabuf_v1 协议传递dma-buf代码实例1. wayland_dmabuf.c 代码实例2. xdg-shell-protocol.c 和 xdg-shell-client-protocol.h3. linux-dmabuf-unstable-v1-client-protocol.h 和 linux-dmabuf-unst…

机器学习算法与Python实战 | 常见统计概率分布实现(内含python代码)

本文来源公众号“机器学习算法与Python实战”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;https://mp.weixin.qq.com/s/0Lgmdvey70wXQcP1XQvylQ 在平时的科研中&#xff0c;我们经常使用统计概率的相关知识来帮助我们进行城市研…

第五节 zookeeper集群与分布式锁_2

1.分布式锁概述 1.1 什么是分布式锁 1&#xff09;要介绍分布式锁&#xff0c;首先要提到与分布式锁相对应的是线程锁。 线程锁&#xff1a;主要用来给方法、代码块加锁。当某个方法或代码使用锁&#xff0c;在同一时刻仅有一个线程执行该方法或该代码段。 线程锁只在同一J…

【医学知识图谱 自动补全 关系抽取】生成模型 + 医学知识图谱 = 发现三元组隐藏的关系实体对

生成模型 医学知识图谱 发现三元组新关系实体对 提出背景问题&#xff1a;如何自动发现并生成医疗领域中未被标注的实体关系三元组&#xff1f;CRVAE模型 提出背景 论文&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3219819.3220010 以条件关系变分自编码器&#xff08;…

第7章 Page449 7.8.9智能指针 std::unique_ptr课堂作业,使用智能指针改写foo()函数

源代码&#xff1a; /** \brief 使用std::unique_ptr改写智能指针章节开始的foo()函数** \param* \param* \return**/ #include <iostream> #include <memory>using namespace std;struct O {~O(){cout << "我是被管的对象。我要被释放啦......" …

php基础学习之文件包含

描述 在一个php脚本中&#xff0c;将另一个php文件包含进来&#xff0c;合作实现某种功能 这个描述看起来似乎和C/Java等语言的头文件/包有点类似&#xff0c;但本质是不一样的 打个比方&#xff1a; C/Java的头文件/包更像是一个工具箱&#xff0c;存放各种很完善的工具&#…