【论文笔记】BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers

1.介绍

1.1  核心观点

当时的所有的重建目标都是关于低级图像元素的,低估了高级语义。

【Q】怎么去定义高级和低级语义

1.2 基本流程

VQ-KD编码器首先根据可学习码本将输入图像转换为离散令牌

然后,解码器学习重建由教师模型编码的语义特征,以离散令牌为条件

在训练VQ-KD之后,其编码器被用作BEIT预训练的语义视觉标记器,其中离散代码用作监督信号。

1.3 核心贡献

•我们提出了矢量量化的知识提取(vector-quantized knowledge distillation),将掩蔽图像建模从像素级提升到语义级,用于自监督表示学习。

•我们引入了一种补丁聚合策略,该策略在给定离散语义令牌的情况下强制执行全局结构,并提高了学习表示的性能。

扫描二维码关注公众号,回复: 16893957 查看本文章

2. 方法

该框架使用视觉标记器将每个图像转换为一组离散的视觉标记。训练目标是恢复掩蔽的视觉标记,每个视觉标记对应于一个图像补丁。

【Q】使用VQ-KD编码器有什么好处?

 2.1 训练视觉分词器(Visual Tokenizer)

2.1.1 视觉分词器

分词器由Vit编码器和量化器组成。

2.1.2 训练视觉分词器的基本流程

  1. 标记器首先将输入图像编码为矢量。
  2. 矢量量化器在码本中查找每个补丁表示hi的最近邻居。
  3. 量化视觉标记送入解码器
  4. 最大化解码器输出o_i和教师指导t_i之间的余弦相似性。

2.1.3 量化过程

设{v1,v2,··,vK}表示码本嵌入。

这个公式表示了查找每个补丁h_i在codebook中的最近邻居。

由于量化过程是不可微分的,所以梯度被直接从解码器输入复制到编码器输出(下图)

2.1.4 视觉分词器的训练目标

最大化解码器输出o_i和教师指导t_i之间的余弦相似性。

 2.1.5 提高码本利用率

为了缓解码本崩溃(codebook collapse,即只使用了一小部分code)。

  • 在被送入解码器之前被映射回高维空间,因为量化过程会将码本嵌入空间的维数减少到32-d
  • 使用指数移动平均用于更新码本嵌入

2.2 预训练BEIT v2

  • 输入准备了一个可学习的[CLS]token,最后的编码向量中的h0表示[CLS]令牌。
  • 使用全连接层作为MIM头和softmax分类器预测掩蔽位置的视觉标记p(z_i|h_i) = softmax_{z_i}(W_ch_i + b_c),其中Wc、bc分别表示MIM头的权重和偏置。
  • MIM的训练损失定义为

                 D表示预训练图像,M表示掩蔽位置

2.2.1 预训练全局表示

  • 预训练了用于全局图像表示的[CLS]令牌,为了减轻补丁级预训练和图像级表示聚合之间的差异
  • 为了预训练最后一层的[CLS]标记h^L_{CLS},将最后一层的[CLS]标记h^L_{CLS}与中间第l层的补丁向量连接,送入解码器中并再次进行掩蔽预测。
  • 该令牌在预训练后被丢弃

3.代码

3.1 训练Vector-Quantized Visual Tokenizers

 3.1.1 编码器

编码器部分 = base-vit + FFN降维 + NormEMAVectorQuantizer(量化器)

将作为encoder的vit得到的feature降维到32

 3.1.2 解码器

编码器部分 = 一层的vit + FFN 

 3.1.3 损失

损失由两部分构成:①量化器得到的损失 ②余弦相似损失

【todo】量化器!!!!

3.2 预训练 beit V2

基本上和beit相近

代码中有两种vit:一种就是普通的vit,这个老生常谈就不说了,另一种就是论文中增加了cls的VisionTransformerForMaskedImageModelingCLS。(如下图)

3.2.1 补丁聚合

 正如论文,

较浅的头部(即1/2层)比较深的头部(如3层)表现更好,这表明较浅的头比较深头部更关注输入[CLS]令牌。

取用了第6层(总共12层)的patch和最后一层的cls送入两层的一个vit结构中,作为全局聚合

 全局聚合部分只取cls

 损失函数最后就由两部分组成:①MIM损失②全局cls损失 

猜你喜欢

转载自blog.csdn.net/weixin_50862344/article/details/131262830