2. 计算机视觉系列Transformer

705 阅读3分钟

参考资料:

self-attention教案

self-attention视频

DETR论文讲解

transformer最初是为了解决NLP任务,把一句话分成词向量然后编码运算出词汇之间的关联。那么视觉中transformer的意义我个人理解为:把图片也抽象成向量,通过增加位置信息和类别信息来建立图中各部分的相互关联性。

Self-attention

QKV

Q(query):用于主动 与其他token计算相似度。

K(key):被用于 与其他token计算相似度。

V(value):表示当前token的重要程度。

计算过程

QQ截图20230712225218.png

位置编码

方案一:通过公式生成位置编码。

方案二:生成可学习的位置编码,即输入随机初始化一个编码,作为参数进行更新。

Multi-head Attention

Vision Transformer(ViT)

论文:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

图片.png

图片.png

  1. patch embedding:将图像分割成14×14大小的patch(14×14×3),然后经过卷积核卷积(3×3×768),得到输出特征图(14×14×768),然后将这些特征图进行flattern(768×196),再tranpose一下,成为image token(196×768)。

  2. class embedding + positional Embedding:将类别信息class token(1×768)与image token相concat(197×768);将位置信息position embedding(197×768)与new image token相add(197×768)。

  3. transformer encoder: 将上一步得到的向量(197×768)输入Encoder中,经过了Norm层→Multi-Head→Norm层→MLP→Norm层得到输出(197×768)。

  4. classify-分类:将位置信息class token(1×768)输入MLP Head(可以理解为全连接层),得到分类结果。

DETR

论文:End-to-End Object Detection with Transformers

图片.png

  1. 卷积网络提取特征-backbone:输入图片(3×800×1066)通过卷积网络提取特征(2048×25×34),再经过1×1的降维操作(256×25×34),与位置信息(256×25×34)add操作,然后进行flattern(256×850)和transpose(850×256),输入Transformer Encoder。

  2. Transformer Encoder学习全局特征:经过encoder输出仍然是(850×256)。

  3. Transformer Decoder强化学习到的特征:将encoder输出特征与object queries(100×256)送入decoder中,得到输出向量(100×256)。

  4. 计算loss:将Decoder的输出送入检测头FFN(feed forward network,可以理解为全连接层)中,预测出x,y,w,h,class(有多少类,class就是多长),训练时将预测框与Ground Truth做匹配,计算loss: 一张图片输入DETR中,得到N个预测框,将预测框与GT的类别、位置信息进行loss计算,通过最优二分图匹配算法(可以调用scipy包中的linear-sum-assignment函数),找到使得loss最小的,唯一匹配GT的预测框,由于是唯一的,因此不需要NMS算法。

特点:对于小目标的检测效果并不出众。