当前位置: 首页 > news >正文

【目标检测 DETR】通俗理解 End-to-End Object Detection with Transformers,值得一品。

文章目录

  • DETR
    • 1. 亮点工作
      • 1.1 E to E
      • 1.2 self-attention
      • 1.3 引入位置嵌入向量
      • 1.4 消除了候选框生成阶段
    • 2. Set Prediction
      • 2.1 N个对象
      • 2.2 Hungarian algorithm
    • 3. 实例剖析
    • 4. 代码
      • 4.1 配置文件
        • 4.1.1 数据集的类别数
        • 4.1.2 训练集和验证集的路径
        • 4.1.3 图片的大小
        • 4.1.4 训练时的批量大小、学习率等参数
      • 4.2 模型部分
        • 4.2.1 backbone
        • 4.2.2 neck
        • 4.2.3 head
      • 4.3 train/engine.py
        • 4.3.1 train.py
        • 4.3.2 engine.py
          • train_one_epoch()
          • evaluate()

DETR

链接:https://github.com/facebookresearch/detr

论文地址:https://arxiv.org/pdf/2005.12872.pdf,

CNN生成的特征图将被送入Transformer,然后经过一系列的自注意力层和前馈神经网络层,最终得到一组对象的表示。每个对象的表示由一个类别分数和四个坐标值组成。这些类别分数和坐标值是预测得出的,它们表示对象在图像中的位置和类别信息。

解码器将这些对象解码为一组检测结果。在解码过程中,匹配函数将预测类别和预测坐标与这些对象进行匹配,从而找到与预测类别和预测坐标最匹配的对象,并将其作为最终的检测结果输出。

在这里插入图片描述
在这里插入图片描述

1. 亮点工作

1.1 E to E

DETR是第一个使用Transformer实现端到端目标检测的方法。这种方法不需要预定义的候选框或先验知识,并且可以同时执行分类和定位任务。

1.2 self-attention

DETR使用自注意力机制替代传统的卷积神经网络结构。自注意力机制能够有效地捕获全局上下文信息,从而在目标检测任务中获得更好的性能。

1.3 引入位置嵌入向量

DETR引入了一组位置嵌入向量来帮助解码器在生成目标检测结果时理解对象之间的相对位置关系

1.4 消除了候选框生成阶段

传统目标检测方法需要先生成一组候选框,然后对这些候选框进行分类和定位。DETR通过消除这个阶段,可以更好地利用计算资源和提高检测效率。

2. Set Prediction

实现了对 一组对象 的分类。

2.1 N个对象

在解码器中,每个位置都生成了一组对象,这些对象由类别分数和坐标表示。N就是指每个位置生成的对象的数量。一般情况下,N的值越大,DETR的检测性能就越好,但同时会带来更高的计算成本和内存占用。因此,需要在性能和效率之间进行权衡,并选择合适的N值。

在实际应用中,根据具体的任务和资源限制,N的值可能需要进行调整。

2.2 Hungarian algorithm

一种用于解决二分图匹配问题的经典算法,它的时间复杂度为O(n2),其中n为顶点数。

在DETR中,每个预测结果都需要与所有的实际目标进行匹配,因此可以将预测结果看作左边的顶点,实际目标看作右边的顶点,然后通过匈牙利算法计算出每个左边的顶点最匹配的右边的顶点是谁。这样可以快速地得到每个预测结果对应的实际目标,从而得到最终的检测结果。

解码器生成的一组对象 对比于 预测类别和预测坐标

在解码过程中,DETR模型会将编码器得到的一组对象表示解码为一组检测结果,其中每个对象的表示由一个类别分数和四个坐标值组成。这些类别分数和坐标值就是预测的类别和坐标。

3. 实例剖析

假设我们有一个图像,其中包含三个对象:一个狗、一个猫和一个椅子。

狗:坐标=(5, 15, 55, 65)
猫:坐标=(35, 45, 75, 85)
椅子:坐标=(95, 95, 145, 145)

设置N=3,DETR得到一组检测结果,如下所示:

对象1:类别分数=0.9,坐标=(10, 20, 50, 60)
对象2:类别分数=0.8,坐标=(30, 40, 70, 80)
对象3:类别分数=0.7,坐标=(100, 100, 150, 150)

