DETR精读

DETR论文精读

仅针对模型进行讲解,对于在全景分割的应用以及代码实现没有涉及

一、问题与改进

DETR是为了简化目标检测领域的pipeline,将目标检测问题看做集合预测问题。抛弃了anchor、proposal等出框方式,以及NMS等人工干预的后处理;借鉴了NLP领域的思路,使得分目标检测成为一个端到端的预测任务

之前的目标检测模型通常有过多后处理步骤,而目标检测的精度很大程度上取决于后处理步骤

二、模型亮点

DETR与Transformer的比较:

  • 输入编码器的位置编码需要考虑2-D空间位置。

  • 位置编码向量需要加入到每个Encoder Layer中。

  • 在编码器内部位置编码Positional Encoding仅仅作用于Query和Key,即只与Query和Key相加,Value不做任何处理。

    ❓为什么q和k加位置编码,而v不需要加上位置编码?

    因为q和k是用来计算图像特征中各个位置之间计算相似度/相关性的,加上位置编码后计算出来的全局特征相关性更强,而v代表原图像,所以并不需要加位置编码

positional encoding和Transformer中的编码方式相同,不可学习

1.end-to-end

用transformer的encoder-decoder架构一次性生成 N 个box prediction。其中 N 是一个事先设定的、远远大于image中object个数的一个整数。

object queries代表了预测框的个数,统一输入到Decoder后,经过一系列的解码和全连接操作,会直接在原始图像中输出预测框;区别于原始Transformer的shifted right操作,DETR是并行出框

2.object queries

维度大小为(N,H* W)的可学习的张量;Decoder的输入一开始也初始化成维度为 (N,H*W) 维的全部元素都为0的张量,和Object queries加在一起之后充当第1个multi-head self-attention的Query和Key。第一个multi-head self-attention的Value为Decoder的输入,也就是全0的张量。

到了每个Decoder的第2个multi-head self-attention,它的Key和Value来自Encoder的输出张量,维度为 (hw,b,256) ,其中Key值还进行位置编码。Query值一部分来自第1个Add and Norm的输出,维度为 (100,b,256) 的张量,另一部分来自Object queries,充当可学习的位置编码。所以,第2个multi-head self-attention的Key和Value的维度为 (hw,b,256) ,而Query的维度为(100,b,256)。

张量变化

K要始终要有位置信息,因为 Q K T QK^{T} QKT是在计算QK的相似度;Q中加入了object queries的信息,而object queries是一个可学习的position embedding,MHSA的过程包括了Q从KV中学习全局位置信息的过程

总结

Object queries可以理解为:充当的位置编码,只不过它是可以学习的位置编码

Object queries矩阵内部通过学习建模了100个物体之间的全局关系,例如房间里面的桌子旁边(A类)一般是放椅子(B类),而不会是放一头大象(C类),那么在推理时候就可以利用该全局注意力更好的进行解码预测输出。

3.bipartite matching losses for set prediction

Faster R-CNN这种设置许多anchor,然后基于anchor进行分类和回归其实属于代理做法即不是最直接做法,目标检测任务就是输出无序集合,而Faster R-CNN等算法通过各种操作,并结合复杂后处理最终才得到无序集合属于不够直接,将目标检测任务复杂化。

如何将预测框和标签对应?输出的 (b,100) 个检测结果是无序的,如何和 GT Bounding Box 计算loss?

本质上是寻找 i i i σ ( i ) \sigma(i) σ(i)的匹配,例如 i = 3 i=3 i=3 σ ( i ) = 18 \sigma(i)=18 σ(i)=18,意思为与第3个真值对应的预测值是第18个 σ ^ = arg ⁡ min ⁡ σ ∈ S N ∑ i N L match ⁡ ( y i , y ^ σ ( i ) ) \hat{\sigma}=\underset{\sigma\in\mathfrak{S}_{N}}{\arg\min}\sum_{i}^{N}\mathcal{L}_{\operatorname{match}}\left(y_{i},\hat{y}_{\sigma(i)}\right) σ^=σSNargminiNLmatch(yi,y^σ(i))

对于某一个真值 y i y_i yi ,假设我们已经找到这个真值对应的预测值 y ^ σ ( i ) \hat y_{\sigma(i)} y^σ(i),这里的 Σ N \Sigma_N ΣN 是所有可能的排列,代表从真值索引到预测值索引的所有的映射,然后用 L m a t c h L_{match} Lmatch 最小化 y i y_i yi y ^ σ ( i ) \hat y_{\sigma(i)} y^σ(i) 的距离。这个 L m a t c h L_{match} Lmatch 具体是:

L m a t c h = − 1 { c i ≠ ∅ } p ^ σ ( i ) ( c i ) + 1 { c i ≠ ∅ } L b o x ( b i , b ^ σ ( i ) ) L_{match}=-\mathbb{1}_{\left\{c_i\neq\varnothing\right\}}\hat p_{\sigma(i)}(c_i)+\mathbb{1}_{\left\{c_i\neq\varnothing\right\}}L_{box}({b_{i},\hat b_{\sigma(i)}}) Lmatch=1{ci=}p^σ(i)(ci)+1{ci=}Lbox(bi,b^σ(i))

假设当前从真值索引到预测值索引的所有的映射为 σ \sigma σ ,对于图片中的每个真值 i ,先找到对应的预测值 σ ( i ) \sigma(i) σ(i),再看看分类网络的结果 p ^ σ ( i ) ( c i ) \hat p_{\sigma(i)}(c_i) p^σ(i)(ci) ,取反作为 L m a t c h L_{match} Lmatch 的第1部分。再计算回归网络的结果 b ^ σ ( i ) \hat b_{\sigma(i)} b^σ(i) 与真值的 Bounding Box \color{purple}{\text{Bounding Box}} Bounding Box的差异,即 L b o x ( b i , b ^ σ ( i ) ) L_{box}({b_{i}, \hat b_{\sigma(i)}}) Lbox(bi,b^σ(i)),作为 L m a t c h L_{match} Lmatch的第2部分。

三、实验

四、结论与缺陷

  1. 收敛速度慢
  2. 对于小物体的识别精度较差
  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值