DETR 【目标检测里程碑的任务】

paper with code - DETR

标题

End-to-End Object Detection with Transformers

  1. end-to-end 意味着去掉了NMS的操作(生成很多的预测框,nms 去掉冗余的预测框)。因为有了NMS ,所以调参,训练都会多了一道工序,都会比较复杂和麻烦,不是所有硬件都支持的。

所以一个【端到端 detr】 解决了上述的问题,把目标检测转化成了集合预测的问题。

DETR 不再出很多冗余的框,一下就让模型训练和部署变得很简单。

【全新的架构】

摘要

补一嘴。目标检测 任务 天然的就不适合 自回归的架构(GPT系列)。理解一下:检测大物体,不需要依赖检测小物体, 检测右边的物体也不需要先检测左边的物体。且自回归是顺序推理,目标检测想要的一定是并行的一起出框。

引言

之前的一些工作都是不是直接预测目标框,而是设计了一些回归任务 来生成了很多接近重复的框。

  • proposal Faster rcnn Cascade R-CNN 通过使用一系列逐级训练IoU阈值逐渐增加的检测器来解决高质量检测的问题
  • anchor RetinaNet 提出新的损失函数 focal loss
  • window centers object as points 新的物体检测方法,即将物体表示为一个点,通过关键点估计来找到物体中心点

再用nms来去除重复的框。所以需要很多的先验知识来设计NMS,如何可以好的去除这些冗余的框。DETR的目标就是消除这个鸿沟。

模型架构

训练整个流程分为以下四步:

  1. 用cnn去抽特征 。把特征拉直 送给transformer
  2. encoder的作用就是学习这些全局的信息,使用encoder的好处是:每一个像素点或者说每一个特征都和其他的特征有交互了,那么就大概可以知道哪块是哪个物体,对于同一个物体就应该只出一个框。
  3. decoder的作用生成框的输出。object query 。 query 限定了要出多少个框。query和self-attention做交互,从而得出了最后的框。默认是100。那么问题来了,这100个框 怎么得到最后的ground truth呢?

    使用了二分图匹配算法。
  4. 预测的框和ground truth的框做匹配,再匹配的框里面去算目标检测的loss。

(补充知识)DETR的二分图匹配损失函数是如何工作的?

DETR的全局损失函数采用了一个称为二分图匹配的方法,通过这种方法可以实现预测与实际目标的唯一匹配。在训练过程中,DETR会推断出一个固定大小的N个预测对象集合,然后通过最优的二分图匹配算法将这些预测对象与实际目标进行匹配。在匹配完成后,会对每个对象的特定损失(如边界框损失)进行优化。这个匹配的过程类似于用于将提议框或锚点与实际目标进行匹配的启发式分配规则。不同之处在于,DETR需要在直接集预测的情况下找到一对一的匹配,而不会出现重复的匹配。实际上,在匹配成本中,对于对象和空集之间的匹配成本并不依赖于预测结果,这意味着在这种情况下,成本是一个常数。DETR的全局损失函数还考虑了类别预测项,通过使用概率而不是对数概率,使得类别预测项与边界框损失项具有可比性,并且在实验中观察到了更好的性能表现。

推理的流程

  1. 和训练的逻辑一致,除了不再需要做训练的loss,直接在最后的输出上,用一个阈值去卡一个置信度。

结论

  1. 检测大物体的性能好,因为对大物体有全局建模的能力了,不再受限于anchor的设置
  2. 小物体就性能差了些。
  3. 对于未来的展望,后续的工作来改进。
    1. Deformable DETR 通过多尺度的特征来解决了小物体的问题。wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==训练太慢。

相关工作

  1. 集合预测
  2. transformer 并行解码
  3. 目标检测的相关工作 . 性能比较低,往往用手工设计的人工干预。

    1. set based loss Learning non-maximum suppression
    2. relation network Relation Networks for Object Detection cvpr 2018 

RNN系列 对比transformer 并行推理。

DETR 最终能够work的主要原因!!!还是用了transformer

主要算法

  1. 基于集合的目标函数

