当前位置:首页> AI教程> Transformer架构在CV任务中的应用及挑战-MAE介绍

Transformer架构在CV任务中的应用及挑战-MAE介绍

释放双眼,带上耳机,听听看~!
本文介绍了Transformer架构在CV任务中的应用及挑战,以及与之相关的MAE(Masked Autoencoders)技术,讨论了图像重建和遮盖训练的相关内容。

⚠️⚠️⚠️本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!

在之前VIT的介绍中,我们介绍过用Transformer(Encoder)的架构来做图片分类技术。VIT成功证明了我们可以用语言模型的架构替换CNN,来做普适性的图像分类任务,这也为后续一系列CV大模型、多模态模型等发展奠定了基础。

那么,既然VIT的能力如此之强,只用它来验证分类任务,是不是太浪费了?我能再给它上点难度吗?比如,我把图像随机遮盖掉一部分,让它做像素级别的图像重建?

今天我们要来讲解的MAE(Masked Autoencoders) ,就与这个目的息息相关。

CV大模型系列文章导航(持续更新中):
🌸CV大模型系列之:MoCo v1,利用对比学习在CV任务上做无监督训练🌸
🌸CV大模型系列之:DALLE2,OpenAI文生图代表作解读🌸

一、MAE产生的背景

我们知道,以Transformer架构为基础的大语言模型,在预训练时,基本都采用自监督(self-supervised) 学习的方法。也就是,训练数据不需要任何人为标注(label),训练数据本身就是label。

举个例子,以Transformer Encoder架构为代表的Bert一族,在预训练时采用了遮码(mask)训练的方法。也就是给定一段话,随机mask掉这段话中的一些单词,然后让Bert去预测出这些被遮盖的单词,这就很像在做完形填空,而被盖住的单词本身就是label。再例如,以Transformer Decoder架构为代表的GPT一族,在训练时采用了上下文接龙的训练方法。也就是给定一段话,我把它的下文(completion)遮住,让你根据它的上文(context)预测出下文,此时被遮住的下文就时label。

自监督训练不仅能锻炼模型对输入数据的特征的提取能力,还能帮人省下一大笔人工标注的钱。因此它在Transformer架构下的NLP领域很快火了起来。

但是,为何自监督训练在CV领域的应用落后于NLP? 主要原因有三方面:

(1)CV模型与NLP模型的架构不同

在VIT成功之前,CV领域占主导的方法依然是卷积神经网络(CNN)。想象一下,你把一张图随机遮盖掉一部分,当你的卷积窗口在这张图片上移动时,它会同时把已遮盖和未遮盖的部分囊括进去,换而言之,它很难找到那些真正被遮盖的部分,更不要提进一步去预测它了。但这个问题在VIT被提出后得到了解决,我们可以选择遮盖掉图片中的patch,而patch的输入是独立的。这也为MAE的发展奠定了基础。

(2)CV模型与NLP模型的信息密度不一样

想象一下,一句话的语义信息是丰富的,但一张图的像素信息是冗余的(回顾一下图像插值能奏效的原因,就是因为相邻的pixel像素值差别不大)。因此,在NLP中,我们可能只需mask掉少量的数据,就能迫使模型学到语义信息;但是在CV中,对一张图我们需要mask掉大量的像素块,才能迫使模型不靠学插值,而真正从图像语义上重建图像。

(3)CV模型与NLP模型对decoder的需求不一样

NLP任务中,我的encoder负责提取的文字特征是高语义的,我的decoder负责重建的是文字,也是高语义的。在CV任务中,我的encoder负责提取的图像特征是高语义的(把图像中的精华提取出来),但我的decoder负责重建的图像却是低语义的(还原完整的一张图,势必包含很多冗余的像素信息)。

换而言之,NLP的encoder-decoder架构设计和训练间几乎没差异(symmetric,对称),但CV的encoder-decoder却存在差异(asymmetric,非对称) 。对于NLP任务,比如Bert,由于编码目标和解码目标一致,因此完全可以用一个简单的线性分类器MLP代替decoder,毕竟encoder已学到完全的语义。但对CV来说,decoder的设计会影响最终结果。这点我们在MAE的实验中也会看到。

