【论文阅读笔记】End-to-End Object Detection with Transformers
代码地址:https://github.com/facebookresearch/detr
论文小结
本文探讨了将Transformer结构成功应用于目标检测(OD)任务的研究工作。该研究发表于2020年,并以其创新性在该领域奠定了重要基础。
DETR的模型架构设计采用了融合Transformer结构 ,具体而言即由CNN与Transformer两种模块组成的混合架构。
与YOLO系列基于网格实现的位置与类别预测不同,在DETR中经过变换器解码器输出的是一个序列集。因为OD任务不需要自回归推理过程的存在,因此解码器能够同时并行计算多个检测框。
Transformer模块输出的是序列集合,在目标检测任务中所期望的最终结果也是一个边界集合。因此DETR直接预测了结果即OD任务在此直接转化为集合预测问题 。在匹配损失这一关键指标下表现出独特性因而,在经过合理设计的Loss函数优化后,DETR算法能够实现对目标边界框的精准预测而不需依赖NMS这一传统步骤。且无需依赖先验知识框架下的偏差校正机制整个DETR算法架构实现了完全端到端的学习与推理过程。
文中DETR采用的是Faster RCNN这一算法,在一篇发布于2015年的论文中提出。与之相比,在检测精度上两者的表现相当接近;然而,在较大目标检测方面优势并不明显,在较大尺寸的目标识别上两者的性能差异较为显著;最终所得的mAP值变化也并未出现较大的波动。随后又有研究者针对transformer在小目标检测中的精度问题进行了改进

论文简介
现有主流检测算法
DETR架构图如图1所示。其组件transformer-encoder负责序列元素间的两两交互,在这种全局交互的基础上实现特定约束条件下的集合预测功能,并且能够通过消除冗余预测结果来优化模型性能。
论文方法
因为transformer的decoder结构维持了输入输出维度的一致性,在这种架构下当我们将输入序列设定为长度N时
损失计算
集合预测的训练难点在于如何将预测结果与ground truth进行关联配对。本文提出了一种新的损失计算策略:即通过二分图匹配方法,在预测框与ground truth框存在匹配关系的情况下进行损失计算。
为了使目标集合 y 的长度达到 N, 在缺少元素的情况下我们采用 \varnothing 进行标记, 其含义为无对应元素。在预测与真实的目标匹配过程中, 我们寻求两组元素之间最经济的配对方式, 如式(1)所示, 其中 \sigma(i) 表示预测序列中的第 i 个元素。
该匈牙利算法(Hungarian algorithm)作为最佳匹配方案提供了一个有效的解决方案。在计算匹配成本时,我们综合考虑了类别预测与边界框预测之间的关系。对于第i个预测样本的类别c_i而言,在计算其概率时采用的是\hat{p}_{σ(i)}(c_i)这一指标,从而得出了相应的概率估计值。则该匹配损失的具体计算公式如下:
在匈牙利算法计算出最佳匹配结果后** ,我们所定义的匈牙利损失如公式(2)所示:其中\hat{\sigma}已经在优化损失的第一步中被赋予了确定值;为了实现类别的平衡,在c_i为空集的情况下** ,类别权重将降低10倍:
\mathcal{L}_\text{Hungarian}(y,\hat{y})=\sum \limits_{i=1}^N[-\ln \hat{p}_{\sigma(i)}(c_i)+\mathbb{I}_{\{\exists c_i}} \mathcal{L}_\textbf{box}(b_i,\hat{b}_{\hat{\sigma}}(i))]\tag{3}
通常类别损失会采用log空间。然而,在不用这种对数空间的情况下进行测试后发现,分类损失与定位损失的值域范围大致相当。因此,在后续的实验中我们采用了\hat{p}_{\sigma(i)}(c_i)而非基于对数的概率。
当在预测集合与GT空集\varnothing之间建立匹配时, 其匹配消耗与预测无关
在将预测集合与GT空集\varnothing进行匹配时, 该过程的消耗不受预测的影响
当在两个集合(即预处理结果)之间配对, 其中一个是空集的时候
在处理边界框定位问题时,在当时所采用的是\mathcal{L}1损失函数;后来研究者采用了IoU损失函数作为替代方案。研究者选择了将这两种方法进行融合以提高模型性能。
模型架构
DETR的整体架构如图2所示:经过decoder进行处理后,通过FFN(feed forward network)进行最终预测(类别以及边界框)。

DETR采用了基于卷积神经网络(CNN)设计的backbone网络架构,在图像下采样方面采用了32倍因子的设计方案,并输出了规模达2048通道的数据特征图。针对适用于实时目标检测任务的应用场景,在此情况下该通道数量仍然较大。研究者通过自适应压缩操作将通道数量减少至d=256(其中d通常取值为256)。具体而言,在特征图\frac H{32}×\frac W{32}×d被展平后(即转换为d×HW维度的数据)输入到编码器模块中进行处理。为了提高编码效率和空间分辨率保留能力,在位置编码环节上采用了学习式的位置编码策略。在本研究中,默认设置包括编码器与解码器各有6个模块、多头自注意力机制共8个头以及隐藏维度设定为256。
Encoder和Decoder均为基于Transformer架构的标准组件,在具体实现上存在差异:Decoder可进行并行处理多个目标(即解码N个目标),而《Attention is all you need》中的Transformer-Decoder采用自注意力机制,在每次迭代时仅能生成输出序列中的一个元素。此外,在设计过程中要求Decoder中输入嵌入的设计需确保输出结果具有差异性(即不同的输入嵌入需产生不同的输出结果)。其中,在DETR模型中这一要求得以实现:其将输入嵌入被称为object queries(如图7所示)。通过COCO数据集训练得到的目标查询向量如图7所示,并且每个输入都对应检测若干个框。
本文主要采用了三层前馈神经网络(FFNs)架构,并结合了ReLU激活函数模块和线性变换层。该模型在预测定位任务中的输出结果包括经过L2正则化的位置坐标和框宽高的信息。对于分类任务的预测结果,则采用了Softmax概率分布方法,并特别设置了空类别(用符号∅表示)来标记无目标情况。