首先,计算IoU,(145-100)×(145-100)=2025,它们之间的并集面积为(50×50)+(50×50)-2025 = 2975。
IoU得分:2025/2975 = 0.6
总得分:0.7*0.6 = 0.42 < 0.5

输出1:狗,类别分数=0.9,坐标=(10, 20, 50, 60)
输出2:猫,类别分数=0.8,坐标=(30, 40, 70, 80)
输出3:椅子,类别分数=0.0,坐标=(0, 0, 0, 0)

由于第三个输出与任何一个真实对象都没有匹配,因此其类别分数和坐标值都被设为0。

4. 代码

4.1 配置文件

d2/configs/detr_256_6_6_torchvision.yaml
d2/detr/config.py

4.1.1 数据集的类别数

需要根据自己的数据集修改模型的分类器的输出维度,使其等于数据集中的类别数。

cfg.MODEL.DETR.NUM_CLASSES = 80

4.1.2 训练集和验证集的路径

需要在训练和验证代码中设置自己数据集的路径。

DATASETS:TRAIN: ("coco_2017_train",)TEST: ("coco_2017_val",)

4.1.3 图片的大小

需要根据自己的数据集图片的大小修改模型的输入大小。

INPUT:MIN_SIZE_TRAIN: (480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800)CROP:ENABLED: TrueTYPE: "absolute_range"SIZE: (384, 600)FORMAT: "RGB"

4.1.4 训练时的批量大小、学习率等参数

需要根据自己的数据集和硬件环境进行调整。

SOLVER:IMS_PER_BATCH: 64BASE_LR: 0.0001

4.2 模型部分

4.2.1 backbone

DETR的backbone是Dilated ResNet,它是一种轻量级的卷积神经网络。

4.2.2 neck

DETR使用了Transformer的Encoder作为其neck部分的主要组成部分。

具体来说,DETR包含一个Encoder和一个Decoder,其中Encoder使用Transformer对输入的图像特征进行编码,将其转换为一组上下文向量,而Decoder使用Transformer对这些上下文向量和预测的对象查询向量进行解码,生成最终的目标预测结果。

4.2.3 head

主要包含Transformer Decoder、Query Embedding。

DETR中的全局嵌入(Query Embedding)是在Transformer Decoder的输出之上计算的。具体地,Transformer Decoder的输出通过多头自注意力(Multi-Head Self-Attention)进行加权求和,得到一个新的表示,即为每个对象提取了不同的上下文信息。

接着,这个表示会被传递到Feed-Forward Network(FFN)中进行进一步的处理,以产生更丰富的特征表示。

最后,Query Embedding是在FFN的输出上计算得到的,它是一个用于匹配对象嵌入向量。因此,可以说,在DETR中,FFN和Query Embedding是在Transformer Decoder之上进行的。

假设我们有一个包含4个对象的图像,并使用DETR模型对其进行目标检测。在DETR模型的输入端,我们有图像张量 XXX,其尺寸为 C×H×WC\times H\times WC×H×W,其中 CCC 是通道数,HHHWWW 是高度和宽度。

首先,我们使用DETR的backbone网络(Diamante)将图像张量 XXX 转换为特征张量 FbackboneF_{\text{backbone}}Fbackbone。这个特征张量的大小是 Cbackbone×Hbackbone×WbackboneC_{\text{backbone}}\times H_{\text{backbone}}\times W_{\text{backbone}}Cbackbone×Hbackbone×Wbackbone

接下来,我们将特征张量 FbackboneF_{\text{backbone}}Fbackbone 送入Transformer Decoder网络,得到Transformer Decoder的输出 FdecoderF_{\text{decoder}}Fdecoder。这个输出张量的大小也是 Cdecoder×Hdecoder×WdecoderC_{\text{decoder}}\times H_{\text{decoder}}\times W_{\text{decoder}}Cdecoder×Hdecoder×Wdecoder

然后,我们对 FdecoderF_{\text{decoder}}Fdecoder 进行FFN,得到FFN的输出张量 FffnF_{\text{ffn}}Fffn。这个张量的大小和 FdecoderF_{\text{decoder}}Fdecoder 相同。

最后,我们使用Query Embedding将 FffnF_{\text{ffn}}Fffn 映射到特定的目标类别,得到每个对象的预测框坐标和类别。