好,基于以上三点的分析,作者提出了用于做CV自监督训练的MAE模型。一来,它是Transformer架构(解决(1));二来,在训练中它mask掉了图片的大部分(解决(2));三来,它有一个不对称的encoder-decoder架构(解决(3))。

花了这么多文字,理了一遍MAE产生的背景,是不是看得有点眼花了?在正式介绍MAE前,我们放松下,先来看看MAE最终重建图像的效果吧。

(左:做完mask处理的输入数据;中:MAE预测结果;右:真值)

Transformer架构在CV任务中的应用及挑战-MAE介绍

二、MAE架构

Transformer架构在CV任务中的应用及挑战-MAE介绍

2.1 MAE整体训练流程

如上图所示,MAE的整体训练流程分为以下几步:

(1)对原始输入图片切分patch(对patch定义和具体操作方法有疑问的朋友,可以参考这篇讲解VIT的文章)。

(2)对patch进行随机采样,采样出约75%比例的patch,对这些patch做mask处理(图中灰色部分)。

(3)对非mask的patch,将其转变为emebdding,同时添加位置编码。然后将其送入encoder部分,让encoder从中提取图像的高语义信息。

(4)对于encoder部分的输出,我们按顺序将原来mask的patch拼接上去,同时添加位置编码,送入decoder进行训练。注意此时,我们是用同一个可训练的embedding,来表示所有被mask的patch。

(5)decoder部分将做像素级别的预测,对原始图像结果进行重建,训练中的loss为MAE loss,计算的是预测像素值和真实像素值之间的损失。在实际操作中,可以在patch维度计算像素的均值和标准差,然后对像素做归一化处理,这样的效果会更好。

(6)当我们训练完毕后,就可以把decoder移开,拿encoder部分做我们的特征提取器,然后继续做别的下游任务了。也就是使用MAE,通过图像重建任务来做预训练的最终目的是,取得一个强有力的特征提取encoder,方便迁移到其他类型(例如分类、检测)任务上。我们会在后文来探寻为什么能够这样操作。

在这6步当中,我们着重来说明“对patch的随机mask”和“encoder-decoder的设计”。

2.2 对patch的mask策略

由2.1的(1)(2)步可知,MAE首先要做的就是对输入数据做mask处理。但是:

  • 如何决定哪些patch要被mask?
  • 如何决定有多少比例的patch要被mask?

这两个看似简单的问题,却影响了MAE最终的结果。

我们先来看问题一:有哪些patch需要被mask? 在这里我们假设被mask的比例是75%,在此基础上探寻mask不停位置的patch对最终图像重建结果的影响。如下图,作者做了三种尝试:

Transformer架构在CV任务中的应用及挑战-MAE介绍

(1)尝试一:随机mask掉75%比例的patch

在这一方法中,作者先对图片划分好patch,然后随机抽取其中75%左右的patch。可以发现此时,MAE的图像重建能力是最好的

(2)尝试二:按连续性块对patch做mask

在这一方法中,作者在图片中选择了一片连续性区域,对这片区域中的patch做mask(因为这项实验侧重在“连续性”上,只要连续性块足够大就能达到实验目的,所以这里选择的mask比例是50%)。可以发现,此时MAE图像重建能力是最差的。

(3)尝试三:规律性地采用网格策略对patch做mask

在这一方法中,规律性是指每隔4块patch就做一次mask。此时MAE产生的重建结果就挺耐人寻味:因为mask的策略有规律可循,它似乎把其当成了图像固有的一个特征,因此重建后的图片的网格形状仍清晰可见。

从这三种尝试中,我们可以得出结论:采用随机采样策略做mask是最好的, 因为此时既能避免模型从四周patch中通过插值猜测像素值,又能给模型提供合理的上下文信息,属实是给模型上了合理的难度。

