这里回顾了BERT的重要自监督任务:masked input:randomly mask some tokes and predict them

作者提到了3点看法(以后随着技术发展,背景又肯定不一样了):
1.cv和nlp架构不同(cv—过去十年是卷积的时代,nlp,由transformer主宰)
2.图像和语言的数据特点不同——图像具有较高的空间信息冗余度,即使缺失一两个像素,图像的空间信息也不会遭到很大损失。但是语言就不同了(想象一下说话缺动词或者缺主语,听不懂了吧)。因此作者提出了,将图像的mask ratio提高到惊人的75%,只使用剩余的25%去reconstruct图像,这样做的目的是迫使机器“好好学习”,即原文所说
This strategy largely reduces redundancy and creates a challenging selfsupervisory task that requires holistic understanding beyond low-level image statistics。
3.The autoencoder’s decoder, which maps the latent
representation back to the input, plays a different role between reconstructing text and images.这条似乎还是个实验性的结论.

overhead 开销
这里讲了如何实现mask:
1.random shuffle tokens列表(实现随机mask)
2直接remove列表最后数目为ratiolen(tokens)的元素。这些元素就是mask掉的tokens.
3.encode剩下的元素
4.encoded列表又append上数目为ratiolen(tokens)的mask tokens,并unshuffle这个列表。具体细节见下面源码阅读。

6.将unshuffle后的列表加上他们的positional embedding,并给decoder.

代码demo实操:


使用gan loss的mae效果非常好,如上,第三个和第四个分别是重构图片与重构图片补上未遮挡patch所形成的图片。(重构图片没有对那些未遮挡patch的tokens的模型输出计算损失并优化,只对mask的部分进行优化)

pytorch版本官方源码阅读

1.关于depth:

由于mae的encoder直接沿袭ViT的架构,因此它的深度参数直接省略了,直接在不同规模的模型命名中体现:如图:
以上是models_mae.py
仅仅有decoder_depth的参数。想看encoder的深度,需要到model_ViT.py中找。

# add pos embed w/o cls token
x = x + self.pos_embed[:, 1:, :]

对于以上的代码段:cls_token没有position_embedding

2.关于decoder

和encoder一样,官方实现decoder采用了ViT 的transformer架构。

这里是forward_decoder函数。这里对应上面第四步unshuffle操作,可以看到,cls_token始终位于所有token开头,没有参与shuffle与unshuffle操作。每一个mask_token都是一个可以学习的参数。

这里我不太明白,decoder_pos_embed直接就加到x上,这里x是包括cls_token的,cls_token按理不应该有pos_embed不是吗

关于爱因斯坦求和np.einsum


官方文档介绍,numpy
官方文档介绍,torch
在这里,einsum的作用是把第二个维度放到了最后,最后的维度变为nhwpqc。einsum非常灵活,首先自己用六个字母nchpwq指定了x张量的下标,然后做了维度调换的操作变为nhwpqc。从而接下来的reshape做准备。

关于训练和demo展示的区别

细节:一张图片patchify经过mae的encoder和decoder,得到输出是(1,token_length(不包括cls),patch_size x patch_size x in_chans).mae输出没有经过unpatchify的操作。
mae在训练时实际将target,即标签图片首先patchify,然后跟自己的输出进行误差计算。在demo展示时其输出经过unpatchify方得到图片的标准维度,可以展示。

源码Block引用:如果你安装了最新的timm,

在Block的参数列表中,qk_scale=None参数应删去

mae util中正余弦编码有一行assert,内容是检查embed_dim是不是偶数,如果是奇数就会报错。

embed数目为奇数

