【自监督学习】iBOT in ICLR 2022

news2024/12/24 8:59:16

一、引言

论文: iBOT🤖: Image BERT Pre-Training with Online Tokenizer
作者: ByteDance
代码: iBOT
注意: 该方法是在另一个自监督预训练方法基础上的改进,学习之前建议掌握DINO。
特点: 对于一张图片,该方法首先进行两次全局裁剪与增强得到两张全局视图,之后进行随机mask再产生两张带mask的全局视图,并分别送入教师和学生网络;学生与教师网络均有两个映射头,一个用于映射 [ CLS ] [\text{CLS}] [CLS],另一个用于映射特征图,之后以两个网络的输出一致性为损失进行学生网络的更新;教师网络由指数移动平均更新,还采用了中心化和锐化操作避免模式崩溃。

二、详情

  1. 对于一张图片,进行2次全局裁剪(面积占比在 [ 0.14 , 1 ] [0.14,1] [0.14,1],resize为224),之后对2个切片进行随机增强(翻转、色彩变化、高斯模糊、归一化等)得到2个正常的全局视图;接着按照16*16的patch分配14*14的mask,mask为1表示被遮掩,为1的概率为0.3,被遮掩的patch被设置为全0,于是又得到2个带mask的全局视图。
  2. 2个正常的全局视图送入教师网络,另外两个带mask的全局视图送入学生网络。教师网络和学生网络的结构相同初始参数也相同,可以是ViT、Swin Transformer等等。教师网络和学生网络都有两个映射头,最后输出维度相同都是8192,学生网络的两个头不共享参数,教师网络的两个头共享参数。一个映射头用于映射 [ CLS ] [\textbf{CLS}] [CLS],输出2*8192,另一个映射头用于映射图像特征,输出2*196*8192。
  3. 教师网络的 [ CLS ] [\text{CLS}] [CLS]输出先减去center1(初始全0)再除以temp1=0.04之后求softmax;教师网络的图像特征输出先减去center2(初始全0)再除以temp2(前30个epoch等间隔在0.04-0.07取值,后70个epoch全为0.07)之后求softmax。学生网络的输出均先除以temp=0.1,然后求softmax再取log;最后,教师与学生网络的 [ CLS ] [\text{CLS}] [CLS]输出之间计算损失,图像特征输出之间计算损失(其实就是在标准的交叉熵损失 − p t log ⁡ p s -p_t\log p_s ptlogps中对教师网络输出引入了锐化和中心化,对学生网络输出引入了锐化)。

除以temp的操作称为锐化(sharping),减去中心的操作称为中心化(centering),两个操作叠加是为了避免模式崩溃(无论哪个图像网络输出softmax后始终是某一项很大或始终接近均匀分布)。锐化能放大分布中某一个值减小其他值,中心化能促使分布更接近均匀分布,两个相反的操作相互作用使得模式崩溃得以避免。
⚠️ 图像特征输出mask=0的部分不计算损失,也就是说该项损失是希望学生网络能够借助教师网络的指导通过非mask部分预测出被mask的部分。 [ CLS ] [\text{CLS}] [CLS]对应的损失则是希望网络能够捕捉图像中的高层语义信息。

  1. 之后更新中心center1center2,两个center均用下式更新:

center = center_momentum * center + (1 - center_momentum) * batch_center
其中,center_momentum=0.9,batch_center是当前批次所有全局视图经教师网络输出的均值( [ CLS ] [\text{CLS}] [CLS]输出的均值更新center1,图像特征输出的均值更新center2)。
其实这个操作就是指数移动平均,一般公式为 b = λ b + ( 1 − λ ) a b=\lambda b+(1-\lambda)a b=λb+(1λ)a,简单来说就是用另外一个参数更新自己,但是保留自己的一部分。

  1. 根据3中的损失更新学生网络,教师网络不用损失更新,而是用指数移动平均更新,见下式:

θ t = λ θ t + ( 1 − λ ) θ s \theta_{t}=\lambda\theta_{t}+(1-\lambda)\theta_{s} θt=λθt+(1λ)θs
其中, λ \lambda λ在训练时是遵循cosine schedule,从0.996到1变化。即用学生网络更新教师网络,但保留教师网络的一部分。
⚠️ 因教师网络的 [ CLS ] [\text{CLS}] [CLS]和图像特征共用映射头,所以只需要用上式更新 [ CLS ] [\text{CLS}] [CLS]对应的映射头。

伪代码如下:

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

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

相关文章

数据结构之初始二叉树(1)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 树型结构 树的概念 与树的有关概念 树的表示形式 树的应用 二叉树 概念 两种特殊的…

MFC流的形式读取图片

1.基于对话框布置控件 2.给控件绑定变量 3.给按钮控件添加响应函数 void CMFC流的形式读取图片Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码//HDC mECGDC; // 设备描述表句柄//CPen mECGDrawPen; // ECG波形画笔//RECT mECGRect; // 在该矩形区域内画…

Three.js相机简明教程

相机校准是 3D 计算机图形学中的一个基本概念,涉及设置虚拟相机以模拟真实世界相机的视角和行为。在 Three.js(一种流行的 3D 渲染 JavaScript 库)中,了解相机校准对于创建逼真且身临其境的 3D 场景至关重要。在本文中&#xff0c…

AIGC是什么,与AI绘画有什么关系,一篇文章带你了解AI绘画的前世今生

