【目标检测】图解 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=XPE⋅WK 和 Q = X P E ⋅ W Q \mathbf{Q} = \mathbf{X}{PE}\cdot\mathbf{W}^Q Q=XPE⋅WQ 是通过经过位置编码处理的输入 X \mathbf{X} X 生成的;但是 V = X ⋅ W V \mathbf{V}=\mathbf{X}\cdot\mathbf{W}^V V=X⋅WV 的输入是没有经过位置编码的。
  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 的。
相关推荐
Blossom.1181 分钟前
知识图谱增强大模型:构建可解释的行业智能搜索引擎
运维·人工智能·python·智能手机·自动化·prompt·知识图谱
派大鑫wink2 分钟前
网络安全新挑战:AI 驱动的攻防对抗与防护策略(附实战操作)
人工智能·python·安全·web安全
CCPC不拿奖不改名3 分钟前
Python基础:python语言中的文件操作+面试题目
开发语言·数据结构·人工智能·python·学习·面试·职场和发展
飞哥数智坊4 分钟前
谈谈我对 Claude Code 之父13条技巧的理解
人工智能·ai编程·claude
ar01236 分钟前
水务应用AR技术:推动智慧水务的创新实践
人工智能·ar
kisshuan123968 分钟前
基于YOLOv5的熊猫个体识别与分类系统_2
yolo·计算机视觉·分类
爱喝可乐的老王10 分钟前
机器学习方法分类
人工智能·机器学习
FreeBuf_11 分钟前
新工具可移除Windows 11中的Copilot、Recall及其他AI组件,反抗微软数据收集
人工智能·microsoft·copilot
deephub11 分钟前
Mosaic:面向超长序列的多GPU注意力分片方案
人工智能·深度学习·神经网络·transformer·注意力机制