【论文精读】BEiT

摘要

  • 提出一种掩码图像建模任务,以自监督方式预训练视觉transformer。
  • 对BEIT进行了预训练,并对下游任务进行微调实验,如图像分类和语义分割。
  • 发现自监督BEIT的自注意力机制可以学会区分语义区域和对象边界。

框架

image
       给定输入图像 x x x,BEiT将其编码为上下文向量表示。如上图,BEiT通过自监督学习掩码图像建模 (MIM) 任务进行预训练,恢复编码向量的masked image patches。对于下游任务 (如图像分类和语义分割),在经预训练的BEiT上添加任务层,并对特定数据集上的参数进行有监督微调。

图像表示

       本方法中,图像有两种表示视图,即images patches和visual tokens。两者分别在预训练任务中作为输入和输出表示。

Images patch

       输入图像 x x x被splited为一个序列的patches,适应标准Transformer的输入格式。具体,先将图像 x ∈ R H × W × C x∈R^{H×W×C } xRH×W×Creshape为 N = H W / P 2 N=HW/P^2 N=HW/P2个patches为 x p ∈ R N × ( P 2 C ) x^p∈R^{N×(P^2C)} xpRN×(P2C),其中 C C C为通道数, ( H , W ) (H,W) (H,W)为输入图像分辨率, ( P , P ) (P,P) (P,P)为每个patch的分辨率。然后images patches { x i p } i = 1 N { \{x^p_i\} }^N_{i=1} {xip}i=1N被flattened为向量并经过线性投影层得到Patch Embedding,作为BEiT输入特征。

       实验中 P = 16 P=16 P=16,每幅 224×224 图像被splited成 14 × 14 14×14 14×14的images patches grid ( N = 14 × 14 ) (N=14×14) (N=14×14),每个grid表示的patch尺寸为 16 × 16 16×16 16×16

Visual token

       类似于自然语言处理,图像被表示为由image tokenizer获得的离散token序列。具体,采取离散变分自编码器(dVAE)学习到的图像tokenizer,将图像 x ∈ R H × W × C x∈R^{H×W×C } xRH×W×Ctokenized为 z = [ z 1 , . . . , z N ] ∈ ν h × w z=[z_1,...,z_N]∈ν^{h×w} z=[z1,...,zN]νh×w,其中词表 (vocabulary) ν = { 1 , . . . , ∣ ν ∣ } ν={\{1,...,|ν|\}} ν={1,...,ν}包含离散的token索引。

       如dVAE,在visual token的学习过程中,有tokenizer和decoder两个模块。tokenizer q ϕ ( z ∣ x ) q_ϕ(z|x) qϕ(zx)将图像像素 x x x映射为离散tokens z z z。decoder p ψ ( x ∣ z ) p_ψ(x|z) pψ(xz)学习基于visual token z z z重建输入图像 x x x。重建的优化目标写成 E z ∼ q ϕ ( z ∣ x ) [ l o g p ψ ( x ∣ z ) ] E_{z∼q_ϕ(z|x)}[logp_ψ(x|z)] Ezqϕ(zx)[logpψ(xz)]。由于潜在的visual tokens是离散的,模型不可微。因此,采用Gumbel-softmax训练模型。在dVAE训练过程中, q ϕ q_ϕ qϕ会加uniform先验。

       实验中每幅图像被tokenized为 14 × 14 14×14 14×14的visual tokens grid,和images patches数相同。词表大小设置为 ∣ ν ∣ = 8192 |ν|=8192 ν=8192

主干网络:Transformer

       使用标准Transformer作为骨干网络。Transformer的输入是images patches序列 { x i p } i = 1 N { \{x^p_i\} }^N_{i=1} {xip}i=1N,images patcher经线性投影获得Patch Embedding E x i p Ex^p_i Exip,其中 E ∈ R ( P 2 C ) × D E ∈ R^{(P^2C)×D} ER(P2C)×D;然后,在输入序列前添加一个特殊标记 [ S ] [S] [S],在将标准的可学习1D position embedding E p o s ∈ R N × D E_{pos} ∈ R^{N×D} EposRN×D添加到Patch Embedding中,得到Transformer的输入向量 H 0 = [ e [ S ] , E x i p , . . . , E x N p ] + E p o s H_0 = [e_{[S]}, Ex^p_i , . . . , Ex^p_N ] + E_{pos} H0=[e[S],Exip,...,ExNp]+Epos

       编码器包含 L L L层的Transformer blocks H l = T r a n s f o r m e r ( H l − 1 ) , l = 1 , . . . , L H^l =Transformer(H^{l−1}),l = 1, . . . , L Hl=Transformer(Hl1),l=1,...,L。最后一层的输出向量 H L = [ h [ S ] L , h 1 L , . . . , h N L ] H^L = [h^L_{[S]}, h^L_1, . . . , h^L_ N ] HL=[h[S]L,h1L,...,hNL]即为经编码的images patches(共N+1 个向量),其中 h i L h^L_ i hiL是第 i i i个图像块的images patcher向量。

