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) σ^=σ∈SNargmin∑iNLmatch(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部分。
三、实验
四、结论与缺陷
- 收敛速度慢
- 对于小物体的识别精度较差