在训练过程中,DETR架构中的每一个transformer-decoder模块都会附带引入一个辅助监督机制;此外,在所有预测分支所对应的前馈神经网络(FFNs)之间设置了共享权重参数机制;为了进一步提升模型性能,在每个解码器层的前馈神经网络输入端增加一个额外的归一化层。
DETR的pytorch实现如下图所示;

论文实验
训练相关参数和策略
基于COCO2017的数据集,在该基准测试中,
每幅图平均包含约7个实例,
其中存在单幅图像包含多达63个实例的情况。
值得注意的是,在该基准测试中,
DETR使用的参数数量N=100足以应对所有场景。
采用AdamW优化器进行参数更新,
其变换层网络参数起始学习率为 1\times 10^{-4},
而基干网络的学习率设置为 3\times 10^{-5},
这一设定源于基干网络基于ImageNet进行预训练后作为基础网络。
此外,
其变换层权重初始化采用了Xavier均匀分布方法以确保良好的收敛性。
基于不同分辨率设计的两个基干网络分别为ResNet-50和ResNet-101,
分别对应开发出的两种检测器架构:Detr和Detr-CTPN。
像《Fully convolutional instance-aware semantic segmentation》一文中所述,
在backbone最后一个stage上增加了dilation作用,
并移除了该stage第一个Conv层中的stride操作,
从而实现了对特征图空间分辨率的有效提升。
通过这种设计策略使得各特征图的空间分辨率提高了一倍。
在推理过程中,
其依赖于一个放大了十六倍的标准解码过程,
整体计算资源消耗则较之标准架构增加了约一倍。
针对增强策略上
在推理过程中,在某些情况下(即)推断出空类\varnothing。为了优化准确率(记为AP),这些特定槽位被赋予了次高的类别及其对应的分数来替代原本预测为空类的情况。这一操作导致了两个单位的AP提升。
消融实验方面,在200轮 epoch时实施学习率优化策略,并在该阶段将学习率降低至当前值的十分之一。基于16块V100 GPU并行训练300轮 epoch的数据集构建过程中耗时约3天时间。每个GPU配置处理4张图像批次数据,在此基础下设置批量大小为64(即每块GPU处理4张图像)。
在检测精度方面,在Faster RCNN的基础上采用了较长的学习策略运行500轮 epoch,在该基础上可提升约1.5个AP(平均精度)。具体而言,在300轮 epoch的基础上可提升约1.5个AP(平均精度)。
其他参数设置为\lambda_{L1}=5和\lambda_{iou}=2。Faster-RCNN+采用GioU loss与L1损失相结合的方式进行边界回归。
对比实验
DTER和Faster RCNN的对比实验如下表所示:

DETR中关于transformer-encoder层数的影响研究表明:随着Encoder层数的增长,平均精度(AP)也会提升。具体而言,作者采用了6层的设计方案,这一选择基于以下考虑:若缺少Encoder层,将导致约3.9%的性能下降;而针对大规模目标的任务,则会损失约6.0%的效果提升。”

在观察 encoder 的可视化效果(关注其最后一层注意力机制的表现)时,在图像特征中可以看到似乎已经初步实现了实例分割的效果,在观察图像特征时可以通过简单的模块实现提取目标并实现定位功能

在解码器中每一层添加 FFN 用于预测(见图)。如图所示:每当添加一层 decoder 时 AP 和 AP50 都会提升数值表现。单个 decoder 层具备较强的解码能力但可能导致过多的输出(见下图)。随着 decoder 层数的增加 NMS 的作用逐渐减弱

decoder的attention可视化结果如下图所示, 通过颜色区分展示了不同预测目标对应的attention maps. 从图表中可以看出, decoder的关注范围相对局限, 主要聚焦于物体的关键部位如四肢和头脚等部位. 研究者假设, 编码器采用了全局注意力机制用于区分各个实例, 而解码器只需聚焦于关键点以提取类别与对象的边界信息

DETR分为两种位置编码方案:第一种是基于空间的位置编码方法;第二种则是基于物体查询的输出位置编码策略。通过实验对比分析了固定位置编码与可学习位置编码的效果,并验证了后者的必要性与重要性。研究表明,在模型性能中去除输出位置编码会导致显著下降。

边框定位损失的消解实验:在该参数设置下(\lambda_{L1}=5及\lambda_{iou}=2),GIoU损失与L1损失的融合效果最为显著。

每个边框预测都是一个独立存在的点。观察到绿色的小方块、蓝色的大垂直矩形以及红色的大水平线条。进一步分析发现,在这20个slots中每一个都有一个明显的垂直线条位于中央位置,这可能与COCO数据集中的实例标注有关。

在训练集中同一图像所含同类别的实例数量较少的情况下,在预测阶段仍能展现出良好的泛化能力。例如,在COCO数据集里一张图片最多有13个长颈鹿实例,请问您是想了解什么?经作者人工合成后得到一张包含24个长颈鹿实例的新图片,并且该新图片也能准确地被模型进行预测。