4.3 train/engine.py

4.3.1 train.py

DETR的main.py文件是训练和测试DETR模型的主要脚本。在该脚本中,首先通过命令行参数解析器解析各种配置和超参数,然后通过build_model()函数构建DETR模型和优化器,通过build_lr_scheduler()函数构建学习率调度器,最后通过DefaultTrainer()类进行训练或测试。

4.3.2 engine.py

定义了一些训练和测试的辅助函数,包括计算loss、前向传播、后向传播、评估等。如构建匹配矩阵和计算损失。

train_one_epoch()

模型和损失切换到训练状态。

记录日志信息,主要是损失。

最后生成metric_logger的所有信息。

evaluate()

@torch.no_grad()装饰器,在评估过程中不进行梯度计算和参数更新。

设置模型和损失设置为评估状态。

使用for循环遍历数据集中的每个批次,并在MetricLogger对象上记录指标。

将输入数据和目标数据移到GPU上,然后使用模型进行前向传递。

如果数据集包含分割任务,则将分割结果与目标进行比较,以获得更准确的结果。

对所有结果进行聚合,以获得数据集上的总体评估指标。输出评估指标,包括平均指标和COCO指标。

相关文章:

【目标检测 DETR】通俗理解 End-to-End Object Detection with Transformers,值得一品。

文章目录DETR1. 亮点工作1.1 E to E1.2 self-attention1.3 引入位置嵌入向量1.4 消除了候选框生成阶段2. Set Prediction2.1 N个对象2.2 Hungarian algorithm3. 实例剖析4. 代码4.1 配置文件4.1.1 数据集的类别数4.1.2 训练集和验证集的路径4.1.3 图片的大小4.1.4 训练时的批量…...

项目ER图和资料

