赞
踩
在看到ViT出来的时候,我就在想,既然都已经把图像token化了,并且结构上都保持与BERT一致,那为什么最后的预训练目标非得是图像分类而不直接保持BERT的Mask Language Model的预训练目标呢?果然,在MAE中就尝试了这种方法,并且只在ImagNet-1k上预训练就达到了top 1 acc 超过87%,一举超过了所有在ImageNet-21k上预训练的所有ViT极其变体的性能。下面我们来看一下MAE的做法。
论文地址:https://arxiv.org/pdf/2111.06377.pdf
读这篇论文前,需要对ViT以及BERT(当然,对bert不了解也不影响看懂MAE在做什么,只是如果想挖的更深的话建议读一下BERT这篇论文)有一定的了解。这个我之前都有总结过。有需要可以直接跳转以下链接:
1)VIT:ICLR2021-谷歌大脑团队Vision Transformer:AN IMAGE IS WORTH 16X16 WORDS
2)BERT:长文解读综述NLP中的预训练模型(纯干货)
总体的框架如图所示:
整体的做法分为以下步骤:
1)随机选取75%的patch mask掉。具体的做法:首先将原始图像分块作为一个list,然后random shuffle一遍,选取shuffle后在list中排在后75%的 patch,将他们mask掉。并从这个list里面剔除,并形成送入encoder的patch list;
2)encoder就采用ViT的结构;
3)将mask的patch按照反shuffle插入这些没有mask的patch list里面。这里需要注意的是,所有的mask的patch共同由一个可学习的向量表示,也即是所有的mask patch共享这个向量。相当于BERT里面的「MASK」这个token标记。让模型知道这个位置是被mask掉的。
4)将所有的patch送入decoder中,经过处理最终将token化的patch还原成图像形式。
5)预训练目标:就是将还原出的图像与原始图片计算MSE损失。当然,与BERT一致,这里只会去计算被mask部分的像素点的MSE。
整体上看上去,MAE与BERT不能说是100%相像吧,思想上简直就是一摸一样。只不过MAE中需要将图像token化然后还需要加上一个decoder。
不过,MAE是有重大意义的,我之前也做过类似的mask与重建的实验(但是不是重建原图),企图用这种image mask model的自监督形式来进行预训练。性能上有轻微提升,但是效果不明显。看到MAE之后,向我们证明了直接重建原图也可以做到效果十分之满意。并且想感叹一下CV与NLP的结合真的是能碰撞出特别大的火花的,并且我也相信是以后的一种趋势。
1)先看一下重建的可视化效果,是真的很强:
2)在图像分类任务上finetune,直接到了87.8:
3)在语义分割上finetune:
4)在目标检测上finetune:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。