端到端目标检测 |从DETR 到 GroundingDINO

news2024/10/6 12:32:57

在这里插入图片描述

文章目录

  • 一,DETR
    • 1. 简介
    • 2. 亮点
    • 3. 细节
    • 4. 总结一下
  • 二,GroundingDINO
    • Grounding DINO的整体流程
    • Grounding DINO的目标函数

一,DETR

之前的目标检测框架,需要很多的人工干预,很多的先验知识,而且可能还需要很复杂的普通的库不支持的一些算子。

DETR 既不需要proposal, 也不需要anchor,用transformer这种能全局建模的能力,从而把目标检测看成一个集合预测的问题。

因为有了这种全局建模的能力,DETR不会输出那么多冗余的框,而不需要nms,做后处理,让训练和部署都简单了不少。

1. 简介

  • 把目标检测 看成 集合预测 的问题。
    • 给定一堆图片,预测这些框的坐标和类别
    • 这个框就是一个集合
    • 任务就是给定一个图片,我要去把这个集合预测出来
  • 把目标检测 做成了 端到端 的框架
    • 把之前目标检测特别依赖人的部分 (设定anchor, nms) 去掉了,就没有那么多的超惨需要去调,整个网络就变得非常简单了

2. 亮点

  1. DETR提出了一个目标函数
  2. 使用了transformer encoder-decoder架构
  3. 还有一个learned object queries
  • 而且是并行计算的,一起出框,而不是串行的

  • 新的模型很简答,不需要特殊的库,支持cnn和transformer库就可以做

  • 在coco表现四十多,比当时最多的低了十个点。

  • DETR也可以去做前景分割,效果很好。

  • 建议去读一下代码

3. 细节

  • 之前的目标检测器都是间接的去解决问题,用了anchor, proposal, 预测中心点,nms等等。
  • DETR 采用了端到端的方式,直接解决问题,简化了目标检测的流程。
  1. 用卷积神经网络抽取一个图像特征,拉直,送给一个transfomer
    • transfomer encoder学习一个全局的信息,为接下来的 decoder(出预测框)来做铺垫
    • 使用transformer encoder, 就意味着每一个特征,都会与全局每一个特征有交互了,这样她大概就知道哪块是哪个物体,哪块又是另外一个物体,对同一个物体来说,只需要出一个框,而不是好多个框。 这种全局的特征,特别有利于去除这种冗余的框。
  2. 用transfomer decoder 做框的输出。当有了图像的特征之后,还有一个object quirer, 它限定了你要出多少个框,通过queire和特征去做交互,在decoder里做自注意力操作,得到了最后输出的框。
  3. 作者设定出100个框,100个框如何与ground truth做匹配,计算损失呢?他把这个问题看成一个集合预测的问题,用 二分图匹配的方法计算这个loss。
    • 比如,ground truth有两个框,通过这输出的100个框计算与2个框的matching loss,而决定出,在这一百个预测中,哪两个框是独一无二的对应到这个红色和黄色的ground truth框的。一旦匹配好之后,就计算bbox, cls的loss, 对于没有匹配到的框就会被标记为背景类。
      在这里插入图片描述
      在这里插入图片描述

4. 总结一下

  • 四步:
  1. 用神经网络抽特征
  2. 用transformer encoder学全局特征, 帮助后面做检测
  3. 用transformer decoder 生成很多的预测框
  4. 把预测框与ground truth的框做匹配,在匹配上的这些框里面去算目标检测的损失
  • 推理的时候:
    前三步都是一致的,直接用阈值,卡一下box preditions的置信度 > 0.7是前景物体, <0.7 就被当作背景物体了。

  • 在coco与faster rcnn AP结果差不多,对大物体表现非常好,对小物体小物体效果一般。半年之后有一篇论文解决了这个问题,也解决了DETR训练太慢的问题。

损失函数:

  1. 匈牙利损失:基于匈牙利算法进行预测框和真实框之间的匹配,并计算匹配后的分类损失和框回归损失。
  2. 分类损失:采用交叉熵损失,用于预测每个框的类别。
  3. 框回归损失:采用GIoU损失和L1损失的组合,用于预测框的坐标。GIoU损失是IoU损失的一种改进,考虑了框的大小。
  4. DICE/F1损失:用于分割分支,用于预测每个框的分割掩码。
  5. 辅助解码损失:在解码器每层之后添加预测头,并计算匈牙利损失,有助于模型输出正确数量的每个类别的对象。
    通过匈牙利匹配强制预测唯一对应真实框,同时利用分类、框回归和分割损失来训练模型,实现了端到端的检测和分割。

二,GroundingDINO

GroundingDINO 论文总结

GroundingDINO 论文的总结,请点击上方的 跳转链接
  • 其实和DETR的结构一模一样,各位reader从以下几个方面可以自己对比一下。
  1. encoder-decoder
  2. object query
  3. 二分图匹配

