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

代码地址:https://github.com/facebookresearch/detr

论文小结

  本文是Transformer结构应用于目标检测(OD)任务的开山之作。方法名DETE,取自Detection Transformer。
  作为2020年的论文,其表现精度在当时也不算高的,但为后面的DETE-based方法提供了基础。

  DETR的模型架构设计,使用的是混合Transformer结构,即CNN+Transformer的结构,

  与YOLO系列基于grid的预测对比,DETR经过transformer的decoder输出的是序列集。由于OD任务不需要自回归处理,所以decoder的输出可以并行处理,同时输出多个检测框

  transformer输出的是序列集,而OD任务所需要的最终结果也是一个边框集合,所以DETR是直接对结果进行的预测,即OD任务在此直接为集合预测问题
  集合预测问题,在匹配损失的时候,具有唯一性。所以DETR的预测结果在合理的Loss作用下,是不需要NMS后处理的。且在没有anchor grid和anchor box的偏差预测过程的情况下,DETR算法管道实现端到端训练和预测,丢弃了YOLO系列所需的融入先验知识的需求(anchor & nms)。

  文中DETR对比的算法是Faster RCNN,是2015年的一篇论文,精度差不多,运行时间也差不多。小目标不如Faster RCNN,大目标好不少,最后mAP基本持平。
  后续也有论文改进了transformer在小目标检测上精度不足的问题。

论文简介

  现有大多数检测算法,都依赖于一些初始猜测。不管是基于proposal的二阶目标检测算法,还是anchor-based、anchor-free的一阶目标检测算法,都是没有直接去预测集合预测的,而是设计了一个替代的任务(回归和类别概率)来解决目标检测问题。
  现代目标检测器的检测性能很受后处理步骤的影响,比如(1)密集预测边界框的消除;(2)anchor集合的额设计;(3)将目标分配给anchor的启发性方法;
  DETR通过直接预测集合的方法来绕过这些“代理”任务,无需任何人工先验知识,实现端到端预测

  DETR的结构图如图1所示。其组件transformer-encoder将序列元素两两交互,其全局的交流有利于一些特别限制的集合预测,比如移除重复的预测结果。
  DETR使用二分图匹配来计算端到端的几何损失,匹配的唯一性,也进一步限制了重复的预测结果。
  和其他的集合集合预测方法对比,DETR的主要区别就在于使用了二分图匹配损失以及平行解码的transformer结构。之前的集合预测方法一般使用RNNs模型做自回归预测。

论文方法

  由于transformer的decoder结构其输入输出维度保持不变,故当输入序列长度为 N N N,我们也能得到序列长度为 N N N的固定长度输出。本文DETR的输入序列命名为 object quires,是一组基于学习得来的参数,可视化如下 7 7 7所示。

损失计算

  集合预测的训练难点在于如何结合GT来给预测目标打分。本文的损失计算策略先用二分图匹配方法,再对有目标(匹配成功)的bboxes计算损失

  将目标集合 y y y扩展到长度 N N N,不足长度的部分用 ∅ \varnothing 表示,意为无目标。预测集合 y ^ \hat{y} y^和GT集合 y y y的匹配,是寻找两个集合匹配的最低消耗,如公式 ( 1 ) (1) (1),其中 σ ( i ) \sigma(i) σ(i)是预测集合第 i i i个。
σ ^ = arg min σ ∈ G N ∑ i N L match ( y i , y ^ i ) (1) \hat{\sigma}=\mathop{\text{arg min}} \limits_{\sigma\in\mathscr{G}_N}\sum_i^N\mathcal{L}_{\text{match}}(y_i, \hat{y}_i)\tag{1} σ^=σGNarg miniNLmatch(yi,y^i)(1)

  匈牙利算法(Hungarian algorithm)是这个最佳匹配的一个较优解法。匹配消耗考虑类别预测和边框预测的综合损失。考虑第 i i i个预测的类别 c i c_i ci的预测概率为 p ^ σ ( i ) ( c i ) \hat{p}_{\sigma(i)}(c_i) p^σ(i)(ci),则对应的匹配损失为: L match ( y i , y ^ i ) = − I { c ≠ ∅ } p ^ σ ( i ) ( c i ) + I { c ≠ ∅ } L box ( b i , b ^ σ ( i ) ) \mathcal{L}_{\text{match}(y_i,\hat{y}_i)}=-\mathbb{I}_{\{c\neq \varnothing\}}\hat{p}_{\sigma(i)}(c_i)+\mathbb{I}_{\{c\neq\varnothing\}}\mathcal{L}_{\text{box}}(b_i,\hat{b}_{\sigma(i)}) Lmatch(yi,y^i)=I{c=}p^σ(i)(ci)+I{c=}Lbox(bi,b^σ(i))

  在使用匈牙利算法寻找到最佳匹配之后,我们定义的匈牙利损失如公式 ( 2 ) (2) (2)所示:其中 σ ^ \hat{\sigma} σ^在计算优化损失的第一步已经有了确定赋值;为类别平衡,当 c i = ∅ c_i=\varnothing ci=时,类别权重下降 10 10 10