常用的数据类型 模型类 一对多 from app import db import datetimeclass BaseModel(db.Model):__abstract__ Truecreate_time db.Column(db.DateTime,defaultdatetime.datetime.now())update_time db.Column(db.DateTime,defaultdatetime.datetime.now())class Role(db.M…...

剑指 Offer 20. 表示数值的字符串(java+python)

请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者 整数 &#xff08;可选&#xff09;一个 ‘e’ 或 ‘E’ &#xff0c;后面跟着一个 整数…...

程序员的逆向思维

前要&#xff1a; 为什么你读不懂面试官提问的真实意图&#xff0c;导致很难把问题回答到面试官心坎上? 为什么在面试结束时&#xff0c;你只知道问薪资待遇&#xff0c;不知道如何高质量反问? 作为一名程序员&#xff0c;思维和技能是我们职场生涯中最重要的两个方面。有时候…...

吐血整理学习方法,2年多功能测试成功进阶自动化测试,月薪23k+......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试进阶方向 测试进…...

mysql慢查询:pt-query-digest 分析

"某些SQL语句执行效率慢"&#xff0c;这个问题总体上分为两类&#xff1a; 出现了慢查询语句某些查询语句没有使用索引 由于数据的写入量非常大&#xff0c;所以要想直接打开慢查询日志来查看到底哪些语句有问题几乎是不可能的&#xff0c;因为日志的刷新速度太快了…...

git的使用整合

git的下载和安装暂时不论述了&#xff0c;将git安装后会自动配置环境变量&#xff0c;所以环境变量也不需要配置。 一、初始化配置 打开git bash here(使用linux系统下运行的口令)&#xff0c;弹出一个类似于cmd的窗口。 &#xff08;1&#xff09;配置属性 git config --glob…...

XCPC第九站———背包问题!

1.01背包问题 我们首先定义一个二维数组f&#xff0c;其中f[i][j]表示在前i个物品中取且总体积不超过j的取法中的最大价值。那么我们如何得到f[i][j]呢&#xff1f;我们运用递推的思想。由于第i个物品只有选和不选两种情况&#xff0c;当不选第i个物品时&#xff0c;f[i][j]f[i…...

【软考 系统架构设计师】论文范文④ 论基于构件的软件开发

>>回到总目录<< 文章目录 论基于构件的软件开发范文摘要正文论基于构件的软件开发 软件系统的复杂性不断增长、软件人员的频繁流动和软件行业的激烈竞争迫使软件企业提高软件质量、积累和固化知识财富,并尽可能地缩短软件产品的开发周期。 集软件复用、分布式对…...

spring-integration-redis中分布式锁RedisLockRegistry的使用

pom依赖&#xff1a;<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.integ…...

城市通电(prim算法)

acwing3728 蓝桥杯集训每日一题 平面上遍布着 n 座城市&#xff0c;编号 1∼n。 第 i 座城市的位置坐标为 (xi,yi) 不同城市的位置有可能重合。 现在要通过建立发电站和搭建电线的方式给每座城市都通电。 一个城市如果建有发电站&#xff0c;或者通过电线直接或间接的与建…...

【动态规划】

动态规划1引言题目509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯小结53. 最大子数组和结语引言 蓝桥杯快开始了啊&#xff0c;自从报名后还没认真学过算法有(>﹏<)′&#xff0c;临时抱一下佛脚&#xff0c;一起学学算法。 题目 509. 斐波那契数 斐波那契数 &am…...

秒懂算法 | DP概述和常见DP面试题

动态(DP)是一种算法技术,它将大问题分解为更简单的子问题,对整体问题的最优解决方案取决于子问题的最优解决方案。本篇内容介绍了DP的概念和基本操作;DP的设计、方程推导、记忆化编码、递推编码、滚动数组以及常见的DP面试题。 01、DP概述 1. DP问题的特征 下面以斐波那…...

【C++提高编程】C++全栈体系(二十五)

C提高编程 第四章 STL- 函数对象 一、函数对象 1. 函数对象概念 概念&#xff1a; 重载函数调用操作符的类&#xff0c;其对象常称为函数对象函数对象使用重载的()时&#xff0c;行为类似函数调用&#xff0c;也叫仿函数 本质&#xff1a; 函数对象(仿函数)是一个类&…...

【云原生】k8s核心技术—集群安全机制 Ingress Helm 持久化存储-20230222

文章目录一、k8s集群安全机制1. 概述2. RBAC——基于角色的访问控制二、Ingress三、Helm1. 引入2. 使用功能Helm可以解决哪些问题3. 介绍4. 3个重要概念5. helm 版本变化6. helm安装及配置仓库7. 使用helm快速部署应用8. 自己创建chart9. 实现yaml高效复用四、持久化存储1.nfs—…...

【Linux】实现简易的Shell命令行解释器

大家好我是沐曦希&#x1f495; 文章目录一、前言二、准备工作1.输出提示符2.输入和获取命令3.shell运行原理4.内建命令5.替换三、整体代码一、前言 前面学到了进程创建&#xff0c;进程终止&#xff0c;进程等待&#xff0c;进程替换&#xff0c;那么通过这些来制作一个简易的…...

再获认可!腾讯安全NDR获Forrester权威推荐

近日&#xff0c;国际权威研究机构Forrester发布最新研究报告《The Network Analysis And Visibility Landscape, Q1 2023》&#xff08;以下简称“NAV报告”&#xff09;&#xff0c;从网络分析和可视化&#xff08;NAV&#xff09;厂商规模、产品功能、市场占有率及重点案例等…...

代码审计之旅之百家CMS

前言 之前审计的CMS大多是利用工具&#xff0c;即Seay昆仑镜联动扫描出漏洞点&#xff0c;而后进行审计。感觉自己的能力仍与零无异&#xff0c;因此本次审计CMS绝大多数使用手动探测&#xff0c;即通过搜索危险函数的方式进行漏洞寻找&#xff0c;以此来提升审计能力&#xf…...

ONLYOFFICE中利用chatGPT帮助我们策划一场生日派对

近日&#xff0c;人工智能chatGPT聊天机器人爆火&#xff0c;在去年年底发布后&#xff0c;仅仅两个月就吸引了全球近一亿的用户&#xff0c;成为史上最快的应用消费程序&#xff0c;chatGPT拥有强大的学习和交互能力 可以被学生&#xff0c;教师&#xff0c;上班族各种职业运…...

Java面试题-线程(一)

在典型的 Java 面试中&#xff0c; 面试官会从线程的基本概念问起&#xff0c; 如&#xff1a;为什么你需要使用线程&#xff0c;如何创建线程&#xff0c;用什么方式创建线程比较好&#xff08;比如&#xff1a;继承 thread 类还是调用 Runnable 接口&#xff09;&#xff0c;…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...