Transformer由NLP发家,用于NLP任务。
自适应地发掘长短关联。
自注意力/编码解码注意力。
位置编码(Position Encoding)。


首先需要明白QKV分别是个啥。对于输入的每一个单词都生成三个vector,分别是query,key和value。这三个vector如何生成?将embedding层输出的向量分别输入三个神经网络,三个神经网络输出的向量就是query,key和value. 这三个神经网络是随着其它部分一起端到端训练的。因此自注意力倾向于一种affinity。

规定了输出,隐含地监督了网络的注意力部分让一个类别的部分去亲和为同样的输出。也就是每个pixel的Softmax(权重)*V尽量一致,Softmax(权重)来自QK,此时就进一步隐含让Q K使同类像素更亲和/一致。

但是,QKV是通过什么得到的呢?实际上,编码器Encoder提供KV,解码器Decoder提供K,如下图所示👇:

上文我们说过,transformer起源于NLP,科学家们就开始思考,transformer这么好用,能不能用在CV领域呢?由于reansformer需要的输入是序列,因此,我们需要解决的是,将输入为图片转变成输入为序列。

如上图所示,将图片切分成若干块进行顺序编码,以序列的形式输入,每个小块flatten成1*n的形状,将输入转换为序列的形式。
分类/backbone
分类/backbone
图像分辨率高,像素点多,Transformer基于全局自注意力的计算导致计算量较大

整个模型采取层次化的设计,一共包含4个Stage,每个stage都会缩小输入特征图的分辨率,像CNN一样逐层扩大感受野。如下图所示👇:

核心:多次重叠局部交互可以实现全局信息处理
多次重叠局部交互可以实现全局信息处理,普通的transformer将每个向量与其他全部向量做相似度运算,当图片过大时计算量很大,这显然是不合适的。因此SWIN Transformer对此进行了改进,每次不是和全部的向量进行运算,而是和相邻m个进行运算,这样可以大大减少计算量而且逐渐可以获取到全局的感受野。
分类/backbone
计算量大,model capbility差
改变模型注意力区域的形状(有点像Axial-Attention)


目标检测
传统的CNN目标检测使用anchor的方式,抛出预测结果。主要依赖于NMS(非极大值抑制)后处理得到最终检测结果。NMS非常耗时
动态输出集与真值集进行 二分图最小权匹配

目标检测
DETR训练慢,因为Self-Attention无法有效捕获空间信息
使用逐层优化过程,利用可变形卷积代替子注意力机制

目标检测
DETR训练速度较慢(Decoder的问题)
自监督、预训练

语义分割
transformer卷积输出可作为动态核、加解码head用于分割
Decoder输出特征embedding后与特征图进行卷积
