DETR 论文解读

摘要

我们提出了一种将目标检测视为直接集合预测问题的新方法。我们的方法简化了检测管道,有效地去除了许多手工设计的组件,如非最大抑制程序或锚点生成,这些组件显式地编码了我们对任务的先验知识。该框架的主要成分称为DEtection TRansformer(简称DETR),它包括一个基于集合的全局损失,通过二分匹配强制唯一预测,并且采用了一个Transformer编码器-解码器架构。给定一组固定的小规模学习对象查询,DETR能够推理对象之间的关系以及全局图像上下文,从而并行地输出最终的预测结果。该模型概念上简单,不像许多现代检测器那样需要专门的库。DETR在具有挑战性的COCO目标检测数据集上展示了与公认且高度优化的Faster R-CNN基线相当的准确性和运行时性能。此外,DETR还可以轻松推广到生成统一的全景分割任务,且显著优于竞争基线。训练代码和预训练模型已发布。

1 Introduction

目标检测的目的是为每个感兴趣的目标预测一组边界框类别标签。现代检测器通过一种间接方式解决这个集合预测任务,即在大量的候选区域[37,5]、锚点[23]或窗口中心[53,46]上定义代理回归和分类问题。它们的性能显著受到以下因素的影响:后处理步骤(用于合并重复预测)、锚点集合的设计,以及将目标框分配给锚  点的启发式方法[52]。

为了简化这些流程,我们提出了一种直接的集合预测方法,以绕过这些代理任务。这种端到端的理念在诸如机器翻译或语音识别等复杂的结构化预测任务中已经带来了显著的进展,但在目标检测中尚未取得类似的成果。以往的尝试[43,16,4,39]要么引入了其他形式的先验知识,要么未能在具有挑战性的基准上与强大的基线方法竞争。本文旨在弥合这一差距。

      我们通过将目标检测视为一个直接的集合预测问题,简化了训练流程。我们采用了一种基于 Transformer 的编码器-解码器架构 [47],这是一种在序列预测中非常流行的架构。Transformer 的自注意力机制可以显式地建模序列中元素之间的成对交互关系,使其特别适合集合预测中的特定约束,例如去除重复预测。

我们的 检测Transformer(DETR,见图1)一次性预测所有目标,并通过集合损失函数进行端到端训练,该损失函数通过 二分图匹配 将预测目标与真实目标进行匹配。DETR 通过去除多种手工设计的先验知识编码组件(例如空间锚点或非极大值抑制),简化了检测流程。与大多数现有检测方法不同,DETR 不需要任何定制层,因此可以在任何包含标准 CNN 和 Transformer 类的框架中轻松复现。

### Vision Transformer (ViT) 论文详解及核心概念解析 #### ViT 模型概述 Transformer 架构最初被设计用于自然语言处理领域,其成功促使研究者尝试将其应用于计算机视觉任务。Vision Transformer (ViT)[^1] 是一种基于纯 Transformer 的架构,旨在替代传统的卷积神经网络(CNN)。与 CNN 不同的是,ViT 将输入图像划分为固定大小的 patches 并将这些 patches 转换为 tokens 进入 Transformer 编码器。 相比 CNN 中的空间局部性和平移不变性的特性,ViT 更注重全局依赖关系的学习[^2]。然而,这种设计也带来了挑战,例如对大规模数据的需求较高以及在小规模数据集上的泛化能力较弱等问题。 #### ViT 模型的核心原理 ViT 的主要组成部分包括以下几个方面: 1. **图像分块** 输入图像会被均匀划分成多个不重叠的小区域(patches),每个 patch 都会经过线性投影操作转换为一维向量表示。这一过程类似于 NLP 中单词嵌入的过程[^1]。 2. **位置编码** 由于 Transformer 对顺序无感知的能力不足,因此需要显式加入位置信息来帮助模型学习空间排列特征。通常采用正弦余弦函数形式的位置编码方法。 3. **Transformer 编码器** 经过上述两步处理后的 token 序列送入标准多头自注意力机制构成的标准 Transformer 层中进一步提取高层次抽象特征。 4. **分类标记(Class Token)** 在序列开头附加一个特殊标记 `[CLS]` ,该标记最终作为整个图片表征参与下游任务预测。 #### ViT 模型的训练 为了使 ViT 达到最佳效果,往往需要借助大量标注样本完成监督学习或者利用未标注数据先进行预训练再针对具体应用场景做迁移调整 。此外还可以结合多种先进的技巧比如混合精度训练、知识蒸馏等手段提升效率并改善收敛速度。 值得注意的是,在面对较小尺寸的数据集合时,单纯依靠原始版本可能会遭遇欠拟合现象;此时可以考虑引入额外辅助策略——如更强力的数据扩增方案或是借鉴 DeiT 提议的知识传递框架等等。 #### 性能比较与局限性分析 当拥有充足资源支持的情况下,相较于经典 CNN 结构而言,ViT 可以取得相当甚至超越的表现水平尤其体现在 ImageNet 等大型公开测试集中。不过与此同时它也有一些固有缺陷亟待解决:首先是计算成本相对高昂,其次是缺乏对于低级纹理细节敏感度不够高等缺点。 #### 改进版模型简介 随着研究进展不断推进,出现了许多基于基础 Vit 设计理念之上加以改良的新颖变种型号,其中较为著名的有 DeiT 和 Swin Transformer: - **DeiT**: 主要聚焦于如何有效减少所需算力消耗的同时维持良好准确性,提出了新颖有效的教师学生联合指导模式以及其他多项技术创新措施. - **Swin Transformer**: 利用了滑动窗口机制实现了更灵活高效的跨尺度交互建模功能,从而显著增强了捕捉复杂场景内部关联性的潜力[^3]. #### 实际应用案例分享 目前 ViTs 已经广泛渗透到了各类主流 CV 子领域当中去发挥作用,涵盖了但不限于如下几个典型例子: - 图像分类: 如前所述,在诸如 imagenet 上取得了优异成果; - 目标检测&实例分割 : DETR 使用 transformer 替代 roi pooling 成功开创全新范式; - 视频理解: MViT 多尺度视频变换器通过对时空维度动态调节实现高效精准解析; --- ### 示例代码片段演示简单构建流程 以下是 Python 版本的一个简化版 ViT 定义示意程序: ```python import torch.nn as nn class PatchEmbedding(nn.Module): def __init__(self, img_size=224, patch_size=16, embed_dim=768): super().__init__() self.proj = nn.Conv2d(3, embed_dim, kernel_size=patch_size, stride=patch_size) def forward(self, x): x = self.proj(x).flatten(2).transpose(1, 2) return x class VisionTransformer(nn.Module): def __init__(self, depth=12, num_heads=12, mlp_ratio=4., qkv_bias=False, norm_layer=nn.LayerNorm, embed_dim=768, drop_rate=0., attn_drop_rate=0.): super().__init__() dpr = [x.item() for x in torch.linspace(0, drop_rate, depth)] layers = [] for i in range(depth): layer = Block(dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, drop=dpr[i], attn_drop=attn_drop_rate, norm_layer=norm_layer) layers.append(layer) self.layers = nn.Sequential(*layers) def forward(self, x): for blk in self.layers: x = blk(x) return x ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值