ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

RT-DETR网络结构解析技术文章大纲

2026/8/15 21:18:28 拓冰建站 浏览量
RT-DETR网络结构解析技术文章大纲 目录目录RT-DETR的核心设计目标与创新整体框架分析1 骨干网络2 高效混合编码器AIFI CCFF2.1 AIFI2.1.1 AIFI内部运算流程2.1.2 单层多头自注意力MHSAAIFI核心2.2 ccff3 解码器3.1 整体结构3.2 单层内部结构解析3.3 解码器核心交叉注意力3.4 FFN前馈神经网络4 辅助预测头5 匈牙利匹配无NMS的核心RT-DETR的核心设计目标与创新传统DETR训练慢、推理速度慢YOLO又依赖 NMS。RT-DETR既保留 Transformer 的全局建模能力和端到端优势又达到 YOLO 级别的实时推理速度。原论文中的网络结构图整体框架分析RT-DETR 骨干网络 (Backbone)高效混合编码器 (Efficient Hybrid Encoder)带辅助预测头的 Transformer 解码器数据流清晰分为特征提取→全局建模→查询驱动解码三个阶段。1 骨干网络RT-DETR 支持两种主流骨干网络ResNet 系列R18/R34/R50/R101经典 CNN稳定可靠HGNet-V2百度自研更轻量高效适合移动端部署1.1 骨干网络流程以ResNet 为例输入原图 [B,3,640,640]Bbatchsize【骨干网络 ResNet】Stage1卷积池化下采样 1/2 ↓ Stage2残差块下采样 1/4 → 分辨率太大计算量暴增所以直接不用 ↓ Stage3残差块下采样 1/8 → 输出特征 S3 [B,512,80,80]提取小目标 ↓ Stage4残差块下采样 1/16 → 输出特征 S4 [B,1024,40,40]提取中等目标 ↓ Stage5残差块下采样 1/32 → 输出特征 S5 [B,2048,20,20]引入DCN提取大目标全局语义为什么只在Stage5加入可变形卷积Stage5 是整个骨干最深、最抽象的一层已经学到了目标整体轮廓普通卷积是固定方形感受野可变形卷积可以自适应偏移采样点贴合不规则物体人、车辆、不规则目标等加在最后一层成本最低、增益最大不额外增加太多计算量还能大幅提升检测精度。2 高效混合编码器AIFI CCFF2.1 AIFIAIFI全称Adaptive Intra-scale Feature Integration 自适应同尺度特征融合核心本质多头自注意力 归一化 残差连接骨干网络输出S3S4S5后RT-DETR只对S5应用AIFI做全局信息交流2.1.1 AIFI内部运算流程输入 S5[B, 2048, 20, 20] ↓ 步骤1维度变换 展平 2D→1D序列 ↓ 步骤2层归一化 LayerNorm ↓ 步骤3单层 多头自注意力 MHSA核心 ↓ 步骤4残差直连相加 注意力结果 原始输入 ↓ 步骤5还原维度 1D序列→2D特征图 ↓ 输出增强后的 S5特征 → 送入CCFF模块维度变换把 H20、W20 合并成一个维度序列长度 L400。原始输入[BC2048H20W20] → 变换后维度[BL400C2048]LayerNorm层归一化只对每个通道维度做归一化BN是对整批特征归一化适合 CNN2.1.2 单层多头自注意力MHSAAIFI核心底层逻辑在每个像素位置生成3个向量Q(查询)、K(键)、V(值)。每个位置与其他位置计算相似度加权求和得到V每个像素位置融合全局所有位置信息。Q、K、V维度都是[BL400C2048]单头自注意力计算公式代表当前位置对所有位置的权重把所有位置的信息加权融合其中Q与K的转置矩阵做点积除以把方差拉回为1Softmax归一化权重把相似度得分变成0~1 之间的权重。最后output输出维度是[BL400C2048]单头自注意力只学习一种全局关联信息如值判断位置关系。多头自注意力就是将Q、K、V以最后一维2048拆分成多个单头自注意。以8头为例拆分后每个头的维度就是[BL400C256]每个头各自分工独立负责一个任务如位置关系、尺度大小、前景背景区分、遮挡关系等。每个头的初始权重是随机的具体会负责什么任务会在反向传播的过程中逐渐学习。最后将所有头直接合并输出维度依然是[BL400C2048]2.2 ccffccff全称Cross-Scale Feature Fusion 跨尺度特征融合核心目标FPNPAN自顶向下将高层全局语义传递给低层、自底向上解决高层看不到特征细节的问题。输出把S3、S4、S5最终的输出N3、N4、N5分别展平为序列然后拼接在一起得到Memory[1, 640016004008400, 2048]送入解码器3 解码器解码器共有四大输入1Memory编码器输出的全局多尺度特征序列包含所有目标的全局上下文信息2Memory位置编码给 8400 个特征加位置信息维度和 Memory 一致3Queries目标查询向量默认固定 300 个每个向量负责找一个目标4Queries位置编码给 300 个查询向量加位置信息维度[1,300,2048]3.1 整体结构解码器整体流程简述如下编码器输出 ↓ 解码器四大输入汇总 ↓ Transformer解码器多层堆叠共6层 每层内部自注意力 → 交叉注意力 → FFN ↓ 辅助预测头 最终预测头 输出300个框坐标 300个类别概率 ↓ 匈牙利匹配 自动一对一匹配目标 ↓ 最终检测结果无NMS3.2 单层内部结构解析解码器多层堆叠中单层内部结构计算流程如下输入初始Query[1,300,2048] ↓ (1)LayerNorm前置归一化 ↓ (2)自注意力Query内部自己跟自己交流 ↓ (3)残差相加自注意力输出 原输入Query输出维度不变 ↓ (4)LayerNorm对残差输出做归一化 ↓ (5)交叉注意力Query去读取Memory全局特征 ↓ (6)残差相加交叉注意力输出 第(3)步的特征 ↓ (7)LayerNorm第三次归一化 ↓ (8)FFN前馈网络特征非线性提炼 ↓ (9)残差相加FFN输出 第(6)步的特征 ↓ (10)送入解码器下一层 / 辅助预测头其中Query内部自注意力同上文目标向量互相商量、各自分工、避免重复检测。LayerNorm层归一化也同上文。残差连接作用保留原始Query信息防止层数加深1导致梯度消失。3.3 解码器核心交叉注意力交叉注意力是解码器最核心部分作用是Query与Memory做信息交流可以理解为每个Query在整个图片的信息库8400个Memory里检索信息属于自己目标的特征全部抽出来更新自己的认知。Q/K/V来源Q来自当前归一化后的Query[1,300,2048]K/V来自Memory[1,8400,2048]计算方式同上文单头自注意力先将Q和K的转置做点积计算每个Query对8400个Memory的关注度权重 [1,300,2048]×[1,2048,8400][1,300,8400] ↓ 再与V做点积把所有的位置信息加权融合 [1,300,8400]×[1,8400,2048][1,300,2048]3.4 FFN前馈神经网络核心目标对每个Query的特征进行非线性深加工、提纯输入特征[B,300,2048] ↓ 线性层1升维[B,300,2048] → [B,300,8192] ↓ 激活函数 ↓ 线性层1升维[B,300,8192] → [B,300,2048] ↓ 输出特征[B,300,2048]为什么升维每个Query原本带 2048 条特征信息特征挤在一起很多复杂特征没法分开因此用可学习的权重把每个Query的特征扩展成 8192 条细节信息把特征打散、细化将特征拉开距离这样模型才能看清其中的细节。升维可以这样理解2048条信息中某一句为“这有一个物体”就这一句分不清是人、是车还是背景。升维后将这一句笼统的话拆成四句具体的话“轮廓是不是人形”、“有没有四肢”、“纹理是不是衣服纹理”、“背景是不是马路”为什么升维是4倍因为是官方验证过的最优解FNN会改变300个Query的顺序和数量吗不会永远是 300 个顺序也不变只改每个 Query 内部2048个特征数值。FNN在两层线性层都有可学习参数训练时和网络其他参数一起反向传播更新。4 辅助预测头在DETR中在最后一层解码器后加预测头前面5层完全没有监督只能被动传播特征容易学偏导致收敛很慢。RT-DETR在每一层解码器后都添加了辅助预测头每一层结束后立刻计算损失独立进行监督梯度会同时流向每一层解码器收敛速度大大加快。预测头输出每一个预测头接收 [1,300,2048] 的Query共两个输出1分类头类别概率2回归头框坐标每一层输出300个框300个类别大部分为背景最后把所有层的损失加一起整体进行反向传播。两个预测头互不感知对方输出只是共用上游特征向量是两套独立权重两套独立梯度流。5 匈牙利匹配无NMS的核心YOLO的NMS逻辑网络输出几百个重复、堆叠的框必须依靠NMS非极大值抑制去重、筛选高分框RT-DETR匈牙利匹配一个真实目标只用一个Query学习其他的Query只学习背景。推理时天然没有重复框直接输出最优匹配结果。匈牙利匹配三步走流程第一步对每一个预测框和真实框计算分类代价、坐标代价、IOU代价第二步构建代价矩阵每张图中每个GT只分配一个Query剩余Query全部判为背景负样本。第三步遍历代价矩阵选出整体代价最小的结果最后将配对好的Query计算分类损失、框回归损失推着它继续接近真实目标。没配对成功的只算分类损失推着它预测背景。注意匈牙利是全局一对一匹配最优不是局部最优。也就是说某张图中可能存在多个 Query 都对准目标、IoU 很高但系统只选综合代价最低的1个作为正样本其余全部强制划为背景。匈牙利匹配只在训练时使用推理时直接拿最后一层300个输出置信度过滤一下就出结果。如果数据集某些类别特征过于简单训练阶段一个GT上频繁出现多个高分Query就可能会导致模型无法通过损失来抑制这些参数在推理时会直接在一个目标上输出多个高置信度重叠框。具体解释参考后续损失函数解析。6 损失函数RT-DETR共有两类损失函数6.1 分类损失Focal Loss其中模型对真实类别/背景的预测概率难样本聚焦因子默认2.0压低简单样本损失类别平衡权重背景默认0.1负样本惩罚偏弱根源当面对简单样本时高分正样本Query≈ 1loss被大幅压低不主导训练。当面对困难样本时高分负样本Query偏低loss几乎不变让模型更多的去学习困难样本。由于所有Query通常大部分为背景负样本所以分类损失对背景Query有降权所有背景Query的分类损失*0.16.2 框回归损失L1GIOUL1坐标损失只对匈牙利匹配成功的正样本Query计算监督归一化框坐标数值误差。N当前batch匹配成功的GT总数GIOU损失同样仅正样本生效监督空间重叠与相对位置其中IoU预测框与GT框交并比两框最小外接矩形面积U两框并集面积6.3 总损失公式三类损失计算后统一除以batch内GT总数做均值化非0-1归一化稳定梯度量级。归一化后的三类损失按yaml配置权重加权求和得到反向传播用的单标量总损失正样本Query负样本Quey模型推理输出重复框问题RT-DETR在面对简单样本小数据集时推理时会存在一个目标上输出多个高置信度重叠框现象。问题根源在训练时假设图片里有一个GT两个QueryQueryA、QueryB同时命中了它经过激活后分数很高那么经过匈牙利匹配后只会选择一个Query作为正样本假设QueryA被匹配为正样本会参与分类、L1、GIOU损失计算更新权重那么QueryB就会被强制判定为背景只参与分类损失计算GIoU/L1 完全不算并且分类损失对背景 query 有降权0.1这就导致即使QueryB 的框位置学得很好并且激活后输出高分但也会被匈牙利匹配判为背景训练时其参数权重理应被分类loss抑制但由于其被判为背景计算分类loss时被降权抑制导致loss对其惩罚力度很弱。当数据集小、简单样本多、迭代轮数不够时不足以对其进行有效抑制。进而导致在推理时QueryA、QueryB同时输出了高置信度重叠框。