【阅读笔记】End-to-End Object Detection with Transformers

【阅读笔记】End-to-End Object Detection with Transformers

1. 引言

2. 相关工作

2.1 Set Prediction

2.2 Transformers and Parallel Decoding

2.3 Object detection

  • Set-based loss.
  • Recurrent detectors.

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σΞNiNLmatch(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=1N[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,λL1R是超参数,两项损失由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))+λL1bib^σ(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}  XimgR3×H0×W0,具有三个色彩通道。

    2)CNN输出较低分辨率的典型激活map:   f ∈ R C × H × W \ f \in R^{C \times H \times W}  fRC×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}  z0Rd×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。

4. 实验

### DETR 模型概述 DETR (Detection Transformer) 是一种基于变压器架构的目标检测方法,它通过将目标检测视为集合预测问题来简化传统的两阶段管道[^3]。该模型的核心思想在于使用编码器-解码器结构,其中自注意力机制能够显式建模序列中所有成对交互关系,这使得其特别适合处理诸如消除重复预测之类的集合预测约束。 #### 编码器-解码器架构 DETR 使用了一种基于变压器的编码器-解码器架构。输入图像被划分为固定数量的 patches,并传递到 CNN 提取特征图。随后,这些特征图被展平并送入变压器编码器部分进行全局上下文建模。接着,在解码器端引入一组可学习的位置嵌入(称为查询),用于表示潜在的对象位置和属性。最终,解码器输出一系列边界框坐标以及对应的类别标签。 以下是实现 DETR 的基本代码框架: ```python import torch from torchvision.models.detection import detr_resnet50 # 加载预训练的 DETR 模型 model = detr_resnet50(pretrained=True) # 设置为评估模式 model.eval() # 输入张量形状 (batch_size, channels, height, width) input_tensor = torch.rand(1, 3, 800, 800) # 进行推理 outputs = model(input_tensor) print(outputs) ``` 此代码片段展示了如何加载一个预先训练好的 DETR 模型,并对其进行简单的前向传播操作以获取预测结果。 #### 训练流程优化 为了进一步提升性能,研究者们还提出了一些改进措施。例如,在小样本场景下,可以通过迁移学习技术增强泛化能力;或者设计专门针对稀有类别的损失函数来缓解数据不平衡现象[^4]。 ### 应用实例:全景分割 除了常规的目标检测任务外,DETR 同样可以扩展至更复杂的视觉理解领域——比如全景分割。具体而言,只需稍作调整即可让同一套网络同时完成语义分割与实例分割两项子任务。下面给出一段展示如何利用官方 Colab 笔记本运行 DEMO 的链接说明[^1]: [Panoptic Colab Notebook](https://github.com/facebookresearch/detr/blob/main/notebooks/panoptic.ipynb).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值