一、Transformer
ps.参考李宏毅老师的讲解。
一、self-attention
1.得到Q,K,V矩阵:即a1-4分别去乘wq\wk\wr得到Q,K,V
2输出序列的的计算:以k2为例
(1)让quety对每个key做attention得到四个a
(2)a1-4做softmax进行归一化后和v1-4做dot product
(3)最后相加得到了b2
3.OK那么就让我们看一下具体整个的矩阵乘法表示【注意,矩阵乘法是可以用CPU加速的】
二、multi-sead self-attention
以下以2个head为例:
(1)qi乘两个w得到qi1和qi2
(2)qi1只对对应的第一个k,v相乘后得到bi1,bi2做concat,可以乘w降维以下得到bi;
-->即可以对每一个head并行做不同的处理。
三、位置编码
motivation:因为在self-attention里面其实是不在乎相隔的远近的,这样可以说是空间信息的缺失。所以在这里加入了e;
在这里,视频中的解释是,如果是把和a进行直接相加反而对原本a的信息变得复杂,为什么不concat;所以就以另一种concat的解释来得出作者表示为相加的理由(觉得讲的超级好):
如灰色部分p,加入了一个位置,只有在第i个的时候编为1,其余为0--> 把q跟xconcat之后乘w-->用线代的知识点其实就是两个相加; 【ps,这里Wp是人为设置的,用某个式子得出】
二、DETR【其实DETR的成功主要还是因为transformer。】
1.motivation:
先前目标检测更多的在于anchor,NMS操作来删掉冗余的框,比较复杂难以调参并且很大程度基于先验知识。作者提出直接采用端到端,直接不需要anchor,而是把他变为对集合的分类。不需要NMS,简单直接。
2.innovation:
set prediction
(1)用object query去替代原来的anchor
(2)用二分图匹配去替代原来的NMS
关于为什么要做transformer: transformer关注的是全局,每一个特征都关注到其他特征的信息,即存在信息交互,这样可以区分哪一块是哪个物体另一块又是哪个物体;所以transformer encode可以一个物体只出一个框,这样可以大大地移除那些冗余的框。
先做最优匹配再去根据最优匹配算loss
在这里想谈谈我对object query的理解(虽然但是不知道会不会理解有误。。。):
detr中N=100,100个能够去学习的object query有点类似于出100个anchor的感觉,通过100个object query去在特征图上学习,经decoder和FNN输出后也为100个预测框(FNN会及逆行类别分类和框的四个坐标);然后这100个query通过二分匹配(用KM算法在预测和GT之间找一个loss最小的匹配,这一步不进行梯度优化;然后用这个匹配到的Q和GT去做looss进行梯度优化)去找出要跟GT对应的query,最后通过gt和query做loss。
3、存在问题:
(1)高分辨率图计算量大;在VIT中需要先下采样再分patch进行self-attention,不利于小目标的检测。
(2)二分匹配中X和Y的最开始的乱匹配,难收敛。
三、Deformerable DETR
1、motivation:
detr中因为transformer存在两个问题:1.收敛慢:在编码时对每个特征图给一致的权重,导致需要很长的时间训练,比如detr用500个epoch;2.计算量大:在进行编码的self-attetion中时二次方运算,计算量很大,导致处理高分辨率图像上的计算量太大,这也进一步说明为啥不适合小目标检测【小目标检测一般要在高分辨率图上进行检测】
2.innovation:
可形变detr(灵感来源于可形变卷积):极大的收益来源于融合了多尺度特征【注意scale-level embedding】(即可拓展至多尺度且无需FPN)
Pq代表样本点,W'm是将x变为value,Wm是对加了注意力的value进行线性变换后得到不同head的输出结果;其中可以看到,多了Zq,Zq是参考点,偏移量offset就是采样点对参考点的位置偏移。
(1)queryZq分别进行两个线性层:左边linear得到偏移量offset,右边linear+softmax可以得到不同head对应的注意力Amqk。【所以在这里也可以看出,offset和Attention都是由query去学习出来的,这里并不是Q和真正的K做交互】
(2)如图框Value:通过query得到的偏移量,在样本点通过偏移量得到的若干token加上双线性插值取得出你要的value;
(3)用得到的稀疏value去跟query得到的Attention做点积得到每个head的输出,即有注意力的value。
(4)将head进行concat后用线性层输出。
--> 所以可形变detr通过偏移量对稀疏样本进行self-attention可以加快收敛速度。
这里要说一下可形变detr(如下图右)的具体网络:用backbone得到不同尺度的特征图(这里没有用到FPN主要是因为deformable可以融合多尺度),主要区别在于前面特征图输入有single-scale变成了multi-scale;多了一个reference point作为采样点来达到sparse。