单目深度估计学习 第三周
学习论文:
Attention Is All You Need
https://arxiv.org/abs/1706.03762
AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
https://arxiv.org/abs/2010.11929
MOBILEVIT: LIGHT-WEIGHT, GENERAL-PURPOSE, AND MOBILE-FRIENDLY VISION TRANSFORMER
https://arxiv.org/abs/2110.02178
学习任务
本次学习的主要任务是初步了解MobileViT模型,由于MobileViT模型基于Vision Transformer模型(ViT),而Vision Transformer模型又是基于Transformer模型对于CV领域的应用,所以我们需要自底向上逐步学习,最终对MobileViT模型有一个基本的了解。
本次学习任务如下:
- Transformer模型
- Vision Transformer模型
- MobileViT模型
Transformer模型
辅助学习资料:
该模型中重点内容如下:
Self-Attention(自注意力机制)
核心公式:
Attention
(
Q
,
K
,
V
)
=
softmax
(
Q
K
T
d
k
)
V
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V
Attention(Q,K,V)=softmax(dkQKT)V
作用:捕捉序列数据中各个位置之间的依赖关系,提高模型在处理长距离依赖问题上的能力。
自注意力机制的处理步骤:
- 接受一个输入的token序列,将token通过嵌入层(Input Embedding)转换为嵌入向量序列X。
X = [ x 1 , x 2 , … , x n ] \mathbf{X} = [x_1, x_2, \dots, x_n] X=[x1,x2,…,xn]
-
对整个嵌入向量序列X,通过线性变换生成查询向量Q,键向量K和值向量V。
Q = X W Q K = X W K V = X W V \begin{align*} Q &= XW^Q \\ K &= XW^K \\ V &= XW^V \end{align*} QKV=XWQ=XWK=XWVQ Q Q:向模型”提问“,从而获取当前词与token中其他词的关联度。
K K K:存储token中每个词的信息特征。
V V V:存储token中词的实际信息内容
W Q W^Q WQ, W K W^K WK, W V W^V WV分别是对应的变换矩阵,这三个矩阵是可以训练并且可共享的。
-
将每一个查询向量与键向量点积,从而得到相似度得分矩阵scores
s c o r e s = Q K T scores = QK^T scores=QKT
对每一个词,将 Q Q Q与 K T K^T KT相乘,从而获得一个相似度得分,用于衡量当前词与序列中其他词的匹配度。 -
将相似度得分矩阵进行缩放得到 Q K T d k \frac{QK^T}{\sqrt{d_k}} dkQKT。
-
对当前Q进行 M a s k Mask Mask。 E n c o d e r Encoder Encoder在生成当前的词语时,必须只能看到前面已经生成的词汇,而不能看将来要生成的词,对于当前时间的词而言,模型需要使用 M a s k Mask Mask来对当前词之后的词进行掩盖,避免“未来”的词对当前词进行模型预测上的干扰,从而确保模型的实际正确性和稳定性。
-
对相似度得分矩阵进行进行softmax处理,得到注意力权重矩阵A,目的是将输出的向量数值转换成相应的概率。
A = softmax ( Q K T d k ) A = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) A=softmax(dkQKT) -
将注意力权重矩阵 A A A与值向量 V V V做矩阵乘法,获得最终的加权平均结果。
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V Attention(Q,K,V)=softmax(dkQKT)V
Multi-Head Self-Attention(多头自注意力机制)
核心公式:
MultiHead
(
Q
,
K
,
V
)
=
Concat
(
head
1
,
.
.
.
,
head
h
)
W
O
where
head
i
=
Attention
(
Q
W
i
Q
,
K
W
i
K
,
V
W
i
V
)
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^{O} \\ \text{where } \text{head}_i = \text{Attention}(QW^{Q}_i, KW^{K}_i, VW^{V}_i)
MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhere headi=Attention(QWiQ,KWiK,VWiV)
多头自注意力以自注意力为基础做了一些改进,论文以8头自注意力为例:
- 对于一个输入的token序列,将其转化成向量序列 X X X。
- 对 X X X分别进行8种不同的线性变换,即 X W i Q XW_i^Q XWiQ、 X W i K XW_i^K XWiK、 X W i V XW_i^V XWiV生成八种不同的查询向量 Q i Q_i Qi、键向量 K i K_i Ki和词向量 V i V_i Vi,这一步实际上是将高维的向量序列通过线性变换映射成低维的分向量,将丰富的信息切分成多个集中的特征信息。
- 依照自注意力机制输出对应的8种不同的结果,通过Concat拼接这8个头的输出信息矩阵。
- 通过**线性变换矩阵 W O W^O WO**将拼接之后的向量重新映射回模型的原始维度。
多头自注意力机制是Transformer模型中的核心。通过多个注意力头,将输入序列投影到不同的子空间,每个子空间捕捉输入数据的不同特征和关系,从而让模型在不同的角度理解序列数据,从而增强模型的表达能力和稳定性,使其在长距离依赖依然能表现出很好的效果。
Vision Transformer(ViT)模型
辅助学习资料:
ViT模型可以简单分为三个部分,以下分别简要讲述其中的功能:
一.Linear Projection of Flattened Patches
-
分割大小相同的图像块。
-
将所有图像块输入全连接层,将一堆二维图像线性映射成一堆一维向量。
-
将一维向量与一个专门用于分类的可训练的参数 [ c l a s s ] t o k e n [class]token [class]token拼接。
-
最后为一维向量加上(不是拼接)与其对应的位置信息。
简单而言,模型将一个输入图像分割成多个固定大小的patch,将这些patch映射到对应的嵌入向量之后,添加上位置编码,即完成了第一步的操作,这段操作是对图像的预处理。
二.Transformer Encoder
- 对输入的Embedded Patches使用 L a y e r N o r m Layer Norm LayerNorm(横向规范化)进行归一化。LN对于整条序列的归一化处理减小了数据在模块中的内部协变量偏移,使每一层的输出保持较为一致的尺度,避免出现极端值,从而提升模型的学习能力和泛化性。
- 对规范化后的数值进行 M u l t i − H e a d A t t e n t i o n Multi-Head Attention Multi−HeadAttention处理。
- 经过多头自注意力处理之后,使用 D r o p o u t / D r o p P a t h Dropout/DropPath Dropout/DropPath处理。Dropout/DropPath层的作用是作为正则化手段,防止多头自注意力处理之后发生过拟合。
- 将一开始没有经过LN操作的输入与Dropout/DropPath层的输出相加。这个操作的目的是确保能够传递输入的原始信息,从而帮助模型更好的训练。
- LN处理。
- MLP Block处理包含五个步骤:
- 线性变换扩展维度
- 使用激活函数GELU,平滑保留信息,提供非线性变换的能力
- Dropout正则化处理
- 线性变换还原维度
- Dropout正则化处理
- Dropout/DropPath处理。
- 将步骤4的输出与步骤7的输出相加,输出最终结果。
三.MLP Head
经过多次的Transformer Encoder处理后,模型会输出嵌入向量序列。此时ViT选择序列中的第一个向量,即 [ c l a s s ] t o k e n [class]token [class]token将其通过MLP处理,将这个向量转化为最终的分类结果,最后将这个嵌入向量映射到类别空间,完成图像分类任务。
MobileViT模型
辅助学习资料:
当前纯Transformer模型存在以下问题:
- 参数多,算力要求高
- 缺少空间归纳偏置
- 迁移到其他任务很繁琐
- 模型训练困难
将CNN和Transformer模型的优势结合,为移动视觉任务构建构建轻量级、低延迟的网络MobileViT。
(a) 原来的ViT模型示意图
(b) MobileViT模型示意图
从MobileViT模型的工作流程讲述的主要内容,分为以下四个部分:
一.Conv卷积
二.MV2处理
- 卷积下采样
- 一系列倒残差结构模块下采样
- 1x1卷积放大
- 全局平均池化
- 1x1卷积
三.MobileViT Block
- n x n卷积操作,提取局部特征
- 将特征图Unfold展开成多个patch
- 将展开的patch输入Transformer结构进行全局特征提取
- 将特征图Fold折叠回原来的空间尺寸
- 1 x 1卷积操作,还原回原来的特征图
- 将初始的特征图与步骤5获得的特征图进行concat拼接
- n x n卷积操作,完成特征融合,输出最终结果
四.全局池化与线性处理
MobileViT的优点和意义:
- 采用了轻量化的设计,减少计算和内存占用,使模型能在移动设备等资源有限的环境中高效运行。
- 结合CNN和ViT的优点,保留了CNN捕捉局部特征的优势,又结合了ViT处理全局和长距离依赖的强大能力。
还原回原来的特征图 - 将初始的特征图与步骤5获得的特征图进行concat拼接
- n x n卷积操作,完成特征融合,输出最终结果
四.全局池化与线性处理
MobileViT的优点和意义:
- 采用了轻量化的设计,减少计算和内存占用,使模型能在移动设备等资源有限的环境中高效运行。
- 结合CNN和ViT的优点,保留了CNN捕捉局部特征的优势,又结合了ViT处理全局和长距离依赖的强大能力。