我们再来看第二个问题:需要mask多少比例的patch?

在针对问题一做的实验中,我们假设作者已找到了最佳mask比例:75%。但是这个比例是怎么找出来的呢?

同样,作者也针对不同的mask比例,设计了一串实验,评估MAE最终效果,实验数据如下:

Transformer架构在CV任务中的应用及挑战-MAE介绍

首先,这个实验是在预训练结束后,取出encoder,在ImageNet-1K的数据集上做微调得到的。fine-tuning和linear probing对应的是两种不同的微调方法。

fine-tuning,指的是全参数微调,也就是说在微调下游任务的过程中,允许encoder部分的全量参数都做训练更新。linear probing,指的是部分参数微调,也就是在encoder最后加一层简单的线性层,微调时只有这部分线性层的参数能被更新,encoder的主体部分时被冻结的。

从从这个实验结果上看,不管是fine-tuning还是linear probing,微调效果都呈现出随着mask比例增加而上升的趋势,但mask比例超过一定数值时,整体效果呈下降趋势(难度上过头了)。

同时,我们也注意到,fine-tuning的微调准确率基线比linear probing要高很多,而linear probing对mask比例变化的敏感度比fine-tuning要高很多。这个原因是,fine-tuning能全参数微调,相比于linear probing,肯定更能适配下游任务。也正是因此,linear probing对预训练出来的原生encoder的依赖性也越高,因为它的特征提取能力直接决定了微调效果。

2.3 encoder和decoder设计

回顾第一部分对MAE产生的背景的介绍,我们知道其encoder-decoder是非对称的

对encoder来说,它吃的是图片中非mask的部分,然后学习提取这部分的特征,此时encoder的输出是高语义的;但是对decoder来说,它需要将高语义的信息还原回原始图片(势必带有冗余的像素信息),也就是decoder的输出是低语义的。

基于这一总体设计思想,encoder的模型架构应该更复杂,decoder的架构应该更轻量(lightweight)。这样,我们就能在减少计算量的同时(encoder只吃25%的patch),反向迫使encoder产生更好的特征(毕竟decoder要做的事情很简单,因此只能寄希望于encoder更加争气)。

但是,decoder真的越简单越好吗?如果像Bert那样,退化成一个MLP层,是不是也可以呢?针对这个问题,作者同样设计了不同复杂度的decoder,来验证其在微调数据上的效果:

Transformer架构在CV任务中的应用及挑战-MAE介绍

在这个实验中,作者将decoder的深度和宽度都作为变量,做了一系列实验。从中我们还是可以看出,随着decoder模型复杂度的上升,fine-tuning和linear probing的效果也是越好,但复杂度超过某一阈值时,微调的效果不升反降。

所以这个实验也告诉我们很重要的一点:虽然MAE的encoder和decoder是不对称的,且原则上decoder应该更加轻量,但这不意味着decoder越简单越好。 当decoder具有一定的复杂度时,它能把图像重建的事做好,这就使得encoder不需要关注重建的结果,进而专心提取特征。而当decoder过于复杂时,它可能会去兼顾原本encoder要做的事情,这就导致encoder在训练中松懈,不能得到很好的训练效果。

关于MAE,论文中还列出了许多有趣的实验和效果图,感兴趣的朋友可以去读相关章节。因为之前VIT的讲解中,我们已经囊括了许多关于Transformer架构做CV任务的技术细节,因此MAE这章我们就只取精华部分进行讲解啦。如果对技术细节有疑问的朋友,欢迎阅读这篇解析VIT的文章。

三、参考

1、arxiv.org/abs/2111.06…

2、github.com/facebookres…

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

OpenAI官方宣布领导层换届,CEO和联合创始人相继离职

2023-11-20 19:33:55

AI教程

深度学习环境配置教程:Python3.6.5、jupyter notebook、TensorFlow2.4.1、NVIDIA GeForce RTX 3080

2023-11-20 19:39:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索