MAE学习 论文阅读与学习 源码阅读相关推荐

  1. Hive学习(一)窗口函数源码阅读

    Hive学习(一)窗口函数源码阅读 背景 窗口函数执行逻辑 代码流转图 源码阅读分析 PTFOperator PTFInvocation PTFPartition TableFunctionEvalu ...

  2. MP4学习(九)ts-mp4源码阅读(7)mdia box的解析

    mdia box的解析 常见的MP4结构图 mdia box的定义 /* ** mdia box的定义,包含: ** mdhd.hdlr.minf等box */ static mp4_atom_han ...

  3. MP4学习(四)ts-mp4源码阅读(2)MP4的解析流程

    MP4的解析流程 常见的MP4结构图 MP4 box的定义 MP4也是一个容器 /* ** MP4容器定义,包含: ** ftyp.moov.mdat */ static mp4_atom_handl ...

  4. MP4学习(五)ts-mp4源码阅读(3)ftyp box的解析

    ftyp box的解析 常见的MP4结构图 ftyp box有且只有一个,在mp4文件最开始的地方.它依次包括1个32位的major brand(4个字符),1个32位的minor version(整 ...

  5. 【源码阅读】SIR-GN: A Fast Structural Iterative Representation Learning Approach For Graph Nodes

    目录 简介 论文简介 准备工作 运行 源码阅读 完整源码(注释版) 结语 简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序 ...

  6. SpringMVC源码阅读系列汇总

    1.前言 1.1 导入 SpringMVC是基于Servlet和Spring框架设计的Web框架,做JavaWeb的同学应该都知道 本文基于Spring4.3.7源码分析,(不要被图片欺骗了,手动滑稽 ...

  7. 大神手把手教源码阅读的方法、误区以及三种境界

    丁威 中间件兴趣圈 读完需要 1 分钟 速读仅需 1 分钟 在技术职场中普遍存在如下几种现象: 对待工作中所使用的技术不需要阅读源码,只需在开发过程中能够熟练运用就行 看源码太费时间,而且容易忘记,如 ...

  8. mysql 1260,MYSQL 源码阅读 六

    前期节要 MYSQL源码阅读 一 MYSQL源码阅读 二 MYSQL源码阅读 三 MYSQL 源码阅读 四 MYSQL 源码阅读 五 上次有两个问题没搞明白 1 是 为什么一定要开启调试线程 ? 因为 ...

  9. 转-OpenJDK源码阅读导航跟编译

    OpenJDK源码阅读导航 OpenJDK源码阅读导航 博客分类: Virtual Machine HotSpot VM Java OpenJDK openjdk 这是链接帖.主体内容都在各链接中.  ...

  10. 超像素SLIC算法源码阅读

    超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...

最新文章

  1. php 二维数组排序函数,php自定义二维数组排序函数array
  2. Call和Apply的区别
  3. python不好的地方_Python 语言中经常有疑惑的地方
  4. xstream不映射字段_Mybatis_day03:输入映射和输出映射
  5. linux系统从开机到登录之前的启动流程
  6. 18秋学期《计算机网络》在线作业,18秋北交《计算机应用基础及计算机网络与应用》在线作业一-2辅导资料.docx...
  7. GTK实现简单计算器(calculator.c)
  8. 《物联网Android程序开发案例式教程》Demo2:相对布局
  9. linux limbo镜像文件下载,limbo 2000镜像下载
  10. php电子书mobi,EPUB / PDF / MOBI 電子書下載
  11. Go语言的安装与环境配置
  12. Android 出海 Admob 踩坑
  13. html5渐变色毛玻璃,基于CSS3实现的毛玻璃渐变效果
  14. 将淘宝客链接转换为正常淘宝、天猫商品链接
  15. 现代服务业行业税收筹划,信息技术公司节税方案
  16. layui.table(表格)跨页多选
  17. 2021-03-31
  18. Qt进阶--Item Views详解(基础,原创,超级详细)
  19. 使用后羿采集器采集数据,并导出到MySql数据库中
  20. 语音助手——问答型助手架构和设计

热门文章

  1. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(4)!
  2. HAL ADC连续转换模式 Continuous Conversion Mode
  3. 红黑树特点以及如何构建红黑树
  4. 鸿蒙dnf怎么样,DNF:最保值时装终于再出,当年卖300如今值5000,又是全服真香?...
  5. 强大的多语言版本在线图片处理网站
  6. 中国第一份OA系统用户实名口碑选型报告(选型宝重磅发布!)
  7. 谈谈整车电子电气架构EEA
  8. 计算机控制器安装方法,win7正确安装3D视频控制器的两种方法介绍
  9. 联想Y700笔记本:硬盘突然不见了
  10. 2018春季java校招_2018阿里巴巴春季校招笔试题(Java开发)