【源头活水】CV预训练MAE(Masked AutoEncoder)
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
地址:https://zhuanlan.zhihu.com/p/448407149
最近何恺明大神的残差网络突破了10万的的引用量,而他的MAE又引起了业内极大的关注,这里将带来MAE的详细解读。继2017年Transformer[2]被提出之后,预训练成为了NLP领域主流的研究方向,经典算法有GPT,BERT[3]等。GPT是经典的自回归(Auto-Regressive)预训练模型,而BERT是经典的掩码模型,或者说是去噪自编码(Denosing AutoEncoder)语言模型。DeepMind的image GPT(iGPT)将预训练任务迁移到了计算机视觉方向,它的预训练任务借鉴了GPT系列,即通过自回归(Auto-Regressive)的方式根据保留的图像上半部分逐像素的预测图像的下半部分的方式,并且通过微调和线性探测两个方法验证了iGPT在图像分类任务上可以起到明显的效果提升的作用。iGPT表明自回归训练任务是可以迁移计算机视觉方向的,那么自编码语言模型是否也能迁移到计算机视觉上呢?这里要介绍的Masked AutoEncoder(MAE)给出了肯定的答案。MAE的最核心的思想是通过对图片中的patch进行随机掩码,然后通过未被掩码的区域预测被掩码掉的区域,进行使得模型学习图像的语义特征。
01
02
class RandomMaskingGenerator:
def __init__(self, input_size, mask_ratio):
if not isinstance(input_size, tuple):
input_size = (input_size,) * 2
self.height, self.width = input_size
self.num_patches = self.height * self.width
self.num_mask = int(mask_ratio * self.num_patches)
def __repr__(self):
repr_str = "Maks: total patches {}, mask patches {}".format(
self.num_patches, self.num_mask
)
return repr_str
def __call__(self):
mask = np.hstack([
np.zeros(self.num_patches - self.num_mask),
np.ones(self.num_mask),
])
np.random.shuffle(mask)
return mask # [196]
03
3.1 Encoder
class PatchEmbed(nn.Module):
""" Image to Patch Embedding
"""
def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768):
super().__init__()
img_size = to_2tuple(img_size)
patch_size = to_2tuple(patch_size)
num_patches = (img_size[1] // patch_size[1]) * (img_size[0] // patch_size[0])
self.img_size = img_size
self.patch_size = patch_size
self.num_patches = num_patches
self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)
def forward(self, x):
B, C, H, W = x.shape
# FIXME look at relaxing size constraints
assert H == self.img_size[0] and W == self.img_size[1], \
f"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})."
x = self.proj(x).flatten(2).transpose(1, 2)
return x
表1:ViT的参数
3.2 Decoder
3.3 其它优化
04
Reference
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“源头活水”历史文章
[Meta-Learning]对Reptile的深度解析
用于文本分类的循环卷积神经网络
Meta-Transfer Learning for Few-Shot Learning
PointPillars论文和代码解析
ICLR'21 | GNN联邦学习的新基准
关于talking face generation两篇论文解读
一个具有隐私保护学习的图联邦架构
图上的边信息怎么办:GNNs与edge feature
一行核心代码提升无监督/自监督模型特征表达
车辆意图预测中一种基于因果时间序列的域泛化方法
因果关系检测提高强化学习效率
基于GNN的层次人脸聚类
CLUES:用于NLU的少样本学习评估
全新视觉 Transformer:高分辨率图像复原新SOTA——Restormer
更多源头活水专栏文章,
请点击文章底部“阅读原文”查看
分享、在看,给个三连击呗!