Transformer 是 Google 团队在 2017 年 6 月提出的 NLP 经典之作,由 Ashish Vaswani 等人在发表的论文《Attention Is All You Need》中提出。自从 Transformer 被提出以来,得益于其强大的注意力机制,便开始在 NLP 领域一统江湖。但令人意外的是,Transformer 在 CV 界却反响平平,一度认为不适合 CV 领域,直到最近计算机视觉领域出来几篇 Transformer 文章,性能直逼 CNN 的 SOTA,给予了计算机视觉领域新的想象空间,Transformer 在计算机视觉领域的范式已经初具雏形。
在计算机视觉领域,目标检测发展迅速,出现了以 R-CNN、Faster R-CNN、Mask RCNN 为代表的 two-stage 网络架构,以及以 YOLO、SSD 为代表的 one-stage 网络架构。如果将在 NLP 领域表现超越的 Transformer 用于目标检测,其效果又如何?现阶段研究者已尝试将 Transformer 用于目标检测任务,填补了 Transformer 用于目标检测的空白。
本文我们将要介绍的是用 Transformer 进行目标检测任务,主要包括以下内容:
- 论文 1:《End-to-End Object Detection with Transformers》,来自 Facebook AI 的研究者推出的 Transformer 视觉版本——Detection Transformer(DETR),可用于目标检测和全景分割。
- 论文 2:《DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION》,来自商汤科技研究院、中国科学技术大学以及香港中文大学的研究者提出了 Deformable DETR,解决了 DETR 收敛慢、计算复杂度高这两大问题。
- 论文 3:《UP-DETR: Unsupervised Pre-training for Object Detection with Transformers》,来自华南理工大学以及腾讯 Wechat AI 的研究者提出了一种称为随机查询 patch 检测的前置任务,以无监督的预训练 DETR(UP-DETR)进行目标检测。
- 论文 4:《End-to-End Object Detection with Adaptive Clustering Transformer》,来自北京大学与香港中文大学的研究者提出了一种新的 transformer 变体:自适应聚类 Transformer(ACT),解决了 DETR 需要大量的计算资源来进行训练和推理的计算成本。
论文 1:End-to-End Object Detection with Transformers
由于 Transformer 广泛应用于序列数据的处理任务,尤其是在语言建模、机器翻译等任务中表现出良好的性能,那么在 NLP 领域表现良好的模型是否可以用到视觉领域?来自 Facebook AI 的研究者实现了这一功能。
Facebook AI 的研究者把 Transformer 用到了目标检测任务中,还取得了媲美 Faster R-CNN 的效果。该研究推出的 Transformer 视觉版本——Detection Transformer(DETR),可用于目标检测和全景分割。与之前的目标检测相比,DETR 的架构有了根本上的改变,也是第一个将 Transformer 成功整合为检测 pipeline 中心构建块的目标检测框架。基于 Transformer 的端到端目标检测,没有 NMS 后处理步骤、真正的没有 anchor,且对标超越 Faster R-CNN。
算法实现:处理目标检测任务的全新架构
DETR 通过将常见的 CNN 与 Transformer 架构相结合,直接(并行)预测最终的检测结果。在训练阶段,二分匹配将唯一的预测分配给 GT 框。不匹配的预测产生无目标(∅)类预测。
DETR 的工作流程可以归为以下步骤:Backbone -> Transformer -> detect header。
将 DETR 的结构具体化,如下图所示:
DETR 使用常规的 CNN 主干来学习输入图像的 2D 表示。模型将其展平并传递到 transformer 编码器之前进行位置编码补充。然后,transformer 解码器将少量固定数量的位置嵌入作为输入,称为目标查询,并另外参与编码器的输出。将解码器的每个输出嵌入传递到预测检测(类和边界框)或无目标类的共享前馈网络(FFN)。
更为具体的 DETR 架构如下:
上图给出了 DETR 中使用 transformer 的详细说明,并在每个注意力层传递了位置编码。来自 CNN 主干的图像特征通过了 transformer 编码器,并将空间位置编码与添加到查询和键处的空间编码一起传递。然后,解码器接收查询(最初设置为零),输出位置编码(目标查询)和编码器内存,并通过多个多头自注意力和解码器 - 编码器注意力来生成最终的一组预测类标签和边界框。此外可以跳过第一解码器层中的第一自注意力层。
虽然 DETR 性能良好,但其自身也存在着如下两个问题:
- 与现有的目标检测器相比,它需要更长的训练轮数才能收敛。比如,在 COCO 基准上,DETR 需要 500 个 epoch 才能收敛,这比 Faster R-CNN 慢了 10 到 20 倍;
- DETR 在检测小物体上性能较差。当今的目标检测器通常利用了多尺度的特征,从而小物体可以从高分辨率的特征图中检测。但是对于 DETR 来说,高分辨率的特征图将带来不可接受的计算复杂度和内存复杂度。
论文 2:DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION
今年 5 月底,Facebook AI 提出了 DETR(论文 1),利用 Transformer 去做目标检测,该方法去除了许多目标检测中的人工设计组件,同时展现了非常好的性能。但是,DETR 存在收敛速度慢和特征分辨率有限、训练时间慢等缺陷。为了解决这些问题,来自商汤研究院、中科大和港中文的研究者提出了 Deformable DETR,解决了 DETR 收敛慢、计算复杂度高这两大问题。其注意力模块仅关注于参考点附近的一小部分采样点作为注意力模块中的 key 元素。Deformable DETR 可以在比 DETR 少 9/10 的训练轮数下,达到更好的性能(尤其是在小物体上),在 COCO 基准上的大量实验验证了该方法的有效性。
Deformable DETR 提出的可形变注意力可以缓解 DETR 收敛速度慢和复杂度高的问题,同时结合了可形变卷积的稀疏空间采样能力和 transformer 的关系建模能力。可形变注意力可以考虑小的采样位置集作为一个 pre-filter 突出所有特征图的关键特征,并且可以自然地扩展到融合多尺度特征,这样多尺度可形变注意力本身就可以在多尺度特征图之间进行交换信息,不需要 FPN 操作。
论文地址:https://arxiv.org/pdf/2010.04159.pdf
Deformable DETR 方法和模型解读
Deformable DETR 结合了可形变卷积中的稀疏空间采样的优势以及 Transformer 中的关系建模能力。研究者提出了可形变注意力模块(如下公式(2)所示),它关注一小部分采样的位置,作为从特征图所有像素中预先筛选出显著的 key 元素。
这一模块可以被扩展到聚合多尺度特征上(如下公式(3)所示),而不需要 FPN。
Deformable DETR 将 DETR 中的 attention 替换成 Deformable Attention,使 DETR 范式的检测器更加高效,收敛速度提升 10 倍,如下图所示:
由于 Deformable DETR 的快速收敛性和计算内存高效性,它打开了探索端到端目标检测器变种的可能。此外,研究者探索了一个简单而有效的迭代式物体边界框细化机制来进一步提高检测性能。同时也尝试了 two-stage 网络架构的 Deformable DETR,其中第一阶段的 region proposals 也是由 Deformable DETR 的一个变种生成,然后进一步被输入到解码器进行迭代式物体边界框细化。
论文 3:UP-DETR: Unsupervised Pre-training for Object Detection with Transformers
受预训练 transformer 在 NLP 任务中巨大成功的启发,来自华南理工大学以及腾讯 Wechat AI 的研究者提出了一种被称为随机查询 patch 检测的前置任务,以无监督预训练 DETR(UP-DETR)进行目标检测。特别地,研究者从给定的图像中随机裁剪 patches,然后将裁剪 patches 作为查询提供给解码器。
该模型经过预训练可以从原始图像中检测出这些查询 patches。预训练期间需要解决两个关键问题:多任务学习和多查询定位。一方面,为了在前置任务中权衡分类和定位的多任务学习,该研究冻结了 CNN 主干,并提出了一个与 patch 检测联合优化的 patch 特征重构分支。另一方面,为了执行多查询定位,该研究从单查询 patch 引入了 UP-DETR,并将其扩展到具有目标查询 shuffle 和注意力掩码的多查询 patch 。在实验中,UP-DETR 在 PASCAL VOC 和 COCO 数据集上以更快的收敛速度和更高的准确率显著提高了 DETR 的性能。
在预训练过程中,研究者主要解决以下两个关键问题:
- 多任务学习:目标检测是目标分类和定位的耦合。为了避免查询 patch 检测破坏分类特征,研究者引入冻结的预训练主干和 patch 特征重构来保持 transformer 的特征识别;
- 多查询定位:不同的目标查询聚焦于不同的位置区域和检测框大小。为了说明这一性质,研究者提出了简单的单查询预训练,并将其扩展到多查询版本。对于多查询 patches,研究者设计了目标查询 shuffle 和注意掩码,解决了查询 patches 和目标查询之间的分配问题。
论文地址:https://arxiv.org/pdf/2011.09094.pdf
算法介绍
UP-DETR 包括预训练与微调过程:在没有任何人工标注的大型数据集上对 transformer 进行了无监督的预训练;使用与下游任务原始 DETR 相同的标记数据对整个模型进行微调。
如上图 2 所示,随机查询 patch 检测是简单而有效的。首先,利用冻结的 CNN 主干提取输入图像的特征映射 f∈R^C×H×W,其中 C 为通道维数,H×W 为特征映射大小。然后,在 DETR 中将特征映射与位置编码相结合并传递给多层 transformer 编码器。对于随机裁剪的查询 patch,采用全局平均池化(GAP)的 CNN 主干网提取出 patch 特征 p∈R^C,并对其进行扁平化处理,并辅以目标查询 q∈R^C,然后将其传递给 transformer 解码器。注意,查询 patch 是指从原始图像中裁剪出来的 patch,而目标查询是指位置嵌入,并将其传递给解码器。CNN 参数在整个模型中是共享的。
单查询 Patch:DETR 为每个目标查询学习不同的空间专有化(spatial specialization),这表明不同的目标查询关注不同的位置区域和边框大小。当从图像中随机裁剪 patch 时,没有任何关于查询 patch 的位置区域和边框大小的先验信息。为了保持不同的空间专有化,该研究显式地为所有目标查询(N=3)指定单个查询块(M=1),如上图 2(a)所示。
图 2b 示出了具有注意力掩码和目标查询 shuffle 的多查询 patches 的预训练。为了提高泛化能力,研究人员在预训练期间随机地将 10% 的查询 patche 掩码为零,这类似于 dropout 方法。在实验中,两个典型值被设置为 N=100 和 M=10。
论文 4:End-to-End Object Detection with Adaptive Clustering Transformer
使用 Transformer 进行端到端的目标检测(DETR),可以达到与 two-stage 网络架构(如 Faster R-CNN)相媲美的性能。然而,由于高分辨率的空间输入,DETR 需要大量的计算资源来进行训练和推理。
为了降低高分辨率输入的计算成本,来自北京大学与香港中文大学的研究者提出了一种新的 transformer 变体:自适应聚类 Transformer(Adaptive Clustering Transformer, ACT)。ACT 使用局部敏感哈希(LSH)自适应地对查询特征进行聚类,并利用 prototype-key 交互近似 query-key 交互。ACT 可以将自注意力内部的二次 O(N^2)复杂度降低为 O(NK),其中 K 是每层原型的数量。在不影响预训练 DETR 模型性能的前提下,ACT 可以替代 DETR 中原有的自注意模块。ACT 在准确率和计算成本(FLOPs)之间实现了很好的平衡。
论文地址:https://arxiv.org/pdf/2011.09315.pdf
该研究的主要贡献如下:
- 提出了一种新的自适应聚类 Transformer(ACT)方法,可以降低 DETR 的推理成本。ACT 旨在使用轻量级 LSH 从查询中选择具有代表性的原型,然后将所选原型的特征更新传递到最近的查询中。ACT 可以降低原始 transformer 的二次复杂度,同时与原始 transformer 完全兼容;
- 在不经过任何训练的情况下,该研究将 DETR 中的 FLOPS 从 73.4 Gflops 减少到 58.2 Gflops(排除主干 Resnet FLOPs),而 AP 中损失仅为 0.7%;
- 通过多任务知识蒸馏 (MTKD) 将 AP 中损失降低到 0.2%,从而实现了 ACT 和原始 transform 之间的无缝转换。
算法介绍
下图 3 展示了 DETR 的三个阶段。在编码器中,使用 ImageNet 预训练的 ResNet 模型从输入图像中提取 2D 特征。位置编码模块使用不同频率的正弦和余弦函数对空间信息进行编码。DETR 将 2D 特性扁平化,用位置编码进行补充,并传递给 6 层 transformer 编码器。编码器的每一层结构相同,包括 8 头自注意力模块和 FFN 模块。然后解码器将少量固定数量的学习位置嵌入作为输入,这些嵌入被称为目标查询,并额外关注编码器输出。解码器同样有 6 层,每一层包含 8 头自注意力模块和 8 头共同注意力模块,以及 FFN 模块。最后,DETR 将解码器的每个输出传递给共享的前馈网络,该网络预测检测 (类和边框) 或无目标类。
参考链接:https://blog.csdn.net/irving512/article/details/109713148https://jishuin.proginn.com/p/763bfbd2ee77
一场属于蓉城的“鲜香”盛宴,DevRun开发者沙龙邀您开启“麻辣”开发之旅行至西南,遇见成都。12月12日,DevRun开发者沙龙华为云成都专场将带你逐一解锁:AI开发与云原生DevOps的进阶之旅、华为云技术专家面对面的教学指导、技术瓶颈突破与核心效能提升的关键要义以及拥抱变革与自我进阶的最佳姿势。精彩不容错过!识别二维码,立即报名。
© THE END
转载请联系本公众号获得授权
投稿或寻求报道:content@jiqizhixin.com