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

【目标检测】图解 DETR 系统框图

简略版本

在这里插入图片描述

  1. Backbone:CNN backbone 学习图像的 2D 特征
  2. Positional Encoding:将 2D 特征展平,并对其使用位置编码(positional encoding)
  3. Encoder:经过 Transformer 的 encoder
  4. Decoder:encoder 的输出 + object queries 作为 Transformer 的 decoder 输入
  5. Prediction Heads:将 decoder 的每个输出都送到 FFN 去输出检测结果

细节版本

在这里插入图片描述

  1. Backbone:特征提取:CNN backbone 学习图像的 2D feature,输出 2048 个通道,32 倍下采样(输入为 ( C , H , W ) (C,H,W) (C,H,W) ,输出为 ( 2048 , H / 32 , W / 32 ) (2048, H/32,W/32) (2048,H/32,W/32)
  2. Backbone:降维:通过一个 1 × 1 1 \times 1 1×1 的 Conv2D 卷积,将通道降为 256(为的是减少 Embedding 向量,即 token 的长度)。
  3. Backbone:展平:将 2D 特征展平,然后将展平的维度放置在第一个维度
  4. Encoding:位置编码(1):与普通的 Transformer 不同的地方在于,普通 Transformer 只需要在第一个 Encoder 的输入处进行一次位置编码即可,但是 DETR 这里,如果有 N N N 个 Encoder,则需要在 N N N 个 Encoder 输入的时候都要进行一次位置编码。官方代码的位置编码的生成有两种方式:(a)正弦位置编码;(b)可学习的位置编码;
  5. Encoding:位置编码(2): K = X P E ⋅ W K \mathbf{K} = \mathbf{X}_{PE}\cdot\mathbf{W}^K K=XPEWK Q = X P E ⋅ W Q \mathbf{Q} = \mathbf{X}_{PE}\cdot\mathbf{W}^Q Q=XPEWQ 是通过经过位置编码处理的输入 X \mathbf{X} X 生成的;但是 V = X ⋅ W V \mathbf{V}=\mathbf{X}\cdot\mathbf{W}^V V=XWV 的输入是没有经过位置编码的。
  6. Encoding:Dropout:在这两个部分都会先进行 Dropout 操作

Decoder 的 4 个输入:
a. Encoder Memory:也就是 Encoder 的输出,应该和输入是一样的维度,也就是 ( 850 , b s , 256 ) (850, bs, 256) (850,bs,256)
b. Spatial positional encoding:空间位置编码,应该也是 256 维度的一维向量
c. Decoder received queries (Queries):表示内容信息 content(可理解为 label 信息),初始设置成 0,shape 是 100 × 256 100 \times 256 100×256
d. Output positional encoding (object queries):输出位置编码,表示位置信息 position(可理解为 box 位置信息),shape 也是 100 × 256 100 \times 256 100×256


  1. Decoding:Dropout:解码器部分的 Dropout,与编码器的部分一样。
  2. Decoding:位置编码:进入第一个多头注意力模块,与步骤 6 中的位置编码一样,进入第二个多头注意力模块,仅对上一个注意力的输出进行位置编码。
  3. Decoding:第二层多头注意力:假设 V \mathbf{V} V K \mathbf{K} K 在不考虑 batchsize 的情况下都是 ( 850 , 256 ) (850, 256) (850,256),而 Q \mathbf{Q} Q 的维度是 ( 100 , 256 ) (100, 256) (100,256)。经过过头注意力机制之后,输出的维度和 Q \mathbf{Q} Q 一样,还是 ( 100 , 256 ) (100, 256) (100,256)
  4. Decoding:输出维度:分为验证和训练两种情况,在训练阶段,会将 M M M 个 decoder 模块 FNN 层后的接出来,放到辅助解码损失里,一起计算损失,实现深监督(deep supervise),验证阶段就直接输出一个 ( b s , 100 , 256 ) (bs, 100, 256) (bs,100,256) 的矩阵。
  5. Prediction heads:Class:分类头,通过一个 FC 全连接层接一个 Softmax 函数实现的 FFN。这里的 num_cls + 1 多出来的一种分类是背景 background。
  6. Prediction heads:Bounding box:位置头,通过一个 MLP 网络,内含三个 FC 全连接层,结尾是 Sigmoid 函数进行归一化。
  7. 筛选:根据分类头得到的分类置信度和设定的阈值进行筛选,保留大于 0.7 的。

相关文章:

  • NUC980-OLED实现全中文字库的方法
  • day01-anaconda的安装
  • c++里对 new 、delete 运算符的重载
  • 4K高质量视频素材库,剪辑必备
  • MyBatis总结(2)- MyBatis实现原理(三)
  • 支付宝H5支付
  • wsl子系统ubuntu20.04 设置docker服务开机自启动
  • 第4天:用户认证系统实现
  • 【大分享06】收、治、用、安“四管齐下”, 做好多业务系统电子文件归档与管理
  • Spire.PDF for .NET【文档操作】演示:如何删除 PDF 中的图层
  • Matlab基础篇:数据输入输出
  • NXP i.MX8系列平台开发讲解 - 3.15 Linux 之USB子系统(一)
  • 【机器学习300问】119、什么是语言模型?
  • 人工智能在气象预报领域的崛起:GraphCast引领新纪元
  • 使用 Redis + Lua 实现分布式限流
  • 【EOS】Cleos基础
  • 2017届校招提前批面试回顾
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS 提示工具(Tooltip)
  • GitUp, 你不可错过的秀外慧中的git工具
  • IndexedDB
  • Java|序列化异常StreamCorruptedException的解决方法
  • java8-模拟hadoop
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java第三方包学习之lombok
  • Material Design
  • MySQL QA
  • Python实现BT种子转化为磁力链接【实战】
  • webpack入门学习手记(二)
  • 搭建gitbook 和 访问权限认证
  • 面试遇到的一些题
  • 面试总结JavaScript篇
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端面试总结(at, md)
  • 使用common-codec进行md5加密
  • 为视图添加丝滑的水波纹
  • 源码安装memcached和php memcache扩展
  • Java数据解析之JSON
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​linux启动进程的方式
  • ​第20课 在Android Native开发中加入新的C++类
  • # centos7下FFmpeg环境部署记录
  • # Redis 入门到精通(七)-- redis 删除策略
  • #1014 : Trie树
  • #android不同版本废弃api,新api。
  • #NOIP 2014# day.1 T2 联合权值
  • #QT 笔记一
  • (2)nginx 安装、启停
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (javascript)再说document.body.scrollTop的使用问题
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (ZT)薛涌:谈贫说富
  • (附源码)php投票系统 毕业设计 121500