预训练 BEiT:掩码图像建模

       结合上述,进行整体建模。给定一个输入图像 x x x,将其split为 N个images patches ( { x i p } i = 1 N ) ({\{x^p_i\}}^N_{i=1}) ({xip}i=1N),并 tokenized为N个visual tokens ( { z i } i = 1 N ) ({\{ z_i\}}^N_{i=1}) ({zi}i=1N)。然后随机mask 40%(掩码率为 0.4)的images patches,其中masked的位置表示为 M ∈ { 1 , . . . , N } 0.4 N M∈{ \{ 1,...,N \}}^{0.4N} M{1,...,N}0.4N,这些位置使用可学习的嵌入 e [ M ] ∈ R D e_{[ M ] }∈R^D e[M]RD来替换(用于训练)。

       被masked后的图像 x M = { x i p : i ∉ M } i = 1 N ⋃ { e [ M ] : i ∈ M } i = 1 N x^M={\{ x^p_i:i∉M \}}^N_{i=1}⋃{\{ e_{[M]}:i∈M \}}^N_{i=1} xM={xip:i/M}i=1N{e[M]:iM}i=1N将馈入 L L L层Transformer中,得到的最后隐层向量 { h i L } i = 1 N {\{h^L_i\}}^N_{i=1} {hiL}i=1N为输入patch的编码表示。对于每个mask位置的 { h i L : i ∈ M } i = 1 N {\{h^L_i:i∈M\}}^N_{i=1} {hiL:iM}i=1N,使用softmax分类器预测相应的visual tokens p M I M ( z ′ ∣ x M ) = s o f t m a x z ′ ( W c h i L + b c ) p_{MIM}(z^′|x^M)=softmax_{z′}(W_ch^L_i+b_c) pMIM(zxM)=softmaxz(WchiL+bc),其中 x M x^M xM是被masked的images patches, W c ∈ R ∣ ν ∣ × D W_c∈R^{|ν|×D} WcRν×D b c ∈ R ∣ ν ∣ b_c∈R^{|ν|} bcRν

       预训练的目标为最大化masked patches在图像中正确的visual tokens z i z_i zi的对数似然(log-likelihood)。
max ⁡ ∑ x ∈ D E M [ ∑ i ∈ M log ⁡ p M I M ( z i ∣ x M ) ] \max \sum_{x \in D}\mathbb{E}_M[\sum_{i \in M}\log p_{MIM}(z_i|x^M)] maxxDEM[iMlogpMIM(zixM)]

       其中,D为训练语料库,M为随机masked的位置, x M x^M xM为根据M来masked的已损坏图像。

       本算法掩码采用blockwise masking,而非随机选择patches进行mask。如下图所示,每次先计算出 s , r , a , t s,r, a,t s,r,a,t,在mask掉 i ∈ [ t , t + a ) , j ∈ [ l , l + b ) i\in[t,t+a),j\in[l,l+b) i[t,t+a),j[l,l+b)的部分。重复上述2个步骤,直到获得足够的masked patches。
image
       MIM主要受到MLM的启发,MLM是NLP中最成功的预训练目标之一。blockwise masking也被广泛应用于 BERT-like模型。然而,直接使用像素级自编码(即恢复 masked patches 的像素)进行视觉预训练,会促使模型聚焦于短程依赖和高频细节。BEiT通过预测离散visual tokens来克服上述问题,该tokens会将细节总结为高级抽象。

VAE分析

       BEiT预训练从理论上可视为变分自动编码器训练。设 x x x为原始图像, x ^ \hat x x^为masked图像, z z z为visual tokens。考虑VAE的对数似然 p ( x ∣ x ^ ) p(x|\hat x) p(xx^)的下界 (ELBO),带入解释即从其mask图像中恢复原始图像:
