【ECCV2020】End-to-End Object Detection with Transformers论文解读

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、研究背景
  • 二、研究成果
    • 1.DETR architecture
    • 2.loss function
  • 总结


前言

`
本文对ECCV2020论文《End-to-End Object Detection with Transformers》进行解读。

一、研究背景

目标检测的任务是要去预测一系列的Bounding Box的归一化坐标值以及物体的Class Label,本篇论文将其看做输出无序集合。而现代大多数检测器通过定义一些proposal,anchor或者windows,将问题转化成一个分类和回归问题来间接的完成这个任务。它们的表现在很大程度上受到后处理步骤中叠加相似预测框的策略、anchor集合的的设计结构、将目标框分配给anchors的启发式算法性能的影响,并且最终的模型结构往往十分复杂。
本文首创将以往应用于NLP任务中居多的能够处理长距离依赖问题的Transformer应用于计算机视觉领域中的目标检测问题,取代了现在的模型需要的手工设计的工作,大大简化了模型的复杂程度,并且取得了不错的结果。作者提出了一种主要包含CNN与Transformer的简单模型DETR,能够一次性预测出N个目标类别与边框(N是一个远大于待预测目标数量的数,为此DETR设置了一个no object类,与多余的预测值做匹配)并通过一种新的bipartite matching loss function进行端到端的训练。这是通过CNN对图像特征的提取作用以及Transformer中self-attention机制能够显式地对任意一个序列中任意两个元素(NLP中则是两个单词)之间的相互作用进行建模实现的。而关于图像如何变成类似NLP中的单词序列以及transformer为何适合进行目标检测任务,我认为可以先如下做一个简单认知:用CNN提取特征,把特征图的H与W折叠,然后就可以把特征图中的每个点都看做是一个word,这样特征图就变成了a sequence words,而检测的输出恰好又是一个目标的集合,符合transformer的工作原理,因此可以用transformer完成目标检测任务。DETR的训练流程如图1所示。
【ECCV2020】End-to-End Object Detection with Transformers论文解读_第1张图片

图1 DEtector TRansformer(DETR)模型通过结合CNN与transformer 结构并行预测出N个最终的预测目标集合,而不是像原始Transformer中采用auto-regressive的方法,将前一个时刻的输出作为下一个时刻的输入从左往右一个一个词预测。在训练过程中,bipartite matching会为每一个预测框唯一地分配ground truth boxes并计算全局损失。没有匹配的预测对应到预先设置好的“no object” (∅)类中

二、研究成果

该模型主要有两个关键的成果:第一个是基于transformer的encoder-decoder架构设计了一种architecture对特征图中所有元素之间的相互关系进行建模的同时一次性并行生成N个box prediction,这是对原始的transformer中decoder部分一时刻只产生一个token,一个一个预测单词导致的推理、计算成本高昂(与输出长度成正比,且需要经过padding的预处理才能分批次训练)的改进;第二个是设计了bipartite matching loss,基于预测的boxes和ground truth boxex的二分图匹配计算loss的大小,从而使得预测的box的位置和类别更接近与ground truth并且由于二分图匹配的特性,box会唯一分配且不重复。

1.DETR architecture

DETR的整体结构十分简单,共包括三个主要部分,分别为一个提取图像特征的CNN backbone、使用encoder-decoder架构的transformer以及feed fordward network(FFN)如图2所示。下面分别解释这四个部分。
【ECCV2020】End-to-End Object Detection with Transformers论文解读_第2张图片

图2 DETR使用传统的CNN backbone(ResBet-50等)获得输入图像的2维特征表达。之后将其展平并且在与二维位置编码相加后作为encoder端的输入。decoder端的输入由两部分组成,一部分为encoder端得到的编码信息,另一部分为固定数量(远大于图像中待预测目标数量)的可习得的位置编码信息,文章中称作object queries。最后把decoder端的输出送入共享参数的FFN,以此来预测目标类别同时对边框进行标注,预测的目标类别可能会是一开始设定的“no object”类。
CNN Backbone。输入为一张原始图像x_img ϵ R^(3* H0* W0)^,并通过传统的CNN主干生成低分辨率的特征映射图f ϵ R^(C* H* W)^。论文作者使用的典型值为C=2048、H,W=H0/32,W0/32。
Transformer encoder。encoder端的输入是CNN Backbone产生的fϵR^(CHW)维的feature map,并依次进行以下过程。
1.通道数压缩。先用1* 1的卷积核和feature map做卷积,将channels的数量从C压缩到d,得到新的feature map z_0 ϵR^(dHW)。此处d的典型值为256。
2.转化为序列化数据。encoder的输入是一个序列(空间意义上的一个维度),因此我们需要把图像空间的维度(高和宽)压缩为一个维度,即把z_0 ϵR^(dHW)从原先(d,H,W)的维度压缩到(d,H* W)。
3.位置编码(positional encoding)。encoder内部使用标准结构,即multi-head self-attention模块和一个前馈神经网络(FFN)的联接结构。但transformer有一个弊端,论文中表示为permutation-invariant。举例来说,对句子”A打了B”和“B打了A”来说,transformer这个结构本身的效果是相同的,但是两个句子的本意也有很大的差别。因此在encoder中还要输入表示位置编码的信息,且该位置编码还需要能够表达二维空间的信息。得到位置编码后与序列化数据相加即可当做encoder的最终输入。DETR中做positional encoding的方式依然采用sin cos模式,但不是类似vision transformer的做法简单的将其拉伸为d*HW,然后从[1,HW]进行长度为256的位置编码,而是考虑xy方向同时编码,每个方向各编码128维向量,然后拼接。这样得到的与序列化数据的shape相同的位置编码才能与序列化数据相加,同时这种编码方式更符合图像特点。encoder得到最终输入的过程如图3所示。
【ECCV2020】End-to-End Object Detection with Transformers论文解读_第3张图片
图3 原始图像经过特征图映射、通道数压缩、转化为序列化数据等步骤后,与相同维度的位置编码相加得到encoder端的最终输入。
完成上述过程后,对单张图像encoder输出维度为(d,HW)的编码矩阵。
Transformer decoder以及FFN。decoder的输入为encoder输出的编码矩阵、位置编码以及可学习的object queries矩阵。它仍然遵循transformer的标准结构,使用multi-head self-attention模块处理维度为(N,256)维的张量object queries得到N个预测值。但与原始的transformer使用自回归模型一次预测一个元素最终得到预测序列不同的是,DETR并行的解码object queries得到output embedding,维度为(N,256),它们通过FFN独立地预测出box prediction和class label。
1.object queries编码矩阵。object queries是可学习的位置编码,被添加到decoder中每个自注意力层的输入中。该矩阵可以看成有N个不同的人从N个角度向模型提问当前位置是否有目标。在网络中的作用类似于给网络划重点,让网络着重关注这几个部分。图4是20个prediction slots(out of N=100 prediction slots)对coco数据集每张图片预测到的目标框中心点的可视化。
【ECCV2020】End-to-End Object Detection with Transformers论文解读_第4张图片

图4 图中绿色的点对应小目标的框的中心点,红色对应大目标水平方框的中心点,蓝色对应大目标垂直方框的中心点。
由图4可以发现,每个object queries上的slot都学会了在某些区域以及box尺寸上专门的operating mode。而几乎所有的slot都有一种预测大型目标的operating mode,因为大目标在coco数据集中是很常见的。
2.FNN。最终预测是由三层的FFN计算得到的,FFN使用ReLU激活函数。FFN根据decoder的output emdedding得到归一化的预测bounding-box(包括中心坐标、高度和宽度),然后使用softmax函数预测类标签。

2.loss function

二分图匹配损失。经过如上的结构,DETR会给出预测结果的集合,集合中class label、bounding-box对的个数是一开始给定的N且已知的,作者在实验中设定的N是100。但图像中并不会有N个待检测目标。对多余数量的预测,label会标记为“no object”类。在这之后就可以与手工标记的ground truth通过匈牙利算法做bipartite matching,并通过使得loss函数(公式1,该函数仅在配对时使用,跟总体的loss无关,总体的loss有另外的计算公式)值最小的映射(从ground truth中的索引映射到预测序列的索引)方案得到最佳匹配σ ̂:
在这里插入图片描述

在公式1中,我们把第 i个物体的真值表达为y_i=〖(c〗_i,b_i),其中c_i表示它的class,b_i表示它的bounding box;把模型输出的第i个预测值表达为(y_i ) ̂。 σ(i) 表示通过匈牙利算法得到的与ground truth中第i个物体匹配的预测值的索引。例如手工标注的第2个ground truth经过匈牙利算法后与 第10个预测值匹配,则σ(2)=10。公式中的 表示从真值索引到预测值索引映射的所有可能排列。整个公式表示求出使argmin后面所跟公式值最小的映射,也就是最佳匹配σ ̂。
L_match损失函数可以表达为如下形式:
在这里插入图片描述

L_match函数前半部分计算class、后半部分计算bounding-box的损失。公式中m{ci≠∅}表示当大括号中的条件满足时,值为m。p ̂_σ(i) (c_i)表示对第 σ(i)个预测值的label,它是c_i的可能性。b ̂_σ(i) 表示第σ(i)个预测值的bounding-box。L_box的功能为对bounding-box的真值和预测值做误差计算的一个函数,下面会再用到因此之后统一描述。
模型损失。通过以上计算在配对时使用的损失函数,模型可以朝着在保证类别正确的同时,最小化边框的误差的目标的方向迈进。接着我们就要使用配对后得到的最佳匹配σ ̂去计算模型的loss,作者称之为匈牙利损失(LHungarian),如公式2:
在这里插入图片描述

该模型的损失函数跟现在大多数检测器相比,采取了近似的计算方式——是一个负的对数可能性与L_box损失值的线性组合。公式中的σ ̂是已经得到的最佳匹配。其中bounding-box损失部分大致差不多,但在类别判定部分改用了对数,且把“no object”也纳入考虑范围。在我看来,这与之前match时只用二值函数计算损失不同主要出于两点考量:1.match时只要把与真值的类别一致且与真值的bounding-box最接近的预测结果对应上即可,不需要关心“no obect”类。2。但在训练模型时,模型不应该检测出超出ground truth数量的目标,即不能在该预测出“no object”类的时候出现预测出了目标的情况。这种情况在模型中是不鼓励的。
边框损失。下面对计算边框损失的函数L_box做统一解释。前面提到,DETR通过直接预测边框的方式来简化模型,并不是像大多数检测器一样通过与预先的guesses做比对的方式来间接得到预测框,因此会导致相对的损失缩放问题。论文中举了一个例子,如果使用L1损失计算预测框与真实值的loss,对大box和小box来说,即使他们的相对误差相近,得到的loss值会有明显不同。为此L_box采用了L1损失与IoU损失的线性组合,因为IoU损失具有scale-invariant性,它可以表达成如下形式:

在这里插入图片描述
可以看到, L_box损失由IoU损失与L1损失线性组合而成,其中λ_iou与λ_L1是超参数,用来调整IoU损失和预测框的L1损失。


总结

DETR是一种首次将Transformers应用于目标检测任务的简单模型。从简化模型pipeline的角度出发而被设计的DETR通过将常见的CNN与Transformer架构相结合以及把目标检测任务看成set prediction任务的方式,利用Transformer强大的特征提取能力以及不随距离衰减的关系建模能力,做到了并行化预测一个预测值集合。因为DETR模型直接得到预测结果,不将先验知识编码加入模型的特殊性,DETR设计了独特的损失函数用于得到预测值与真实值的最佳匹配——基于匈牙利算法的bipartite matching loss。得到最佳匹配后再计算全局的损失用于训练模型。通过以上模型架构和损失函数的独特构造,使得该模型虽然流程简单,但仍然具有与baseline不相上下的检测精度。这一点已经被论文作者通过大量实验证明。提示:这里对文章进行

ps: 有没有大佬教一下markdown怎么缩进啊!!!

你可能感兴趣的:(计算机视觉)