再说 二分图匹配,抽象点来说,举个例子,如何分配一些工人,去干一些活,让最后的支出最小。

最优二分图匹配,最后能给一个唯一解,能够给到每个人都去做最擅长的工作,让总支出最小。典型:匈牙利算法 工程实现:scipy linear-sum-assignment

  • 分类loss
  • box loss l1 loss 和generalized iou loss

  1. 模型结构框架

参考: DETR 论文精读【论文精读】_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295136.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

体验一下 CodeGPT 插件

体验一下 CodeGPT 插件 0. 背景1. CodeGPT 插件安装2. CodeGPT 插件基本配置3. (可选)CodeGPT 插件预制提示词原始配置(英文)4. CodeGPT 插件预制提示词配置(中文)5. 简单验证一下 0. 背景 看到B站Up主 “wwwzhouhui” 一个关于 CodeGPT 的视频,感觉挺有意思&#…

二叉搜索树 --- C++实现

目录 1.二叉搜索树的概念 2.二叉搜索树的操作 3. 二叉树的实现 4.二叉搜索树的应用 5. 二叉树的性能分析 6. 二叉树进阶练习题 1.二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左…

服务器经常死机怎么办?如何处理

关于服务器死机这一话题相信大家是不会陌生的,平时在使用服务器的过程中,或多或少都是会有遇到过。轻则耽误业务开展,重则造成数据丢失,相信每个人都不想碰到服务器死机的情况。下文我也简单的介绍下服务器死机的原因以及对应的预…

【HDFS联邦(1)】ViewFs与联邦理论知识详解

文章目录 一.ViewFs介绍二. 联邦之前的旧世界1. 单个 namenode集群2. 路径使用逻辑 三. 新世界 – 联邦与ViewFs1. How The Clusters Look2. 使用 ViewFs 为每个集群创建全局的Namespace2. 路径使用逻辑3. 路径使用最佳实践(ing) 本文主要想讨论 HDFS Vi…

3. 结构型模式 - 组合模式

亦称: 对象树、Object Tree、Composite 意图 组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们 问题 如果应用的核心模型能用树状结构表示, 在应用中使用组合模式才有价值。 …

C++ Qt开发:Charts折线图绘制详解

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts折线图的常用方法及灵活运用。 折线图…

医学实验室检验科LIS信息系统源码

实验室信息管理是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样品登录、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程实现了智能化、自动化和规范化管理。 实验室管理系统功能介…

12.18构建哈夫曼树(优先队列),图的存储方式,一些细节(auto,pair用法,结构体指针)

为结构体自身时,用.调用成员变量;为结构体指针时,用->调用成员变量 所以存在结构体数组时,调用数组元素里的成员变量,就是要用. 结构体自身只有在new时才会创建出来,而其指针可以随意创建 在用new时&…

【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建

系列文章目录 题目:Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文:https://arxiv.org/pdf/2304.06714.pdf 任务:无条件3D生成(如从噪音中,生成不同的车等)、…

Proxmox VE 超融合集群不停服务新增配置(磁盘)

五个节点的Proxmox VE超融合集群,创建了两个Ceph Pool,一个是高速的Nvme存储池,另一个是大容量SATA存储池。现在需要将原有的SATA磁盘全部拔出来,换成高速Nvme磁盘。 ​ ​ 首先,先销毁由SATA机械盘组成的“hdd_pool”&#xff…

本地使用 docker 运行OpenSearch + Dashboard + IK 分词插件

准备基础镜像 注意一定要拉取和当前 IK 分词插件版本一致的 OpenSearch 镜像: https://github.com/aparo/opensearch-analysis-ik/releases 写这篇文章的时候 IK 最新版本 2.11.0, 而 dockerhub 上 OpenSearch 最新版是 2.11.1 如果版本不匹配的话是不能用的, 小版本号对不上…

探索栈数据结构:深入了解其实用与实现(c语言实现栈)

上次结束了链表部分的内容:链接未来:深入理解链表数据结构(二.c语言实现带头双向循环链表) 然而,当我们涉及特定问题时,另一个非常有用的数据结构也开始显得至关重要——栈 栈与链表有着截然不同的特性&a…