∑ ( x i , x ^ i ) ∈ D log ⁡ p ( x i ∣ x ^ i ) ≥ ∑ ( x i , x ^ i ) ∈ D ( E z i ∼ q ϕ ( z ∣ x i ) [ log ⁡ p ψ ( x i ∣ z i ) ] ⏟ V i s u a l T o k e n R e c o n s t r u c t i o n − D K L [ q ϕ ( z ∣ x i ) , p θ ( z ∣ x ^ i ) ] ) \sum_{(x_i,\hat x_i)\in D}\log p(x_i|\hat x_i)\ge \sum_{(x_i,\hat x_i)\in D}(\underbrace{\mathbb{E}_{z_i \sim q_{\phi}(z|x_i)}[\log p_{ψ}(x_i|z_i)]}_{Visual \ Token \ Reconstruction}-D_{KL}[q_{\phi}(z|x_i),p_{\theta}(z|\hat x_i)]) (xi,x^i)Dlogp(xix^i)(xi,x^i)D(Visual Token Reconstruction Eziqϕ(zxi)[logpψ(xizi)]DKL[qϕ(zxi),pθ(zx^i)])

       其中, q ϕ ( z ∣ x ) q_ϕ(z|x) qϕ(zx)表示图像tokenizer,即基于输入图像采用dVAE的Tokenizer获取visual tokens; p ψ ( x ∣ z ) p_ψ(x|z) pψ(xz)表示输入visual tokens解码原始图像,即通过dVAE的Decoder把visual tokens重建成reconstructed image; p θ ( z ∣ x ^ ) p_θ(z|\hat x) pθ(zx^)表示基于masked图像恢复visual tokens,此即BEIT的预训练任务。

       总结为两阶段过程学习模型:第一阶段,使用uniform作为先验最小化图像重建(Visual Token Reconstruction)损失。即保持 p θ p_θ pθ固定的情况下,学习 q ϕ q_ϕ qϕ p ψ p_ψ pψ。第二阶段,保持 q ϕ q_ϕ qϕ p ψ p_ψ pψ固定的情况下,学习先验 p θ p_θ pθ。若 q ϕ ( z ∣ x ) q_ϕ(z|x) qϕ(zx)已为最优,则 z ^ i = a r g m a x z q ϕ ( z ∣ x ) \hat z_i=argmax_zq_ϕ(z|x) z^i=argmaxzqϕ(zx),则上条公式可重写为:
∑ ( x i , x ^ i ) ∈ D ( E z i ∼ q ϕ ( z ∣ x i ) [ log ⁡ p ψ ( x i ∣ z i ) ] ⏟ S t a g e 1 : V i s u a l T o k e n R e c o n s t r u c t i o n + log ⁡ p θ ( z ^ i ∣ x ^ i ) ⏟ S t a g e 2 : M a s k e d I m a g e M o d e l i n g ) \sum_{(x_i,\hat x_i)\in D} \underbrace{(\mathbb{E}_{z_i \sim q_{\phi}(z|x_i)}[\log p_{ψ}(x_i|z_i)]}_{Stage \ 1:Visual \ Token \ Reconstruction}+ \underbrace{\log p_{\theta}(\hat z_i|\hat x_i)}_{Stage \ 2: Masked \ Image \ Modeling}) (xi,x^i)DStage 1:Visual Token Reconstruction (Eziqϕ(zxi)[logpψ(xizi)]+Stage 2:Masked Image Modeling logpθ(z^ix^i))
       Stage 2即为BEiT的预训练目标。

预训练设置

       BEIT的网络架构与ViT-Base相同。使用768隐层大小的12层Transformer,注意力头数为12。FFN的中间尺寸是3072,默认patch size尺寸为 16 × 16 16 × 16 16×16,采样已训练好的图像tokenizer。视觉token词表大小为8192。

       在ImageNet-1K数据集上自监督预训练BEIT,其中包含大约1.2M张图像。数据增强策略包括随机调整大小的裁剪,水平翻转,颜色抖动。输入图像尺寸为 224 × 224 224 × 224 224×224,输入被分割为 14 × 14 14 × 14 14×14的images patches和相同数量的visual token。随机掩码最多75个patch(总图像补丁的40%)。

       预训练运行大约500k step(即800 epoch),batchsize为2k。采用 β 1 = 0.9 β1 = 0.9 β1=0.9, β 2 = 0.999 β2 = 0.999 β2=0.999的Adam优化。学习率设置为1.5e-3,预热10 epochs余弦学习率衰减,权重衰减是0.05。采用 r a t e = 0.1 rate = 0.1 rate=0.1的stochastic depth(训练时每个batch随机dropout网络的一些layers,测试时用完整网络),禁用dropout。

       适当的初始化对稳定Transformer训练很重要。故在一个小范围内随机初始化所有参数,例如[−0.02, 0.02]。对于第 l l l层Transformer,用缩放率为 1 / 2 l 1/\sqrt{2l} 1/2l 重新缩放自注意力模块和FFN的输出矩阵。

