【阅读笔记】End-to-End Object Detection with Transformers
1. 引言
2. 相关工作
2.1 Set Prediction
2.2 Transformers and Parallel Decoding
2.3 Object detection
3. DETR模型
3.1 对象检测集预测损失
-
DETR推断出一组固定大小的N个预测,在一次通过解码器中,N被设置为明显大于图像中典型的对象数量。
-
训练时,需要对预测对象和地面真值之间评分,评分原则为两者间的二部匹配,优化特定对象的(bounding box)损失。
-
对象目标真值集由 y \ y y表示, y ^ = { y i ^ } i = 1 N \ \hat{y}=\{ \hat{y_i} \}_{i=1}^{N} y^={yi^}i=1N表示N个预测的集合。
-
假设N大于图像中的对象数量。
-
我们也认为尺寸为N的y是一组大小为由∅(没有对象)填充的。
-
找两个集合的二部匹配,需要搜索最小花费的N个预测元素的排列。
σ ^ = arg min σ ∈ Ξ N ∑ i N L m a t c h ( y i , y ^ σ ( i ) ) \hat{\sigma}=\mathop {\arg \min}_{\sigma \in \Xi_N}\sum_i^NL_{match}(y_i,\hat{y}_{\sigma(i)}) σ^=argminσ∈ΞNi∑NLmatch(yi,y^σ(i))
- L m a t c h ( y i , y ^ σ ( i ) ) \ L_{match}(y_i,\hat{y}_{\sigma(i)}) Lmatch(yi,y^σ(i))是真值 y i \ y_i yi和带有索引下标 σ ( i ) \ \sigma(i) σ(i)的预测 y ^ σ ( i ) \ \hat{y}_{\sigma(i)} y^σ(i)之间的成对匹配代价。
L m a t c h ( y i , y ^ σ ( i ) ) = − I c i ≠ ∅ p ^ σ ( i ) ( c i ) + I c i ≠ ∅ L box ( b i , b ^ σ ( i ) ) L_{match}(y_i,\hat{y}_{\sigma(i)})=-\textup{I}_{c_i \neq \varnothing} \hat{p}_{\sigma(i)}(c_i)+\textup{I}_{c_i \neq \varnothing}L_{\textup{box}}(b_i,\hat{b}_{\sigma(i)}) Lmatch(yi,y^σ(i))=−Ici=∅p^σ(i)(ci)+Ici=∅Lbox(bi,b^σ(i))
- 需要在没有重复的情况下找到一对一的匹配的直接集预测。
- 计算损失函数,即所有上述所有匹配对的Hungarian损失,类别预测的负对数似然和稍后定义的盒子损失的线性组合。
L H u n g a r i a n ( y , y ^ ) = ∑ i = 1 N [ − log p ^ σ ^ ( i ) ( c i ) + I { c i ≠ ∅ } L b o x ( b i , b ^ σ ^ ( i ) ] L_{Hungarian}(y,\hat{y})=\sum_{i=1}^N[-\log\hat{p}_{\hat{\sigma}(i)}(c_i)+\textup{I}_{\{c_i \neq \varnothing \}}L_{box}(b_i,\hat{b}_{\hat{\sigma}}(i)] LHungarian(y,y^)=i=1∑N[−logp^σ^(i)(ci)+I{ci=∅}Lbox(bi,b^σ^(i)]
- σ ^ \ \hat{\sigma} σ^是在公式1中计算出来的最优分配。
- 在实际操作中:
- 将ci=∅时的对数概率项的权重降低了一个因子10,用于解释类别失衡。(相当于下采样)
- 对象和 ∅ \ \varnothing ∅之间的匹配代价,并不依赖于预测,因而在这种情况下,代价为常数。
- 匹配代价使用的是: p ^ σ ^ ( i ) ( c i ) \ \hat{p}_{\hat{\sigma}(i)}(c_i) p^σ^(i)(ci),而不是对数概率。
- Bounding box loss
- 使用了使用了L1损失和广义IoU损失的线性组合。
- 其中 λ i o u , λ L 1 ∈ R \ \lambda_{iou},\lambda_{L1} \in \textup R λiou,λL1∈R是超参数,两项损失由bacth里面的对象数量进行归一化。
L b o x ( b i , b ^ σ ( i ) ) = λ i o u L i o u ( b i , b ^ σ ( i ) ) + λ L 1 ∣ ∣ b i − b ^ σ ( i ) ∣ ∣ 1 L_{box}(b_i,\hat{b}_{\sigma(i)})=\lambda_{iou}L_{iou}(b_i,\hat{b}_{\sigma(i)})+\lambda_{L1}||b_i-\hat{b}_{\sigma(i)}||_1 Lbox(bi,b^σ(i))=λiouLiou(bi,b^σ(i))+λL1∣∣bi−b^σ(i)∣∣1
3.2 DETR架构
-
BackBone
1)初始图像输入: X i m g ∈ R 3 × H 0 × W 0 \ X_{img} \in R^{3 \times H_0 \times W_0} Ximg∈R3×H0×W0,具有三个色彩通道。
2)CNN输出较低分辨率的典型激活map: f ∈ R C × H × W \ f \in R^{C \times H \times W} f∈RC×H×W,其中 C = 2048 \ C=2048 C=2048. $\ H,W=\frac{H_0}{32},\frac{W_0}{32} $.
-
Transformer encoder
1) 1 × 1 \ 1 \times 1 1×1卷积核,将激活map: f \ f f从 C \ C C维降维到更小的 d \ d d维。 z 0 ∈ R d × H × W \ z_0 \in R^{d \times H \times W} z0∈Rd×H×W
2)encoder的输入要求是一个序列,因而将空间维折叠成一维,进而变为 d × H W \ d \times HW d×HW的特征map。
3)每个encoder层具有标准架构,此架构由multi-head self-attention 模块和feed forward network(FFN)组成。
4)每个attention层的输入都加入了fixed positional encodings(固定位置编码)。
-
Transformer decoder
1)decoder遵循标准transformer架构,大小为d的N个embeddings,使用了multi-headed self- and encoder-decoder attention 机制。
2)模型在每个解码器层上并行地解码N个对象。
3)输入embeddings是学习到的positional encodings(位置编码),我们称之为object queries(对象查询),将这些embeddings加入到每一个attention层里。
4)N个对象查询将被解码器转换为一个输出embedding。
5)输出embedding进入前馈网络,独立解码成方框位置坐标及类别标签,最终形成N个预测。
-
Prediction feed-forward networks:FFNs
1)最后的预测由3层感知机进行,感知机具有ReLU激活函数和维数为d的隐藏层,以及线性投影层。
2)FFN预测输入图像方框的归一化中心坐标,高度,宽度,线性层使用softmax函数预测类别标签。
3) ∅ \ \varnothing ∅用于表示在一次slot里面没有检测到对象,在标准目标检测方法中,这个类别同背景起了相似的作用。
-
Auxiliary decoding losses
1)训练时,使用了辅助损失。
2)在每一个decoder层后添加了prediction FFNs和Hungarian损失
3)使用额外共享层规范,用于从不同的decoder层将输入归一化进入预测FFN。