Grounding 与 DETR 的不同:就是引入了文本信息,把文本图像相互融合了三次。做到文本指导图片的这么一个能力。
在这里插入图片描述

Language-guide Query Selection 给定图像特征和文本特征,Language-guide Query Selection模块首先计算两者的相关性得分,然后根据得分选择最相关的图像特征作为queries。这些queries包含了图像和文本的信息,随后会被送入解码器进行进一步处理。

Grounding DINO的整体流程

1. 特征提取: 首先,通过图像backbone和文本backbone分别提取输入图像和文本的特征。
2. 特征增强: 接着,将提取的图像特征和文本特征输入特征增强模块,通过自注意力、图像到文本的交叉注意力和文本到图像的交叉注意力实现跨模态特征融合。
3. 查询选择: 然后,利用语言指导的查询选择模块,从增强后的图像特征中选出与输入文本更相关的特征作为解码器的查询。
4. 解码器: 接着,将选择的查询输入跨模态解码器,解码器包含自注意力层、图像交叉注意力层、文本交叉注意力层和FFN层,用于进一步融合图像和文本特征,并更新查询表示。
5. 预测输出: 最后,利用解码器最后一层的输出查询进行目标框预测和对应短语提取。
6. 损失函数: 在整个流程中,使用对比损失、框回归损失和GIOU损失进行多任务学习。
总体来说,Grounding DINO通过在特征增强、查询选择和解码器等多个阶段进行跨模态特征融合,实现了对任意文本指定的目标检测。

Grounding DINO的目标函数

  1. 对比损失(Contrastive Loss):用于预测对象和语言标记之间的分类。使用点积计算每个查询与文本特征之间的预测logits,然后计算每个logit的Focal loss。
  2. 框回归损失(Box L1 Loss):用于预测对象的边界框坐标。用于计算预测框和真实框坐标之间的绝对误差。
  3. GIOU损失(GIOU Loss):用于预测对象边界框的准确度。用于衡量预测框和真实框的形状和位置重叠情况,考虑到重叠区域和整体框的面积。

这些损失首先用于进行预测与真值之间的匈牙利匹配,然后计算最终损失。 此外,在模型的每个解码器层和解码器输出之后,还添加了辅助损失。对比损失、框回归损失和GIOU损失在匹配和最终损失计算中的权重分别为2.0、5.0和2.0。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AppInventor2 表格布局的外面的黑框怎么去掉?

问&#xff1a;表格布局的外面的黑框怎么去掉啊&#xff1f; 答&#xff1a;这个黑框是界面设计的布局位置示意&#xff0c;实际 App 测试时并没有框。 来源&#xff1a;AppInventor2 表格布局的外面的黑框怎么去掉&#xff1f; - App应用开发 - 清泛IT社区&#xff0c;为创新…

SQL查询电商数据案例

包括&#xff0c;Python连接数据库到模拟电商数据库&#xff0c;到sql场景查询 1,Python连接SQL数据库 以下是使用Python连接MySQL数据库并进行操作的示例代码&#xff1a; import random import time import pymysql# 定义名字数据 xing ["王", "李",…

uni-app学习完结

昨天空余一天&#xff0c;并未写记录&#xff0c;是昨天属于项目完结&#xff0c;这里把最后的打包上线等这里说下。 打包成微信小程序 打包成微信小程序&#xff0c;这需要再微信公众平台里面&#xff0c;进行登陆和设置。这里说下&#xff0c;注册的后&#xff0c;选择需要…

文心智能体平台丨创建你的四六级学习小助手

引言 在人工智能飞速发展的今天&#xff0c;我们迎来了文心智能体平台。该平台集成了最先进的人工智能技术&#xff0c;旨在为用户提供个性化、高效的学习辅助服务。今天&#xff0c;我们将向大家介绍如何利用文心智能体平台&#xff0c;创建一个专属于你的四六级学习小助手。…

zabbix客户端启用ping脚本 , 采集结果返回服务端

1.Zabbix-agent配置 (1) 查看自定义配置的目录位置 # more /etc/zabbix/zabbix_agentd.conf (2) 将配置的脚本放在指定的目录下 # cd /etc/zabbix/zabbix_agentd.d # vi get_ping.conf UserParameter=get_ping[*], /bin/ping -c 1 -W 1 $1 &> /dev/null &a…

未在计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序和未在本地计算机上注册“microsoft.ACE.OLEDB.12.0”提供程序

程序运行出现下图的错误&#xff0c; 或者下图的错误&#xff0c; 首先看一下是不是运行的程序的位数&#xff08;32/64&#xff09;不对&#xff1b; 查看系统位数的方法如下图&#xff1b;下图显示是64位操作系统&#xff1b; 如果运行的程序的位数没有问题&#xff1b; 则需…