下游视觉任务微调 BEiT

       预训练BEiT后,可以Transformer末尾追加一个任务层,用于微调下游任务。以图像分类和语义分割为例。

  • 图像分类:对于图像分类,直接使用一个简单的线性分类器作为任务层。具体地,类别概率计算为 s o f t m a x ( a v g ( { h i L } i = 1 N W c ) ) softmax(avg(\{{h^L_i}\}^N_{i=1}W_c)) softmax(avg({hiL}i=1NWc)),其中 h i L h^L_i hiL是第 i i i个images patcher的最终编码向量, W c ∈ R D × C W_c∈R^{D×C} WcRD×C是一个参数矩阵, C C C是类别数。通过有监督训练,对有标签数据进行最大似然估计。
  • 语义分割:对于语义分割,遵循SETRPUP中使用的任务层。具体地,使用预训练BEiT作为主干编码器,合并几个反卷积层 (deconv) 作为解码器来产生分割。
  • 中间微调:经过自监督的预训练,BEiT可以在中间数据集上进一步训练,然后在目标下游任务上微调模型 (自监督预训练 → 中间数据集微调 → 下游任务微调),可以直接采用BEIT的方法。

实验

图像分类实验

       以下为在ILSVRC-2012 ImageNet数据集上用1k类和1.3M张图像评估BEIT。
image
       BEIT实验的做法遵循下游任务Fine-tuning的做法,为预训练模型在具体小数据集上面Fine-tune之后得到的结果。分类实验在CIFAR-10和ImageNet这两个数据集上进行,训练配置如上图。
image
       上图为CIFAR-100上的测试top-1精度。观察到,在较小的CIFAR-100数据集上,从头训练的ViT仅达到48.5%精度,BEIT通过预训练实现了90.1%,实验结果表明BEIT可以大大降低标注工作量。BEIT也优于MoCo v3、DINO。另外,在ImageNet-1K上的中间微调可改善在CIFAR-100上的结果。
image
       上图显示了在ImageNet上,从头开始训练时ViT-384-L比ViT-384差,验证了Vision Transformer模型的data hungry的问题,解决方法为用更大的数据集ImageNet-22K,用了以后 ViT-384-L 最终比ViT-384涨了1.2个点。相比之下,BEIT-L比BEIT好2个点,BEIT-384-L比BEIT-384好1.7个点,说明大数据集对BEIT的帮助更大。

       当输入图像尺寸为384×384时,在数据集上Fine-tune10个epochs,patch的大小保持不变的情况下。观察到,更高的分辨率可以提高1个精度点。当使用相同的输入分辨率时,用ImageNet-1K进行预训练的BEIT-384比使用 ImageNet-22K进行监督预训练的 ViT-384表现更好。
image
       与最先进的监督预训练在ImageNet微调上进行了比较。除了使用ImageNet-1K还在ImageNet-22K上对BEIT进行了预训练150 epochs,在自监督预训练之后,在ImageNet-22K进行了90 epoch的中间微调。此外,使用一个内部数据集,其中约有7000万张带标签的图像,作为ImageNet-22K的直接替代。BEIT +为增加了LayerScale和相对位置偏差模块。

       上图结果看到。 BEIT-L在ImageNet-22K上进行了微调,取得了与在谷歌JFT-3B上训练的ViT-L相当的性能。此外,BEIT -L在对内部70M数据集进行中间微调后,在ImageNet上获得了89.5% top-1的精度。结果表明,BEIT预训练大大减少了所需的标记工作,并推进了大尺寸视觉transformer的新技术水平。
image
       上图显示了在ADE20K语义分割基准上的微调结果。在Swin中,使用与BEiT相同的任务层(即UperNet)并在640 × 640分辨率下评估模型。BEiT-L模型在ADE20K上获得最先进的性能。
image
       上图二比较了从零开始训练和先训练再微调两种范式的收敛曲线。微调BEIT不仅实现了更好的性能,而且收敛速度比从头训练DeiT快得多。

消融实验

image
       上图为在ImageNet (分类) 和 ADE20K (分割) 任务上进行的消融实验,行1观察到Blockwise masking在两种任务中都是有利的,特别是在语义分割上。行2为将预训练改为masked patches 的像素回归问题,观察到精度下降了一个点,行3在此之上减少 blockwise masking 的使用进一步降低了精度,发现blockwise masking 对像素级自动编码更有帮助,可缓解短距离依赖。行4预训练恢复100%的visual tokens会影响下游任务的性能,行5在此之上减少 masking 的使用会进一步降低精度。行6比较了不同训练 steps下的 BEiT,显示对模型进行更长时间的预训练可以进一步提高下游任务的性能。
