关于DETR的学习笔记

一、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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值