L Hungarian ( y , y ^ ) = ∑ i = 1 N [ − log  p ^ σ ( i ) ( c i ) + I { c ≠ ∅ } L box ( b i , b ^ σ ^ ( i ) ) ] (3) \mathcal{L}_\text{Hungarian}(y,\hat{y})=\sum \limits_{i=1}^N[-\text{log }\hat{p}_{\sigma(i)}(c_i)+\mathbb{I}_{\{c\neq\varnothing\}} \mathcal{L}_\text{box}(b_i,\hat{b}_{\hat{\sigma}}(i))]\tag{3} LHungarian(y,y^)=i=1N[log p^σ(i)(ci)+I{c=}Lbox(bi,b^σ^(i))](3)

  一般类别损失会使用log空间。但作者发现不用log空间时,分类损失和定位损失的值域相近,训练结果会更好一点。故后面使用 p ^ σ ( i ) ( c i ) \hat{p}_{\sigma(i)}(c_i) p^σ(i)(ci),而不是log概率。

  当预测的集合和GT的空集 ∅ \varnothing 进行匹配时,其匹配消耗不依赖于预测,消耗为一个常数。

  对于边框定位损失,在当时使用的是 L 1 \mathcal{L}1 L1损失,后面采用IoU损失。作者选择了 L 1 \mathcal{L}1 L1损失和IoU损失的结合。

模型架构

  DETR的架构整体如下图2所示:经过decoder的处理后,使用FFN(feed forward network)做最终预测(类别和边框)。

  DETR的CNN backbone,下采样倍数为 32 32 32倍,输出channel为 2048 2048 2048。对于应用于实时目标检测的transformer来说,这个channel还是比较大的,作者选择使用 Conv 1 × 1 \text{Conv}1\times1 Conv1×1压缩channel到 d d d,默认为256。将特征图 H 32 × W 32 × d \frac H{32}\times \frac W{32} \times d 32H×32W×d展开后( d × H W d\times HW d×HW)放入encoder中。位置编码是基于学习的。
  文中默认配置为encoder有 6 6 6个,decoder有 6 6 6个,multi-attention的head有 8 8 8个,hidden dim为 256 256 256

  encoder和decoder是标准的transformer结构,不同的地方在于decoder是并行解码 N N N个目标,而《Attention is all you need》中的transformer-decoder是自回归结构,同一时间只能预测输出序列的一个元素。
  decoder的input embeddings必须不同来产生不同结果。这个input embeddings在DETR是学习来的,本文叫做object queires。COCO中学习到的object queries如下图7所示,每个输入都检测一部分框。

  FFNs,本文采用的是 3 3 3层感知机 + ReLU激活函数 + 线性映射层。预测定位的结果是正则化的中心坐标以及框的宽高。分类的预测是使用Softmax函数处理,其中加一个特殊类 ∅ \varnothing 来表示无目标。

  在训练中,DETR中每个transformer-decoder都添加一个辅助监督,所有预测分支的FFNs共享权重。添加一个额外的layer-norm,在每个decoder层FFNs的输入上应用。

  DETR的pytorch实现如下图所示;

论文实验

训练相关参数和策略

  训练数据集为COCO2017,训练集中平均每张图 7 7 7个实例,最多一张图为 63 63 63个实例。所以,在COCO上,DETR使用的 N = 100 N=100 N=100是完全足够的。

  DETR使用AdamW优化器,transformer的初始 l r lr lr 1 0 − 4 10^{-4} 104,backbone的初始 l r lr lr 1 0 − 5 10^{-5} 105,这是因为backbone是使用ImageNet预训练的。transformer权重使用Xavier初始化。
  DETR使用的两个backbone为ResNet-50和ResNet-101,对应的检测器模型为DETRDETR-101。像《Fully convolutional instance-aware semantic segmentation》一样,在backbone的最后一个stge上增加dilation作用。同时在该stage的第一个Conv上移除stride的作用,以增加分辨率。以此策略对应的模型为DETR-DC5DETR-DC5-R101Dilated C5 stage。该参数让分辨率扩大 2 2 2倍,因此改善了小目标的性能。推理消耗为 16 16 16倍的encoder(self-attention),整体消耗为 2 2 2倍计算消耗。

  增强策略上,使用尺度增强(短边最少 480 480 480最多 800 800 800,长边最高 1333 1333 1333)。为帮助transformer-encoder的self-attention学习全局关系,作者使用随机裁剪增强,这带来了将近 1 1 1AP的提升。使用dropout增强策略,概率为0.1

  在推理时,有的slots会预测空类 ∅ \varnothing 。为了优化AP,这些slots用第二高的类别及其分数。这种操作带来了2个AP的改善。

  消融实验,训练 300 300 300个epoch,在 200 200 200epoch时学习率下降 10 10 10倍。baseline模型在 16 16 16个V100 GPUs上训练 300 300 300个epoch,耗时 3 3 3天,每个GPU 4 4 4张图,故batchSize为 64 64 64
  与Faster RCNN相比,更长训练策略为 500 500 500个epoch, 400 400 400个epoch后下降学习率。 500 500 500个epcoh相比 300 300 300个epoch,能带来 1.5 1.5 1.5AP的提升。

  其他参数: λ L 1 = 5 \lambda_{L1}=5 λL1=5 λ i o u = 2 \lambda_{iou}=2 λiou=2。Faster-RCNN+的边框回归损失使用GioU loss和L1的结合。

