当前位置: 首页 > news >正文

自监督DINO论文笔记

论文名称:Emerging Properties in Self-Supervised Vision Transformers
发表时间:CVPR2021
作者及组织: Facebook AI Research
GitHub:https://github.com/facebookresearch/dino/tree/main

问题与贡献

作者认为self-supervised learning自监督学习结合vision transformer(ViT),相对于卷积神经网络,能挖掘更多目标特性,更具象化的表达目标。本文有如下两点贡献:

  • 提出了一种新的自监督学习方法,DINO(self-distillation with no labels),结合ViT-Base在ImageNet的linear evaluation上达到了80.1%的Top-1指标;
  • 自监督学习结合ViT得到的特征包含一张图像更显式的语义分割信息,远远超过带监督信息的ViTs或者卷积神经网络;如下图所示,自监督的ViTs可以自动学习目标类别的特征信息实现无监督的目标分割。

image.png

前置概念和理论

自监督学习

在机器学习中,根据是否有标签的训练数据可以分为有监督学习和无监督学习。其中,self-supervise learning,又称自监督学习,是无监督学习中的一种,主要是希望能够学习到一种通用的特征表达用于下游任务。
自监督学习模型训练分为两个阶段,在预训练阶段使用大量无标签的数据集进行训练,学习到通用的特征表达,然后根据下游任务的不同用带有标签的数据进行FineTune。
image.png
在自监督学习中,有两类主流的方法:基于Generative的方法和基于Contrastive的方法。基于Generative的方法主要关注重建误差,如一个句子中间盖住一个token,让模型去预测,计算预测结果与真实的token之间的误差更新模型。基于Contrastive方法不要求模型能重建原始输入,而是希望模型能够在特征空间上对不同的输入进行分辨。

知识蒸馏

知识蒸馏是一种模型压缩方法,是一种基于“教师-学生网络思想”的训练方法。其核心思想是将已经训练好的模型包含的知识蒸馏提取到另一个模型里面去。
如下图所示,教师模型的知识可以通过不同的方式传递给学生模型,包括软标签、特征表示和模型输出的概率分布等。学生模型通过与教师模型的输出进行比较和对齐,以最小化它们之间的差异,从而学习到教师模型的知识。
image.png

模型、理论和方法

DINO框架

image.png
DINO本质上是一种自监督学习方法,其核心思想是通过在大规模的无标签数据集上进行对比学习,期待学习到更好的视觉通用表征。该方法采用自蒸馏的方式,即将一个student和teacher的输出进行比较,以学习出更好的表示。

主要特点

  • 整个框架包含teacher和student模型,并且两者的网络结构相同,但参数 θ t \theta_t θt θ s \theta_s θs不同;
  • 对于输入图像,生成一系列不同视角的patchs,其中包含两个全局视图 x 1 g x_1^g x1g x 2 g x_2^g x2g,以及一些局部视角的crops。所有的crops都是会输入到student模型中,而只有全局视角的crops会送入到teacher中;
  • teacher和student模型的输出会使用softmax函数进行归一化,公式如下,得到 K K K维度的概率分布,分别用 P t P_t Pt P s P_s Ps表示;