image
       上图显示使用LayerScale和相对位置偏差都提高了ImageNet分类和ADE20K语义分割的性能。 根据经验注意到,当将模型扩展到数十亿参数时,vanilla Transformer是最稳定的,因此我们不将LayerScale用于超大型模型。
image
       上图为对比了在ImageNet-1K上训练的DALL-E的tokenizer和dVAE的tokenizer的性能,实验显示本文提出的tokenizer获得了更好的重构损失和ImageNet微调性能。

可视化

image
       上图绘制了图像中不同参考点的自注意力分布图,可视化通过网络最后一层的query、key的积计算出的注意力分数产生。观察到BEIT中自注意力机制可以分离对象,即使预训练完全不依赖于任何人工标注。

reference

Bao, H. , Dong, L. , & Wei, F. . (2021). Beit: bert pre-training of image transformers.

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

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

相关文章

[word] word保存了但是再打开就没有了怎么办 #职场发展#其他

word保存了但是再打开就没有了怎么办 word保存了但是再打开就没有了怎么办? 一些朋友反映常常找不到自己保存在电脑中的Word的文档,不知道是怎么回事。如果是突然消失的,其实情况还是有很多种,相信大家也有一定的了解。在这里&a…

jmeter-07jmeter与数据库关联

文章目录 一、JDBC驱动下载二、连接数据库三、写对应的SQL四、进行断言处理方法一:使用beanshell进行断言方法二:使用json进行断言四、为什么数据库查询的结果赋值给了**sql_name**,但是在断言的时候使用的是**sql_name_1**呢?一、JDBC驱动下载 JDBC驱动下载链接 1)5.x.x…

MySQL5.7升级到MySQL8.0的最佳实践分享

一、前言 事出必有因,在这个月的某个项目中,我们面临了一项重要任务,即每年一次的等保测评整改。这次测评的重点是Mysql的一些高危漏洞,客户要求我们无论如何必须解决这些漏洞。尽管我们感到无奈,但为了满足客户的要求…

【Linux 04】编辑器 vim 详细介绍

文章目录 🌈 Ⅰ 基本概念🌈 Ⅱ 基本操作1. 进入 / 退出 vim2. vim 模式切换 🌈 命令模式1. 光标的移动2. 复制与粘贴3. 剪切与删除4. 撤销与恢复 🌈 Ⅲ 底行模式🌈 Ⅳ 异常退出 🌈 Ⅰ 基本概念 vim 是一种…

XMall 开源商城 SQL注入漏洞复现(CVE-2024-24112)

0x01 产品简介 XMall 开源电商商城 是开发者Exrick的一款基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等。 0x02 漏洞概述 XMall 开源商城 /item/list、/item/listSearch、/sys/…

第24讲投票管理实现

投票管理实现 后端: package com.java1234.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.java1234.entity.*; import com.java1234.service.…

LabVIEW高效电磁阀性能测试

LabVIEW高效电磁阀性能测试 在核电站的安全运营中,电磁阀作为关键组件,其性能的可靠性至关重要。设计一套基于LabVIEW的电磁阀测试平台,既能精准测试电磁阀的多项性能指标,又能提高检修效率与准确性,进而保障核电站的…

WebSocket | 基于TCP的全双工通信网络协议

文章目录 1、介绍2、示例2.1、分析2.2、代码开发2.3、功能测试 ​🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开…

【超级干货】ArcGIS_空间连接_工具详解

帮助里对空间连接的解释: 根据空间关系将一个要素的属性连接到另一个要素。 目标要素和来自连接要素的被连接属性写入到输出要素类。 如上图所示,关键在于空间关系,只有当两个要素存在空间关系的时候,空间连接才有用武之地。 一…

Json-序列化字符串时间格式问题

序列化字符串时间格式问题 一、项目场景二、问题描述三、解决方案 一、项目场景 最近C#中需要将实体进行json序列化,使用了Newtonsoft.Json public static void TestJson(){DataTable dt new DataTable();dt.Columns.Add("Age", Type.GetType("Sys…

ESP32学习(1)——环境搭建

使用的ESP32板子如下图所示 它可以用Arduino 软件,基于C语言开发。但是,在这里,我是用Thonny软件,基于micro_python对其进行开发。 1.安装Thonny Thonny的软件安装包,可以去它官网上下载。Thonny, Python IDE for begi…

【论文精读】EfficientNet

摘要 以往的卷积网络模型通过缩放深度,宽度和图像大小的其中之一或之二来扩大网络以实现更好的结果,但这种思想下经常产生次优的精度和效率的算法。 本文认为通过同时平衡网络宽度、深度、分辨率的缩放倍数来扩大卷积网络,可以达到更好的精度…