论文笔记 DETR

DETR提出了一种无需预处理和后处理的端到端目标检测方法,利用Transformer的全局建模能力和集合预测,取代了传统的锚点和NMS机制。文章还探讨了DETR与FasterRCNN的对比以及Transformer的不同层数对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

detr

摘要和引言
  • 2020论文facebook
  • 不需要proposal,不需要基于anchor的先验知识(比如预训练的模型),也不需要NMS进行筛选,直接端到端不需要后处理
  • 利用transformer的全局建模能力,看成集合预测问题,不会输出很多冗余的框,直接端到端,不需要NMS,简化了训练和部署
  • NMS:非极大值抑制,抑制掉冗余的框
  • anchor:滑动窗口,需要手动设计特征并判断提取,会产生大量候选框;直到Faster RCNN出现直接使用RPN网络预测候选框,使用神经网络取代计算特征过程,直接使用神经网络输出anchor是否包含物体,anchor指在不同尺寸的特征图的每个点设置N个不同尺寸的框框。
  • 使用二分图匹配的方式替代冗余的框,解码器时使用了learned object queries,类似anchor了,并行输出检测框
  • 简单!只需支持CNN和transformer即可部署!
  • 同时尝试了分割任务,只需加一个分割头即可
  • 在这里插入图片描述
  • 图像通过CNN获取特征,然后拉直送入transformer,encoder进一步学习全局信息,每一个点与其他的点就有交互了,decoder出一系列预测框;其中transformer中还需要与object queries(限定出多少框,文中为100个框 )进行交互;最后使用二分图匹配计算loss。取决于物体数量,选出对应的独一无二的几个框后,再正常计算类别loss和bandingbox的loss。
  • 推理时前面相同,在生成一系列预测框后,卡一个输出的置信度,比如大于0.7的,被当作前景物体保留下来
  • 对大物体表现非常好,小物体上比较差,但之后deformable DETR出现,通过多尺度特征,解决了小物体问题,并解决了训练太慢的问题
相关工作
  • 第一部分讲下集合预测问题,和大家怎么解决的;第二部分讲了transformer为什么不是自回归
  • 之前两阶段的proposal,一阶段的anchor,和物体中心点;都和初始的猜测非常相关。后处理对预测结果非常重要
  • 之前有基于集合的目标函数,也有匈牙利算法二分图匹配,也有使用RNN进行编码解码,但由于没使用transformer,骨干网络输出的特征不够强,需要人工干预
详细模型
  1. 基于集合的目标函数:
    • 输出为固定的集合,输出N个框,然后进行二分图匹配,匈牙利算法是解决二分图匹配的最好算法
    • 使用scipy中的自带函数输入花费矩阵,输出最优排列,即为每个人分配最擅长的工作,最后的总花费最小,在本问题就是100个预测框与ground truth的几个框组成花费矩阵。
    • 花费就是为loss,使用函数计算分类loss和边界框loss组成花费,分类loss和边界框loss在同样的取值空间中,边界框loss没有只使用L1loss,而是加上了IOUloss,一起计算来减少框的大小对loss的影响
    • 这与proposal和anchor一个原理,不过强行一对一匹配;先算出最优匹配再算loss
      在这里插入图片描述
  2. DETR的结构
    • object queries:一个可学习的position embedding
    • FFN:全连接层
    • 在这里插入图片描述
实验
  • 与Faster RCNN的对比:
  • 在这里插入图片描述
  • encoder学到了什么?可以把物体分割的很好,可视化:
  • 在这里插入图片描述
  • 实验了transformer为3、6、9层的不同效果:
  • 在这里插入图片描述
  • deconder学到了什么?对边缘极值点进行了学习
  • 在这里插入图片描述
  • object queries学到了什么?自学了适应数据集的anchor,

在这里插入图片描述

Group-DETR 是一种改进的 DETR(DEtection TRansformer)模型,旨在通过分组机制提升检测性能和推理效率。该模型通常会基于 DETR 的原始架构进行优化,并引入一些创新性的模块设计或训练策略。 尽管无法直接访问互联网以检索最新的 GitHub 项目,但可以通过以下方式找到 Group-DETR 的实现代码: 1. **GitHub 搜索** 在 GitHub 上搜索关键词 `Group-DETR` 或 `Group DETR implementation`,可以尝试使用高级搜索语法,例如: ``` "Group-DETR" in:name language:python ``` 2. **参考论文与官方实现** 如果 Group-DETR 是某篇论文中提出的模型,通常作者会在论文的“实验”部分提供其开源实现的链接。建议查阅相关论文(如 CVPR、ICCV、ECCV 等会议论文),并关注其官方仓库。 3. **类似项目的参考** Group-DETR 的实现可能基于 DETR 或 Deformable DETR 进行扩展。以下是一些常见的开源项目,可作为参考或修改的基础: - [DETR](https://github.com/facebookresearch/detr) - [Deformable-DETR](https://github.com/fundamentalvision/Deformable-DETR) - [DAB-DETR](https://github.com/IDEA-Research/DAB-DETR) 4. **PyPI 或 Hugging Face 模型库** 可能存在第三方开发者将 Group-DETR 集成到开源库中,例如 Hugging Face 或 MMDetection。可以尝试在这些平台上搜索相关关键词。 5. **社区资源与讨论区** 在 [Papers with Code](https://paperswithcode.com/)、[Google Colab 笔记本](https://colab.research.google.com/) 或 [Kaggle](https://kaggle.com) 上可能会有社区贡献的实现版本。 ### 示例代码片段(基于 DETR 修改) 以下是一个简化的 Transformer 检测模型结构示例,可用于构建类似 Group-DETR 的基础框架: ```python import torch from torch import nn class GroupDETR(nn.Module): def __init__(self, backbone, transformer, num_classes): super().__init__() self.backbone = backbone self.transformer = transformer self.class_embed = nn.Linear(256, num_classes) self.bbox_embed = MLP(256, 256, 4, 3) def forward(self, samples): features = self.backbone(samples) outputs = self.transformer(features) return outputs ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值