Transfomer相关知识点】
-
数据方便
-
数据扩增
-
制作更多的数据集。
将模型预测错的图片挑出来,然后根据这些预测错误图片的特征进行相应的算法设计。
-
网络结构
-
更换更优的backbone
-
使用FPN+PAN,提高对小目标的预测能力
-
使用更优的loss:ciou等
-
使用更优的正负样本选择方法:如SimOTA
Self-Attention
3.2 Q, K, V 的计算
Self-Attention 的输入用矩阵X进行表示,则可以使用线性变阵矩阵WQ,WK,WV计算得到Q,K,V。计算如下图所示,注意 X, Q, K, V 的每一行都表示一个单词。
3.3 Self-Attention 的输出
得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:

公式中计算矩阵Q和K每一行向量的内积,为了防止内积过大,因此除以
的平方根。Q乘以K的转置后,得到的矩阵行列数都为 n,n 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。下图为Q乘以
,1234 表示的是句子中的单词。
得到
之后,使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1.
得到 Softmax 矩阵之后可以和V相乘,得到最终的输出Z。
上图中 Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数,最终单词 1 的输出
等于所有单词 i 的值
根据 attention 系数的比例加在一起得到,如下图所示:
Swin-Transformer代码解析
预处理PatchEmbed
graph TD
1(N,3,224,224)--conv-3,96,4,4-->N,96,56,56--flaten+transpose-->N,56*56,96-->dropout
2(N,C,H,W)--conv-C,C2,4,4-->N,C2,H/4,W/4--flaten+transpose-->N,H/4*W/4,C2-->dropout
stage
每个stage的输入和输出都是N,HW,C的形式,因此,最后的输出也相当于是一个特征图,与其他的backbone没有任何区别。
PatchMerging
就是focus结构,替代池化使用的
以下的N,H*W,C等价于上一节的N,H/4*W/4,C2
graph TD
N,H*W,C--focus池化-->N,H/2*W/2,4*C--norm+liner-4C,2C-->N,H/2*W/2,2C
block
graph TD
N,H*W,C--LN+reshape-->N,H,W,C--W-MSA/SW-MSA-->N,H/2*W/2,C
W-MSA
主要核心还是self-attention,只不过是局部使用而已,减少计算量。其实就是nonlocal
SW-MSA
参考链接
搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了(十六)——介绍的非常详细(主要看这个,也有VIT的讲解)