目标检测 DETR(2020)

embedded/2024/10/16 0:20:35/

文章目录

  • 前言
  • backbone
  • 位置编码(二维)
  • encoder、decoder
  • prediction heads
  • 损失函数计算

前言

DETR全称是Detection Transformer,是首个基于Transformer的端到端目标检测网络,最大的特点就是不需要预定义的先验anchor,也不需要NMS的后处理策略(少了这两部分可以少很多的超参数和计算),用集合的思想回归出100个query之后再用匈牙利算法二分图匹配的方式得到最终的正样本和负样本,第一个实现了端到端的目标检测

DETR的总体框架如下,可以分为三个部分,分别是:用于抽取图像的特征表示的backbone、使用了transformer的编码器解码器以及prediction heads:FFN,前馈神经网络给出最后的类别和Box信息的预测。

首先通过backbone提取图像的特征,随后将特征信息加上位置编码送入encoder,这里的encoder进行特征序列构造。在decoder中会首先初始化100个向量(object queries),这些向量通不断学习encoder构造的特征序列,再经过prediction heads得到类别和边界框的预测,最后并通过二分匹配计算损失来优化网络。
在这里插入图片描述
在这里插入图片描述

backbone

主干特征提取网络采用resnet50,假设输入为[batch_size, 3, 800, 1066],经过resn et50,此时输出为[batch_size, 2048, 25, 34],输出通道为变为2048,图像高和宽都变为原图像高和宽的 1/32,再经过 1 × 1 卷积后进行通道降维,得到的输出为[batch_size, 256, 25, 34],最后经过patch embedding将每个像素(每个patch块)映射为向量形式,得到[850,batch_size, 256]作为encoder的输入之一。

位置编码(二维)

其实就是原Transform的position embedding的思想,经过backbone得到的特征图的shape为[850,batch_size, 256],为每一个像素点的对应的feature上的每个位置都添加上位置信息。

正余弦位置编码:
在这里插入图片描述

pos代表不同的patch图片一维向量,i代表一维向量的第i个位置,d_model代表一维向量的总长度(即通道数),采用二维位置编码,通道数的前128维表示x的坐标信息,后128维表示y的坐标信息。
在这里插入图片描述
这样得到每个patch的位置编码Position Encoding,shape与特征图的一样为[850,batch_size, 256] ,与input embedding相加得到encoder的输入。

encoder、decoder

编码器结构基本与transformer相同,input embedding+positional encoding操作转换的图像序列作为transformer encoder的输入,经过encoder得到提取出来的特征图像序列。

在decoder上,解码器使用到一个非常重要的可学习模块,即下图呈现的object queries,使用一个可学习的object query对加强后的有效特征层进行查询,Decoder的输入分为三部分:Encoder的输出Object queries(query_embed)、queries(tgt)。tgt是一个大小为100*256、初始全为0的参数,仅第一层Decoder输入为0,之后几层Decoder的输入是上一层Decoder的输出;object queries是query_embed,是模型的一个可学习编码信息参数,由网络迭代学习到的一个参数),是用nn.Embedding初始化了100个可学习的( x , y ) ,维度是[2,100] ,然后经过位置编码将位置信息搞成256维(实际是[256,100]),其中前128+128维分别表示x,y的坐标信息;100表示模型最多预测出100个目标框,256与图像特征通道数一致可保证注意力机制的正常运算。Decoder对应Object queries的输出经Prediction heads后将用于计算损失、预测框坐标、预测类别。

object queries是预定义的目标查询的个数,代码中默认为100。它的意义是:根据Encoder编码的特征,Decoder将100个查询转化成100个目标,即最终预测这100个目标。最终预测得到的shape应该为[N, 100, C],N为Batch Num,100个目标,C为预测的100个目标的类别数+1(背景类)以及bbox位置(4个值),再经过prediction heads得到类别和边界框的预测。
在这里插入图片描述
在这里插入图片描述

prediction heads

