1.VIT
ViT原理讲解
ViT结合代码
1.3 ViT模型架构
我们先结合下面的动图来粗略地分析一下ViT的工作流程,如下:
- 将一张图片分成patches
- 将patches铺平
- 将铺平后的patches的线性映射到更低维的空间
- 添加位置embedding编码信息
- 将图像序列数据送入标准Transformer encoder中去
- 在较大的数据集上预训练
- 在下游数据集上微调用于图像分类
https://liuruiyang98.github.io/posts/2021/09/09/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9B%BE%E5%83%8F%E5%88%86%E7%B1%BB-18-Vision-Transformer(ViT)%E7%BD%91%E7%BB%9C%E8%AF%A6%E8%A7%A3.html
1.对于图像数据而言,其数据格式为[H, W, C]是三维矩阵明显不是Transformer想要的。所以需要先通过一个Embedding层来对数据做个变换。如下图所示,首先将一张图片按给定大小分成一堆Patches。以ViT-B/16为例,将输入图片(224x224)按照14x14大小的Patch进行划分,划分后会得到256个Patches。
2.接着通过线性映射将每个Patch映射到一维向量中,以ViT-B/16为例,每个Patches数据shape为[14, 14, 3]通过映射得到一个长度为588的向量(后面都直接称为token)。[14, 14, 3] -> [588]
3. patch-embed 维度变化patch-size为14【448,448,3】->[32,32,1792])拉平-》【1,1024,1792】
4. 1 16,16,
2.MaskFormer
MaskFormer-github