MySQL-innodb后台线程

文章目录 一、结构图二、后台线程①Master Thread②IO Thread③Purge Thread④Page Cleaner Thread 拓展知识 一、结构图 二、后台线程 InnoDB是多线程的模型&#xff0c;因此其后台有多个不同的后台线程&#xff0c;负责处理不同的任务 后台线程有&#xff1a; ①Master Thr…

BevDet(1): 算法原理介绍介绍

BevDet是一个LSS-Based的实时高性能的多相机3D检测模型,它用4阶段的范式去做3D目标检测,设计上同时支持Segmentation。何谓4阶段范式: 1.图像域的特征提取(Image -view Encoder)2.视角转换 (View Transformer)3.Bev空间特征提取(BEV Encoder)4.任务头Head它涉及 Image View …

【ai】livekit:Agents 3 : pythonsdk和livekit-agent的可编辑模式下的安装

livekit-agent 依赖于livekit、livekit-api、livekit-protocol 其中livekit就是livekkit-rtc: 包含俩sdk 实时互动sdkReal-time SDK for connecting to LiveKit as a participant livekit-api : 服务端sdk https://pypi.org/project/livekit-api/ livekit的python sdk

Plesk面板上网站无法访问如何查看日志

近期我的网站出现无法访问的问题&#xff0c;这边想要查询为什么出现无法访问的原因&#xff0c;但不知道如何在主机上面进行检查&#xff0c;由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板&#xff0c;因此联系Hostease的咨询了Hostease技术支持&a…

嵌入式不一定只能用C!

嵌入式不一定只能用C! ---------------------------------------------------------------------------------------手动分割线-------------------------------------------------------------------------------- 本文章参考了以下文章&#xff1a; 这里是引用 ------------…

算法与数据结构高手养成:朴素的贪心法(上)最优化策略

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Linux离线一键安装Docker及docker-compose环境

背景&#xff1a; 在当前软件部署运维环境中由于Docker容器化优势越来越明显&#xff0c;因些被许多公司运维所采用&#xff0c;那首先如何快速安装Docker及docker-compose基础环境就第一时间被人们关注&#xff0c;本人同样在经过多次手工逐条用命令安装的过程&#xff0c;整理…

继承--5.29

继承格式&#xff1a; package javatest2;public class people {int age;double workday;public people(int age, double workday) {this.age age;this.workday workday;} }package javatest2;public class student extends people {int studyday;public student(int age, d…

使用目标检测模型YOLO V9 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

我看到YOLO V8中&#xff08;ultralytics版本8.2.18&#xff09;集成了YOLO V9&#xff0c;所以直接在YOLO V8 OBB的基础上实现YOLO V9 OBB&#xff0c;训练结果也出来了&#xff0c;但是评估指标比YOLO V8 OBB低一点点&#xff0c;不知道是不是哪里遗漏修改了......如有大神赐…

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述

1. 文档管理系统是什么 文档管理系统&#xff08;DMS&#xff1a;Document Management System&#xff09;是一种软件系统&#xff0c;用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档&#xff0c;如文本文档、电子表格、图像、音频或视频文件等…

easy-rule规则引擎使用

简介 轻量级的规则引擎&#xff0c;易于学习的api 简单来说&#xff0c;规则引擎就是一个函数&#xff1a;yf(x1,x2,…,xn) 将业务代码和业务规则分离&#xff0c;解耦业务决策和业务代码的绑定关系 入门示例 依赖引入 <dependency><groupId>org.jeasy</grou…

3dmax渲染经常卡主?关掉光追即可流畅渲染

3ds Max是一款广泛应用于三维建模、动画和渲染的软件&#xff0c;它在影视、游戏、建筑可视化等领域具有重要地位。在3ds Max中&#xff0c;渲染技术的选择和应用直接影响到最终图像的质量和渲染效率。 但在实际使用过程中&#xff0c;由于3dsMax中有太多选项&#xff0c;很多…

一文看懂!电磁仿真软件CST Studio Suite的技术发展历程

CST工作套件室是一款功能强大、专业级别的软件包&#xff0c;用于进行微波无源器件和天线的仿真分析和设计。它支持的应用领域包括耦合器、滤波器、环流器、隔离器、谐振腔、平面结构、连接器、电磁兼容、集成电路封装以及各种类型的天线和天线阵列。该软件可以提供必要的S参数…

【C++】:vector容器的底层模拟实现迭代器失效隐藏的浅拷贝

目录 &#x1f4a1;前言一&#xff0c;构造函数1 . 强制编译器生成默认构造2 . 拷贝构造3. 用迭代器区间初始化4. 用n个val值构造5. initializer_list 的构造 二&#xff0c;析构函数三&#xff0c;关于迭代器四&#xff0c;有关数据个数与容量五&#xff0c;交换函数swap六&am…