prediction heads是DETR的分类器与回归器,其实就是对decoder提取出来的100个目标进行FFN操作,FFN采用全连接,经过FFN分别得到种类和边界框参数,将100个预测结构object predictions和真实框ground truth box之间通过匈牙利算法进行二分匹配,一个真实框只匹配一个预测结果,其它的预测结果作为背景进行拟合。最后通过反向传播来优化模型参数。
在这里插入图片描述
匈牙利算法

匈牙利算法是用于解决二分图匹配的问题:如果标注03

真实框有两个,就从100个候选框里面选择和真实框最接近的两个作为预测框,并且是一一对应的关系。匹配算法的工作是去找到最适合预测num_gt个真实框的num_gt个预测结果。
在这里插入图片描述

损失函数计算

完成预测结果和真实框的匹配后,计算预测框和标注框的损失来反向传播来优化模型参数。
在这里插入图片描述
DETR的损失由两个部分组成:

  1. 分类损失部分:衡量预测类别与真实类别之间的差距。DETR使用交叉熵损失(Cross-Entropy Loss)来计算分类误差。

  2. 回归损失部分:衡量预测边界框与真实边界框之间的差距。DETR使用GIoU损失和L1损失的组合。
    在这里插入图片描述


http://www.ppmy.cn/embedded/123973.html

相关文章

直接用Bash发送HTTP请求 —— 筑梦之路

追踪命令执行strace -e tracenetwork,open,close bash -c exec 3<>/dev/tcp/example.org/80关键部分socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) 3 connect(3, {sa_familyAF_INET, sin_porthtons(80), sin_addrinet_addr("93.184.215.14")}, 16) 0检查文件描…

数据结构与算法篇(图)(持续更新迭代)

目录 一、引言 二、基本概念 三、图的定义 四、图的基本概念和术语 1. 有向图 2. 无向图 3. 简单图 4. 多重图 5. 完全图&#xff08;也称简单完全图&#xff09; 6. 子图 7. 连通、连通图和连通分量 8. 强连通图、强连通分量 9. 生成树、生成森林 10. 顶点的度、…

express,MySQL 实现登录接口

使用 Express 和 MySQL 实现一个登录接口涉及几个步骤&#xff0c;包括设置 Express 服务器、连接 MySQL 数据库、创建用户表&#xff08;如果还没有&#xff09;、编写登录接口的逻辑等。以下是一个简单的实现示例&#xff1a; 1. 设置项目 首先&#xff0c;创建一个新的项目…

146. LRU 缓存【 力扣(LeetCode) 】

零、原题链接 146. LRU 缓存 一、题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff…

Opencv第十一章——视频处理

1. 读取并显示摄像头视频 1.1 VideoCapture类 VideoCapture类提供了构造方法VideoCapture(),用于完成摄像头的初始化工作&#xff0c;其语法格式如下&#xff1a; capture cv2.VideoCapture(index) 参数说明&#xff1a; capture:要打开的摄像头视频。 index:摄像头设备索引。…

安装配置pytorch(cuda、、cudnn、torch、torchvision对应版本)

参考&#xff1a; Pytorch环境配置——cuda、、cudnn、torch、torchvision对应版本&#xff08;最全&#xff09;及安装方法_cuda12.2对应的pytorch版本-CSDN博客 https://download.pytorch.org/whl/torch_stable.html Previous PyTorch Versions | PyTorch

怎么ping网络ip地址通不通

怎么Ping网络IP地址通不通&#xff1f;要检查网络中的IP地址是否连通&#xff0c;可以使用‌Ping命令。Ping命令通过发送ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制消息协议&#xff09;Echo请求报文并等待回应&#xff0c;来判断目标主机是否可…

LLM端侧部署系列 | PowerInfer-2助力AI手机端侧部署47B大模型 (论文解读)

引言 简介 PowerInfer-2 概述 神经元感知的运行时推理 多态神经元引擎 内存中的神经元缓存 灵活的神经元加载 Neuron-Cluster-Level Pipeline 生成执行计划 执行 总结 0. 引言 一雨池塘水面平&#xff0c;淡磨明镜照檐楹。东风忽起垂杨舞&#xff0c;更作荷心万点声…