对比实验

  DTER和Faster RCNN的对比实验如下表所示:

  DETR中transformer-encoder层数的消融实验:encoder层数越高,AP越高。作者选择了 6 6 6。如果没有encoder,会降低 3.9 3.9 3.9AP,大目标降低 6.0 6.0 6.0AP,说明encoder还是重要的。

  encoder的可视化(encoder最后一层的attention maps)看图像中的一些点。可以看出其中貌似已经完成实例分割了,可以在decoder简单地进行目标提取和定位。

  在decoder中每层增加FFN来预测,见下图:每加一层decoder,AP和AP50都会上升。只有一个decoder层的解码能力比较多,容易产生多余的输出。随着decoder层数上升,NMS的作用下降。

  decoder的attention可视化如下图所示,不同颜色表示不同预测目标的attention maps。可看出,decoder的注意力是比较局部的,它主要关注的是物体的四肢、头脚等。作者假设,encoder使用全局attention分离实例,而decoder仅需要关注端点以提取类和对象边界

  DETR有两种pos embeddings:(1)空间位置编码;(2)输出位置编码(object queries)。下表实验了一些组合:固定编码和可学习编码。输出位置编码是必要的,且不可移除的。

  边框定位损失的消融实验: λ L 1 = 5 \lambda_{L1}=5 λL1=5 λ i o u = 2 \lambda_{iou}=2 λiou=2的组合下,GIoU损失和L1损失的结合是最佳的。

  每个边框预测是其中的一个点。绿色是小框,蓝色是大的竖向的框,红色是大的横向的框。可以发现20个slots都有一条红的竖线在中间,应该是COCO数据集的实例表现问题。

  训练集中同一张图像没有那么多实例的类别,在预测时也能有比较好的泛化。比如长劲鹿的图像,在COCO中最多一张图像13个实例,作者生成了个24实例的图像,也能准确预测。

end-to-end object detection with transformers》是关于使用transformers进行端到端目标检测的一篇参考文献。目标检测是计算机视觉领域的一个重要任务,旨在从图像或视频中识别和定位出物体的位置与类别。传统的目标检测方法通常将这一任务分为两个步骤,即生成候选区域和对这些候选区域进行分类。然而,这种两步骤的方法存在一定的缺点,如效率低、需要手动选择参数等。 这篇参考文献中提出了一种端到端的目标检测方法,使用transformers模型来直接进行物体检测任务。transformers是一种基于自注意力机制的神经网络模型,在自然语言处理领域已经取得了很大的成功。借鉴transformers的思想,文中提出了一种新的目标检测方法,称为DETR(Detection Transformer)。 DETR模型采用了一个编码器-解码器架构,其中编码器是一个transformers模型,用于对输入图像进行特征提取。解码器则是一种由全连接层和多层感知机组成的结构,用于预测目标的位置和类别。与传统的两步骤方法不同,DETR模型通过将目标检测转化为一个集合问题,并使用transformers模型进行集合元素之间的关联和特征提取。通过在训练过程中引入损失函数,模型可以学习到物体的位置和类别信息。 该文献通过在COCO数据集上进行实验证明了DETR模型的有效性,并与传统的目标检测方法进行了比较。实验结果表明,DETR模型在准确性和效率上都有显著的提升。此外,DETR模型还具有良好的扩展性,可以应用于不同大小和类型的目标检测任务。 综上所述,《end-to-end object detection with transformers》这篇参考文献介绍了一种基于transformers的端到端目标检测方法,并通过实验证明了其有效性和优越性。该方法的提出为目标检测领域的研究和应用带来了新的思路和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值