【论文笔记】BEIT:BERT PRE-TRAINING OF IMAGE TRANSFORMERS

news/2024/11/8 12:10:11/

GitHub

1.介绍

1.1 挑战

  1. 视觉转换器的输入单元,即图像补丁,没有预先存在的词汇。
  2. 预测遮罩面片的原始像素往往会在预训练短程依赖性和高频细节上浪费建模能力

1.2 回顾一下Bert的基本架构和流程

  1. 输入编码:通过tokenizer将输入的文本中的每个单词转换为固定维度的向量表示
  2. 输入Transformer 编码器:使用多层的 Transformer 编码器来捕捉输入文本的上下文信息。

1.3 重点把握

  • 怎么tokenize:通过DiscreteVAE(代码中使用的是Dalle_VAE)的潜在code获得的!
  • 怎么将图片打上掩码?随机屏蔽一定比例的图像补丁!
  • 网络学习的是什么?视觉标记!

2.方法

图一

2.1 图片表示

2.1.1 图片PATCH化

和vit基本相同,将每个224×224的图像分割成14×14的图像块网格

2.1.2 视觉token表示

将图像表示为“图像标记器”获得的离散标记序列,而不是原始像素。

使用离散变分自动编码器(dVAE)学习的图像标记器。视觉标记学习过程中有两个模块,即标记器和解码器。

  • 标记器:将图像像素x映射为离散标记z
  • 解码器:基于视觉标记z来重建输入图像x

由于潜在的视觉表征是离散的,因此模型训练是不可微的。

2.2 骨干网络:transformer

  • 为输入序列预先准备了一个特殊token[S](图一左下角)
  • 将标准可学习1D位置embeddings添加到补丁embeddings.
  • 编码器其实就是L层的transform
  • 最后一层的输出被用作图像块的编码表示

2.3 预训练BEIT

  • 给定一个输入图像x,我们将其拆分为N个图像块,并将其标记为N个视觉标记。我们随机屏蔽了大约40%的图像块。用可学习嵌入e[M]∈RD替换屏蔽的块。
  • mask的图像块被馈送到L层变换器。最终的隐藏向量被视为输入补丁的编码表示。
  • 使用softmax分类器来预测相应的视觉标记

预训练的目标是在给定损坏图像的情况下最大化正确视觉标记的对数似然性:

三.代码

核心代码如上图所示,输入的图片通过d_vae(代码中使用的是Dalle_VAE)来获得一个编码表示,通过一个Vit获得预测的图像块的编码表示

3.1 dataset

在上图中,一个batch得到三个输出:

samples, images, bool_masked_pos = batch

 数据集的构建只有短短四行

def build_beit_pretraining_dataset(args):transform = DataAugmentationForBEiT(args)print("Data Aug = %s" % str(transform))return ImageFolder(args.data_path, transform=transform)

DataAugmentationForBEiT前两个还好说,分别是vit和vae的数据处理,第三个是用来随机生成mask的。

3.2 视觉token表示

其实就是这个部分

        with torch.no_grad():input_ids = d_vae.get_codebook_indices(images).flatten(1)bool_masked_pos = bool_masked_pos.flatten(1).to(torch.bool)labels = input_ids[bool_masked_pos]

 通过DiscreteVAE(代码中使用的是Dalle_VAE)获得整张图片的code

codebook:这里的Codebook类似于一张表,一本词典,或者主成分分析里面的主成分向量。【参考深度量化学习中提到的codebook是什么意思?有点抽象但是我感觉意思和味道是对的】

【挖个小坑】VAE系列后面应该会读一读论文

3.3 图像变换器

其实就是加上了cls_token和mask_token的vit和一个线性层用来预测图像块的编码表示(code)

 


http://www.ppmy.cn/news/553415.html

相关文章

动手写一个 Java JWT Token 生成组件

OAuth2 中默认使用 Bearer Tokens (一般用 UUID 值)作为 token 的数据格式,但也支持升级使用 JSON Web Token(JWT) 来作为 token 的数据格式。实际来说,OAuth 规范中并无限制 Token 采取何种格式。今天我们就采用 JWT 来作为 Token,它的一个好…

Qt6.2教程——5.QT常用控件QLabel

1. QLabel简介 QLabel是Qt库中一个非常基础且重要的类。它主要用于在图形用户界面(GUI)中展示文本或图片。最常见的用法就是在窗口上显示一段文字或者标签,比如“用户名”,“密码”等等。QLabel继承自QFrame,因此它也可以具有框架。它能处理…

Unity Tag标签

物体设置tag标签,也可以理解为标记物体,用以区分物体,例如场景中的默认相机的标签默认为MainCamera,在脚本中我们可以通过Camera.main来获取场景中标签为MainCamera的相机。 除了默认的标签外,可以通过Add Tag添加自定…

【每日算法 数据结构(C++)】—— 02 | 数组的并交集(解题思路、流程图、代码片段)

文章目录 01 | 👑 题目描述02 | 🔋 解题思路交集并集 03 | 🧢 代码片段交集并集 When you feel like giving up, remember why you started. 当你想放弃时,请记住为什么你开始 01 | 👑 题目描述 给你两个数组&#xff…

label标签

1.<label>标签为input元素定义标注&#xff08;标签&#xff09; 2.<label>标签用于绑定一个表单元素&#xff0c;当点击<label>标签内的文本时&#xff0c;浏览器就会自动将焦点&#xff08;光标&#xff09;转到或者选择对应的表单元素上&#xff0c;用来…

HTML图片标签

前言 图片标签&#xff1a;标签定义 HTML 页面中的图像 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、图片标签 标签定义 HTML 页面中的图像 1.图片基本标签 img &#xff1a;没有结束标签 必须有属性src src&#xff1a; 指向图片地址 可以是网…

浅谈标签概念及应用场景

标签 一、标签的定义二、标签的分类三、标签的应用场景四、搭建标签步骤 我们经常听到在现在的电商中有千人千面、能通过画像精准推送等应用场景&#xff0c;这些都是大数据智能应用的一部分&#xff0c;其使用的基本都是依靠标签来实现的&#xff0c;那么什么是标签、如何打标…

h5新增标签

一、新增的语义化布局标签&#xff1a; 1. header和footer标签&#xff1a;页面中一个内容区块的头部和尾部布局&#xff1b; 2. nav&#xff1a;导航区域&#xff1b; 3. article标签&#xff1a;页面中独立的内容部分布局&#xff1b; 4. aside标签&#xff1a;在独立内容…