在讲解AIGC和AI绘画之前,我们先看看什么是AI以及AI的历史。 AI历史发展轨迹 什么是人工智能 人工智能(Artificial intelligence,简称AI)亦称机器智能,指由人制造出来的机器所表现出来的智能。通常人工智能是指用普通计算机程序来呈现人类智…

ConfigMap-secrets-静态pod

一.ConfigMap 1.概述 ConfigMap资源,简称CM资源,它生成的键值对数据,存储在ETCD数据库中 应用场景:主要是对应用程序的配置 pod通过env变量引入ConfigMap,或者通过数据卷挂载volume的方式引入ConfigMap资源 官方解释…

成为git砖家(1): author 和 committer 的区别

大家好,我是白鱼。一直对 git author 和 committer 不太了解, 今天通过 cherry-pick 的例子搞清楚了区别。 原理 例如我克隆了著名开源项目 spdlog 的源码, 根据某个历史 commit A 创建了分支, 然后 cherry-pick 了这个 commit …

240710_昇思学习打卡-Day22-条件随机场

240710_昇思学习打卡-Day22-条件随机场 在正式开始LSTMCRF序列标注之前,我们先来了解一下条件随机场,以下仅做简单介绍。 CRF全称Conditional Random Field,按照名字来理解,条件随机,随机输入,条件输出。…

vue中父子传递属性值

1、父传子属性值 自定义图库组件 在add.vue中应用tuku组件并给默认值 效果 2、 子传父,逆向赋值 add.vue和第一问中一样 修改tuku组件,传值给add.vue 3、多个传递 效果: 点击两个修改按钮后 4、使用defineModel简化父子传值 其他代码跟…

使用Tkinter库设计实现的中小学校疫情防控入校人员登记检测系统

Tkinter简介 Tkinter是Python标准库中用于GUI图形用户界面开发的工具包,它是基于Tcl/Tk的封装,提供了大量预定义的控件,如按钮、文本框、标签等,非常适合快速原型开发和小型应用的构建。本文将通过一个具体的案例——“中小学校疫…

【java】力扣 合并k个升序链表

文章目录 题目链接题目描述思路代码 题目链接 23.合并k个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表 思路 我在这个题里面用到了PriorityQueue(优先队列) 的知识 Prio…

鸿蒙语言基础类库:【@system.app (应用上下文)】

应用上下文 说明: 从API Version 7 开始,该接口不再维护,推荐使用新接口。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import app from system.app;app.getInfo …

MFC之对话框--重绘元文件

文章目录 实现示例展示需要绘制的窗口/位置控件位置更新下一次示例粗细滑动部分更新 重绘元文件(窗口变化内容消失)方法一:使用元文件方法二:兼容设备方法三:使用自定义类存储绘图数据除画笔外功能处理画笔功能处理 保…

【雷达原理】MIMO雷达技术

一、MIMO雷达原理 1.1 基本概念 多输入多输出(Multiple input multiple output,MIMO)雷达指该雷达具有多个发射天线和多个接收天线。 学术界对 MIMO 雷达的定义中,多输入是指同时发射多种雷达信号波形( 一般是多个天线同时发射不同的波形) ,…

藏着不为人知的泪水

在娱乐圈的璀璨舞台上,每一个光芒四射的背后,藏着不为人知的汗水与泪水。提及#张艺凡 出道位#,这段历程,不仅仅是个人奋斗的见证,更是关于勇气、坚持与自我证明的壮丽篇章。曾几何时,网络的喧嚣声中&#x…

【信息系统项目管理师】高项常见知识点与公式

绩效域、合同、配置、变更、招投标、安全、立项论文考到的话大致业是按下面相关知识点开写 八大绩效域及其要点 团干部策划开公交 合同管理 合同的签订->合同的履行管理->合同的变更管理->合同的档案管理->合同的违约\索赔管理 配置管理 制定配置管理计划配置识…

欧几里得算法求解若干数的最小公倍数

公倍数 公倍数(common multiple)是指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。公倍数中最小的数,就称为这些整数的最小公倍数(lowest common multiple) 求解方法 求多个数的最小公…

c++ new 与二级指针

new 与数组的简单用法&#xff0c;一个简单的例子&#xff1a; #include <stdio.h> #include <stdlib.h>#define MAX_ARRAY_NUM 10int main() {int *p new int[MAX_ARRAY_NUM];for(int i 0; i < MAX_ARRAY_NUM; i){p[i] i 10;}for(int i 0; i < MAX_AR…

MAVSDK动态库与静态库及mavsdk_server程序macOS平台编译与安装

1.克隆mavsdk: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译静态库 cmake -Bbuild/default -H. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF 生成makefile 生成成功,开始编译 cmake --build build/default -j8 成功生成libmavsdk.a 开…

BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能

概述 在应用DC-DC开关电源芯片时&#xff0c;通常需要关注以下参数&#xff0c;同步与非同步&#xff0c;输入电压&#xff0c;输入电流&#xff0c;输出电压&#xff0c;输出电流&#xff0c;输入输出电容的选择&#xff1b;mosfet选型&#xff0c;电感选型&#xff0c;功耗&a…

python作业三

1.使用requests模块获取这个json文件http://java-api.super-yx.com/html/hello.json 2.将获取到的json转为dict 3.将dict保存为hello.json文件 4.用io流写一个copy(src,dst)函数,复制hello.json到C:\hello.json import json import shutilimport requests #使用requests模块获…