P ( x ) ( i ) = e x p ( g θ ( x ) / τ ) ∑ k = 1 K e x p ( g θ ( x ) ( k ) / τ P(x)^{(i)} = \frac{exp(g\theta(x)/\tau)}{\sum_{k=1}^K exp(g\theta(x)^{(k)}/\tau} P(x)(i)=k=1Kexp(gθ(x)(k)/τexp(gθ(x)/τ)

  • student训练,更新参数,通过SGD优化函数来最小目标,损失函数公式如下:

m i n H ( P t ( x ) , P s ( x ) ) minH(P_t(x), P_s(x)) minH(Pt(x),Ps(x))

对比学习

teacher和student的网络结构相同,采用知识蒸馏的方式来使得student的输出拟合teacher的输出,但是没有真实标签,两者之间是如何进行对比学习?主要采用的是如下集中方式。

multi-crop learning

DINO中会对输入图像进行不同尺度的裁剪采样,这个也是自监督学习领域应用非常广泛的策略,裁剪后的图像可以分为两种:

  • local views:局部视角,也称为small crops,指的是crop图像的面积小于原图的50%;
  • global views:全局视角,也成为global crops,指的是crop图像的面积大于原图的50%;

在DINO中,student模型接收的是所有的crops图,而teacher模型接收的只是global views的裁剪图。通过这种方式,监督student模型学习到从局部到全局的响应
此外,为了增强网络的鲁棒性,采用了其他的数据增强手段,如:颜色扰动、高斯模糊和曝光增强。

momentum teacher

teacher模型的权重参数更新不是基于反向传播更新的,而是通过指数移动平均法,将student模型学习到的权重参数更新给teacher。teacher模型权重的更新公式如下:
θ t ← λ θ t + ( 1 − λ ) θ s \theta_t \leftarrow \lambda\theta_t + (1-\lambda)\theta_s θtλθt+(1λ)θs
其中, θ t \theta_t θt θ s \theta_s θs分别表示teacher和student模型的参数,而 λ \lambda λ在训练过程中采用余弦学习率衰减策略从0.996变化为1。

centering and sharpening

在DINO中,采用centering和shapening来防止model collapse模型坍塌。在自监督学习中,模型坍塌指的是网络学习过程中出现了多样性减少的现象。具体而言,当模型把多个输入数据映射到相同的特征表示时,只考虑了一部分数据的表示,而忽略了其他数据样本的特征,从而导致多样性缺失,对模型的鲁棒性会产生很大的负面影响。
DINO使用centering来避免一部分特征占据主导地位,具体是通过添加一个偏差项 c c c到teacher模型中,表示如下:
g t ( x ) ← g t ( x ) + c g_t(x) \leftarrow g_t(x) + c gt(x)gt(x)+c
其中 c c c的更新策略采用的指数移动平均法,可以减少batch size对训练效果的影响,公式如下:
c ← m c + ( 1 − m ) 1 B ∑ i = 1 B g θ t ( x i ) c \leftarrow mc + (1-m)\frac{1}{B}\sum_{i=1}^Bg\theta_{t}(x_i) cmc+(1m)B1i=1Bgθt(xi)
其中, m > 0 m>0 m>0是一个比例项, B B B表示batch size。
sharpening操作是通过在softmax函数中加入一个temperature参数,来强制让模型将概率分布跟价锐化。使得小的差异会引起较大的变化,搭配centering使用,可以使得激活值不断变化。

实验与结论

训练细节

  • 训练集:不包含标签的ImageNet数据集
  • 优化函数:Adamw optimizer
  • Batch size: 1024
  • 学习率在最初的10epochs相对于base值呈线性增长,按照如下规则: lr=0.0005 * batchsize / 256,在warmup之后,使用余弦策略衰减学习率
  • 权重衰减也是按照余弦衰减策略从0.04到0.4
  • 在最开始的30epochs,温度系数设置为0.1,使用linear warm-up从0.04到0.07
  • 使用BYOL数据增强:color jittering、Gaussian blur和solarization,multi-crop使用bicubic interpolation适应position embedding

对比实验

实验的评价方式有两种:linear 和k-NN 评估,其中linear评估指的是冻结预训练模型的权重,仅训练linear层;k-NN分类评估先使用预训练模型计算和保存数据集的特征,然后使用k-NN基于提取的特征对输入图像进行分类。

相同模型下比较

image.png
以ResNet-50为基础模型,在相同设置下,DINO的效果都是最优的。在ViT框架下,DINO相对于BYOL,MoCov2和SwAV在linear和k-NN分类上分别至少提升了3.5%和7.9%。

不同框架比较

image.png
ViT-B/8,指的是ViT-Base模型patch size为8×8,其linear分类取得80.1%的Top-1,77.4%的k-NN分类,相较于之前的方法参数量减少了至少10倍,运行速度提升了1.4倍。

消融实验

不同模块的影响

image.png
上图展示了通过添加不同模块到DINO结果的变化,同时也比较了这些模块在BYOL、MoCov2和SwAV上的影响。可以看到最好的组合是momentum encoder、multicrop augmentation和交叉熵损失函数。

Patch size的影响

image.png
上图研究了ViT在不同patch size下模型性能的变化,可以看到patch size越小,性能越好,虽然参数量没有变换,但是推理速度变慢了。当使用5×5的patch size时,速率为44im/s,而8×8为180im/s。

不同teacher模型的影响

image.png
上图左边比较了student和teacher模型在训练过程中k-NN分类性能,可以看到teacher的效果要好于student。右边为teacher模型的不同参数更新策略,可以看到momentum的方式是最优的。

训练时batch size的影响

image.png
上图研究了训练阶段不同batch size的影响,表明即使使用小的batch size也可以取得很好的效果。

思考

本文提出了一种自监督学习方法,DINO,展示了采用自监督学习结合ViT也可以取得和精心设计的卷积神经网络类型的效果。但是DINO具有如下两个重要的特点:

  • 采用的是无标签的数据进行训练;
  • 学习了更高阶层的通用特征,可以直接用于非监督语义分割;

相关文章:

自监督DINO论文笔记

论文名称:Emerging Properties in Self-Supervised Vision Transformers 发表时间:CVPR2021 作者及组织: Facebook AI Research GitHub:https://github.com/facebookresearch/dino/tree/main 问题与贡献 作者认为self-supervise…...

计算机视觉: 基于隐式BRDF自编码器的文生三维技术

论文链接: MATLABER: Material-Aware Text-to-3D via LAtent BRDF auto-EncodeR 背景 得益扩散模型和大量的text - image 成对的图片, 现在文生2D的模型已经比较成熟的框架和模型,主流的技术比如说stable diffusion 和 midjourney 以及工业领域runway 等…...

分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测

分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-BiLST…...

Java队列相关面试题

ArrayBlockingQueue 1、ArrayBlockingQueue是什么?它与LinkedList和LinkedBlockingQueue有何区别? ArrayBlockingQueue是一个基于数组的有界阻塞队列,可以在队列的两端进行插入和删除操作。 与LinkedList不同,ArrayBlockingQueu…...

水库大坝除险加固安全监测系统解决方案

一、系统背景 为贯彻落实《办公厅关于切实加强水库除险加固和运行管护工作的通知》(〔2021〕8号)要求,完成“十四五”小型病险水库除险加固、雨水情测报和大坝安全监测设施建设任务,规范项目管理,消除安全隐患&#xf…...

android native C++编程实现数据库加密sqlcipher

sqlcipher是sqlite的加版本,分为免费版和收费版。 这里研究的是开源的免费版 https://github.com/sqlcipher/sqlcipher Android码源默认提供了sqlite的native,jni和java版本,但没有提供sqlcipher,开发用到需要自己添加。 sqlc…...

第五节 C++ 循环结构(算法)

文章目录 前言介绍1. for 语句1.1 语法结构1.2 语法流程的执行过程1.2.1 案例 1:循环的正序输入和倒序输入1.2.2 案例2 : 求1~n的平方数1.2.3 案例 3: 求输入a和b,求a~b区间数. 1.3 for 循环案例练习1.3.1 求最大值与最小值1.3.2 计算奇数和和偶数和1.3.3 计算平均气温与最高气…...

接口与抽象类的区别

a、抽象类不能被实例化只能被继承;b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;d、一个子类继承一个抽象类,则子类…...

短视频账号矩阵系统源码saas===独立部署

前言: 短视频账号矩阵是指在不同的短视频平台上,一个个人或企业所拥有的账号数量和分布情况。由于不同的短视频平台受众人群和内容类型等因素不同,因此拥有更多账号可以在更广泛的受众中传播内容,提高曝光度和流量。短视频账号矩阵…...

香港专用服务器拥有良好的国际网络连接

香港服务器在多个领域有着广泛的应用。无论是电子商务、金融交易、游戏娱乐还是社交媒体等,香港服务器都能够提供高效稳定的服务。对于跨境电商来说,搭建香港服务器可以更好地满足亚洲用户的购物需求;对于金融机构来说,香港服务器…...

IP/SIP网络有源吸顶喇叭 20W扬声器 可供POE供电

IP/SIP网络有源吸顶喇叭 20W扬声器 可供POE供电 深圳锐科达SV-7043VP 20W网络有源吸顶喇叭。该设备配备了10/100M以太网接口,内置了高品质扬声器,通过内置的功放和喇叭输出,可提供高达20W的音效功率。SV-7043VP作为SIP系统的播放终端&#…...

基于Keil a51汇编 —— 程序模板文件以及规则

程序模板文件 下面的代码模板包含有关如何编写自己的程序集模块的指南和提示。此模板文件模板。A51 在文件夹 \C51\ASM 中提供。 $NOMOD51 ; 禁用预定义的 8051 寄存器 #include <reg52.h> // 包含头文件; ;根据需要更改小写名称。 ;该汇编模板让你…...

案例研究 | 玉湖冷链基于JumpServer实现管理安全一体化

玉湖冷链&#xff08;中国&#xff09;有限公司&#xff08;以下简称为玉湖冷链&#xff09;是玉湖集团旗下的冷链食品供应链企业。依托自有的国际高标数智化冷链园区产业集群&#xff0c;玉湖冷链提供一站式国内外代采、仓干配物流解决方案、全链路创新金融支持、高品质生活办…...

JavaEE初阶学习:HTTP协议和Tomcat

1. HTTP协议 HTTP协议是一个非常广泛的应用层协议~~ 应用层协议 —> TCP IP 协议栈 应用层 —> 关注数据怎么使用~ 传输层 —> 关注的是整个传输的起点和终点 网络层 —> 地址管理 路由选择 数据链路层 —> 相邻节点之间的数据转发 物理层 —> 基础设置,硬…...

ASEMI整流桥GBU810参数,GBU810封装

编辑-Z GBU810参数描述&#xff1a; 型号&#xff1a;GBU810 最大直流反向电压VR&#xff1a;1000V 最大工作峰值反向电压VRWM&#xff1a;700V 最大平均正向电流IF&#xff1a;8A 非重复正向浪涌电流IFSM&#xff1a;200A 操作和储存温度范围TJ ,TSTG&#xff1a;-55 t…...

docker应用记录总结

一、前言 docker这类部署工具&#xff0c;久而久之不使用非常容易忘记&#xff0c;甚至连操作命令都容易忘记。网上也有比较全的docker使用教程。这里做一个记录总结&#xff0c;纯属是温故知新。 二、docker部署应用 1、docker印象 docker首先让我想到的是是虚拟化技术&…...

Jenkins 添加节点Node报错JNI error has occurred UnsupportedClassVersionError

节点日志 报错信息如下 Error: A JNI error has occurred, please check your installation and try again Exception in thread “main” java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime…...

swift ui 布局 ——Stack(HStack、VStack、ZStack)

一、HStack 水平布局 将其子视图排列在水平线上 import Foundation import SwiftUI struct MyView: View {var body: some View {HStack{Text("text")Image("yuyin").resizable().frame(width: 102,height: 80)}} } 默认子视图是水平中心对齐的,可添加al…...

淘宝天猫商品评论数据接口,淘宝天猫商品评论API接口,淘宝API

淘宝商品评论数据接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL&#xff0c;可以向淘宝服务器发起HTTP请求&#xff0c;获取商品评论数据。接口返回的数据一般为JSON格式&#xff0c;包含了商品的各种评价信息。获取到商品评论数据后&#xff0c;可以对其进行处理…...

C# Onnx GFPGAN GPEN-BFR 人像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace 图像修复 {public partial class Form1 : For…...

ubuntu安装依赖包时显示需要先安装其所需要的各种安装包)apt-get源有问题

最近在崭新的ubuntu上安装g以及一些其他的依赖与工具时遇到以下报错情况&#xff1a; 依赖环环相扣&#xff0c;手动无法解决。 总结&#xff1a; 出现需要很多依赖项的情况是因为软件源中没有可用的依赖项或者依赖项版本不正确。 其实在Ubuntu系统中&#xff0c;使用sudo…...

C/C++之自定义类型(结构体,位段,联合体,枚举)详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 个人主页&#xff1a;点我进入主页 …...

HBase 表如何按照某表字段排序后顺序存储的方法?

首先需要明白HBase表的排序规则&#xff1a; &#xff08;1&#xff09;rowkey排序&#xff08;字典排序&#xff09;——升序 &#xff08;2&#xff09;Column排序&#xff08;字典排序&#xff09;——升序 &#xff08;3&#xff09;时间戳排序——降序 rowkey 字典序排序…...

webrtc用clang编译支持h264,支持msvc调用库

webrtc遇到困扰&#xff1a; 如果msvc编译&#xff0c;ffmpeg编译失败&#xff0c;需要替换ffmpeg库。如果用clang编译&#xff0c;vs或qt调用dll又存在崩溃。 经过反复尝试找到解决方法&#xff1a; 一、编译 1、编译参数 //我得环境配置 set DEPOT_TOOLS_UPDATE0 set DEP…...

迁移学习是什么?

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习方法&#xff0c;它的主要思想是将已经在一个任务上学到的知识迁移到另一个相关或不相关的任务上&#xff0c;以提高目标任务的性能。迁移学习的核心概念是&#xff0c;模型可以通过先前学到的知识来更好地解决…...

哈希的应用--位图和布隆过滤器

哈希的应用--位图和布隆过滤器 位图1. 位图概念2. 位图在实际中的应用3. 位图相似应用给定100亿个整数&#xff0c;如何找到只出现一次的整数&#xff1f;1个文件100亿int&#xff0c;1G内存&#xff0c;如何找到不超过2次的所有整数 布隆过滤器1. 布隆过滤器的提出2. 布隆过滤…...

mac M2芯片在使用Android studio 编译问题bad cpu type in executable android

由于mac的intel芯片的一些指令集没有同步在M1 M2芯片上所以需要做兼容 打开控制台&#xff08;通过访达 - 应用程序 - 实用工具 - 终端 &#xff09; 输入 softwareupdate --install-rosetta 之后在输入 A 就可以了。 原产考地址&#xff1a;硬核&#xff01;在 M1 芯…...

M4Singer ubuntu 22.04 4060ti16g ModuleNotFoundError: No module named ‘gradio‘

故障 Traceback (most recent call last): File "inference/m4singer/gradio/infer.py", line 4, in <module> import gradio as gr ModuleNotFoundError: No module named gradio 解决 (venv3712) (base) yeqiangyeqiang-Default-string:~/Downloa…...

postman 密码rsa加密登录-2加密密码

上一篇讲了获取公钥&#xff0c;将环境准备好之后&#xff0c;在登录接口的Pre-request Scrip 里&#xff0c;使用公钥进行加密后在正常登录。本文采用的方案是使用第三方模块forge.js来实现加密。 1、环境准备好&#xff0c;系统git 和node都OK。下载forge.js git clone htt…...

如何去图片水印?这些方法解决你的问题

当我们希望更新自己的头像时&#xff0c;经常会发现网上有许多精彩的图片&#xff0c;但它们通常带有水印&#xff0c;使我们无法轻松使用这些照片。这个情况大家应该都有遇到过吧&#xff1f;那么&#xff0c;如何去除图片上的水印呢&#xff1f;接下来&#xff0c;我们将分享…...