简介围绕 DETREnd-to-End Object Detection with Transformers论文的汇报课件面向计算机视觉方向的学习者以及需要做论文分享的读者帮助其在较短时间内理清端到端目标检测的核心思路与汇报脉络。压缩包内为 1 个 pptx 文件约 3.44MB按研究背景、研究目的、研究过程、结论四部分组织配有模型整体结构图与 COCO 实验结论便于直接用于组会讲解或二次修改。内容从传统 RCNN、YOLO 依赖 Anchor 与 NMS 的流程切入说明 DETR 如何把检测视为集合预测进而展开 CNN 主干、Transformer 编解码器、object queries 与前馈网络的分工并补充二分图匹配损失、位置编码及预测框与类别输出的细节。已有 1094 人学习适合希望快速掌握 DETR 框架、梳理汇报逻辑的读者参考。1. 从一份文献汇报 ppt 说起目标检测怎么就被“端到端”了做文献汇报最怕遇到那种标题唬人的论文——End-to-End Object Detection with Transformers 就是典型一行标题里 Transformer、端到端、目标检测三个词单看都认识凑一起就不知道它到底改了什么。台下听众的第一反应往往是目标检测不就是“框出图里有什么、在哪”吗凭什么它还能跟“端到端”扯上关系这正是这份文献汇报 ppt 要回答的问题。打个比方。传统检测器像一群保安查户口先在整张图上贴满各种尺寸的便签再逐个判断便签里有没有人、要不要往哪挪一点最后还得把贴重复的便签撕掉。DETR 换了个思路——不看便签直接交一份名单图里有几个目标、每个目标是什么、框在哪一次性写清楚。这份 ppt 讲的就是这份名单是怎么被训练出来的以及它凭什么敢把中间那一堆手工动作全砍掉。2. 为什么传统检测流程要“手工搭积木”Anchor 与 NMS 的由来要把 DETR 讲明白得先讲清楚它在反对什么。这份 ppt 的研究背景部分只用了半页纸就点出了两个“被告”Anchor 和 NMS。它们不是可有可无的装饰而是过去很多年里目标检测器的主心骨。通俗地说传统检测器的思路是“先铺后挑”先把整张图铺满候选位置挑出结果之后再收拾干净。问题在于铺和挑这两步都高度依赖人的经验——换个数据集、换种目标尺度参数就得重新调一轮。DETR 要做的就是把这两步从流程里拿掉。2.1 一个框一个框地猜滑动窗口和先验框在做什么Anchor 是什么ppt 里给的定义很直白在图像上预设好的、不同大小不同长宽比的参照框。它不是模型预测出来的而是人事先摆好的。最常见的做法是在特征图的每个位置上摆一组比如三种面积乘以三种长宽比一个位置摆九个。然后网络只需要做一件事对每个参照框判断这里面有没有东西、是什么类别、需要往哪个方向挪多少、放大缩小多少。模型学的不是“框在哪”而是“相对参照框的偏移量”。为什么要多这一道因为直接让网络从零开始回归坐标太难了。打个比方让一个人在空房间里凭感觉画出一张桌子的位置和给他一张画好格子的纸、让他在“第三格往右一点”画难度差得远。先验框就是那张格子纸。代价也同样明显参照框的尺寸、比例、数量全是超参数。数据集里目标普遍偏小就得补小尺寸目标多是细长条就得多加极端长宽比。这套配置没有通用解换个数据集往往要重新调一轮。这就是 ppt 里说的“需要许多手动设计的模块”。早年的做法更原始一些叫滑动窗口拿一个固定大小的窗口在图上按步长挪动每挪一次判断一次。后来演变成在特征图上按位置铺先验框本质并没有变——都是用密集的、预设的候选去覆盖“目标可能出现的地方”。铺得越密越不容易漏但计算量也越大铺得稀速度上去了小目标和密集目标就遭殃。这个两难正是手工设计最让人头疼的地方。2.2 NMS 这步“后悔药”为什么让人不放心NMS全称非极大值抑制。它能存在的前提是模型对同一个物体会给出好几个框。因为每个先验框都在独立判断“我这里有没有东西”一个真实目标周围的几个位置都会说“有”于是输出一堆高度重叠的框。NMS 干的事情很朴素按类别概率排序留下分数最高的那个把和它重叠度超过阈值的其他框全部压掉然后对剩下的重复这个过程直到没有可压的为止。问题就出在这个阈值上。阈值设得高重叠的框压不干净同一个物体会被报好几次设得低挨得近的不同目标就会被误伤——一群人站在一起很可能最后只剩一个框。这是典型的玄学参数调参时基本靠试。更麻烦的是这个操作本身不可导训练的时候没法把它放进损失里一起优化它只能挂在推理链路的末端当一个事后补丁。ppt 把它和 Anchor 并列为“繁琐”的代名词原因就在这里它不是模型学出来的能力而是一段人手写死的规则。模型并没有被教会“一个目标只报一次”它只是被要求事后自己收拾干净。这就像出门忘带伞只能到地方再买一把——能用但不算设计得好。2.3 DETR 想省掉的正是这些手工环节于是 DETR 的核心主张就出来了把检测当成集合预测问题。什么叫集合就是一组无序的输出。模型一次性输出 N 个结果这 N 个结果谁先谁后不重要重要的是它们作为一个整体要跟图里的真实目标对上。因为是无序的就不需要“先产生一堆候选再筛选”这个中间环节自然也就不用 NMS 来善后。ppt 里用的词是“绕过代理任务”。代理任务这个词挺关键传统检测把“检测”拆成了“判断先验框里有没有东西”和“回归偏移量”两个子任务这两个子任务是为最终目标服务的中间步骤是代理不是目的本身。DETR 不想走这条路它想直接从图片走到“有哪些目标、在哪”的最终答案。这背后有个更大的背景。端到端这套思路在机器翻译、语音识别这些结构化预测任务上早就成了主流——输入一句话直接输出一句话中间不需要人去设计对齐规则。目标检测一直没走通这条路DETR 想做的就是填上这条沟。至于效果ppt 给的结论是在 COCO 数据集上DETR 的准确性和检测速度与 Faster R-CNN 相当。注意这个措辞——是“相当”不是“碾压”。这个分寸感很重要它说明 DETR 的价值主要在流程简化而不是性能上的降维打击。汇报时如果把这一点讲成“全面超越”听众里有做过检测的人一追问就会翻车。3. DETR 的三段式结构CNN、Transformer、FFN 各管一段ppt 把 DETR 的结构拆成三块一个 CNN 主干网络提取特征图一个 Transformer 做编码解码一个前馈网络做最后的预测。三块各司其职串起来就是“图片进、检测结果出”。先把整条链路走一遍再逐个拆开看。这样听汇报的人不管从哪一段开始走神回来都还知道自己在整条链的哪个位置。3.1 CNN 主干先把大图压成一张特征图第一块是 CNN。它的任务不是检测是“压缩”。ppt 里给了两个具体数字输出的特征图有 2048 个通道长宽各缩小 32 倍。一张 800×800 的图进去出来大概是 25×25×2048。为什么必须压因为 Transformer 的计算量和序列长度是平方关系。如果直接把原图每个像素当成一个词序列长度就是几十万算不动。压到 25×25 之后序列长度只有六百多这才勉强能算。那 2048 个通道分别代表什么每个通道提取的是不同维度的特征——有的对边缘敏感有的对纹理敏感有的对颜色敏感。2048 个通道叠在一起就是这张图的一个高维描述。通道数多不代表信息多它更多是给后面的注意力机制留出足够的选择空间。接下来是三个处理步骤ppt 里列得很清楚。第一步维度压缩。用一个 1×1 卷积把通道数从 C 压到 d。1×1 卷积的作用是跨通道做线性组合不改变空间尺寸只改变通道数。这一步的目的是把 2048 压到一个 Transformer 算得动的量级。第二步序列化。把 d×H×W 的三维张量 reshape 成 d×HW 的二维矩阵。空间上的高和宽被拉平成一个维度每个位置变成一个“词”每个词是一个 d 维向量。这就是 Transformer 能吃的格式。第三步加位置编码。这一步不能省原因下一节讲。三个步骤看着机械但每一步都有代价1×1 卷积会损失一部分通道信息reshape 会丢掉二维的邻接结构位置编码是补救措施。汇报时如果只念步骤不说代价很容易被问住。3.2 Transformer 编码器把特征图当成一句话来读Transformer 原本是为序列设计的。一句话里第 3 个词和第 10 个词有什么关系靠注意力机制去算。把特征图拉平成序列之后这套机制就能直接搬过来用。编码器的每一层做的事是让序列里每个位置都和所有其他位置算一次相关性然后按相关性加权汇总信息。一层下来每个位置看到的就不只是自己那一小块而是整张图的全局信息。堆几层之后每个位置携带的都是一个“结合了全图上下文”的表示。这就是 CNN 和 Transformer 的关键差别。卷积的感受野是局部的想看全局得靠一层层堆叠慢慢扩大自注意力一次就能看到所有位置距离不再是障碍。ppt 里说“得到序列之间的依赖关系从而使得模型有选择地聚焦于输入的某些部分”讲的就是这件事。模型并不是均匀地看全图而是学会了对不同的位置分配不同的注意力权重——哪些位置和当前这个位置有关权重就高无关的就压低。位置编码在这里是必需品。原因是自注意力本身对顺序不敏感——把序列打乱算出来的结果一模一样。但特征图上的位置显然是有意义的左上角和右下角完全是两回事。所以要把位置信息编码成向量加到每个位置上让模型知道“谁在哪”。ppt 的消融实验里有一条不使用空间位置编码和输出位置编码AP 会显著下降。这个结果反过来证明了位置编码不是锦上添花是地基。去掉它模型看到的就是一堆无序的特征向量空间关系全丢了。3.3 解码器与 object queriesN 个固定“提问位”编码器输出的是“整张图的理解”接下来要把它变成“具体的检测结果”。这一步由解码器完成。解码器和标准 Transformer 的解码器结构类似区别在于它在每一层并行解码 N 个目标而不是像翻译那样一个词一个词往外蹦。这个“并行”很关键它意味着推理耗时不受图里目标数量影响——一个目标和十个目标解码次数是一样的。解码器有两路输入。一路是编码器的输出代表图里的信息另一路是 object queriesN 个向量。object queries 是什么ppt 里说得很清楚N 个随机初始化、然后靠训练学出来的向量。它们不是从图里提取的是模型自己“长”出来的。每个 query 会学到一个提问习惯。ppt 里配了可视化第一个 query 关注左下角有什么物体第一行第二个关注中间靠下的位置等等。你可以把它们理解成 N 个拿着不同区域地图的侦察兵各自去图里找自己负责的那一块。但这些侦察兵之间是会互相通气的。解码器里的 self-attention 让 N 个 query 彼此交互避免两个 query 盯上同一个目标。这就是为什么 DETR 不需要 NMS——去重这件事在解码器内部就解决了不用等到事后。另一层是 encoder-decoder attention让每个 query 去编码器的输出里取它需要的信息。query 提什么问题就从图里取什么答案。这也是为什么 query 本身不需要携带位置信息——它靠注意力自己去图上找。3.4 FFN 与“无对象”槽位固定 N 个输出怎么收场解码器输出 N 个 embedding每个 embedding 送进一个共享的前馈网络得到最终的预测。这个 FFN 的结构ppt 写的是三层一个 ReLU 激活层一个 d 维的隐藏层一个线性投影层。输出分成两支一支预测归一化的中心坐标和宽高一支用 softmax 预测类别。所谓归一化是指坐标不是像素值而是相对整张图的比例。中心点 (0.5, 0.5) 就是图的正中央宽高 0.1 就是占图宽的十分之一。这样处理和图片分辨率解耦换尺寸不用改网络。这里有个必须解释的设计N 是固定的而且通常远大于图里实际的目标数。那多出来的槽位怎么办DETR 的答案是加一个特殊的类别ppt 里用 ∅ 表示意思是“这个槽位里没有检测到对象”。它的作用和传统检测里的 background 类似但语义不一样background 说的是“这一块像素属于背景”∅ 说的是“这个输出槽位没有被用上”。这个设计看着别扭其实是整套机制能转起来的前提。因为输出数量固定才能和补齐到同样数量的真值做一一匹配因为有一类专门表示“空”模型才有地方安放那些没匹配上的预测。训练时模型会学会在该给 ∅ 的地方给 ∅——给错了是要挨罚的。4. 二分图匹配与损失函数预测框和标注框怎么“对号入座”结构讲完了接下来是最容易被跳过、但汇报时最容易被追问的部分模型输出 N 个框真值只有 M 个损失怎么算这个问题看着琐碎其实是 DETR 整套设计里最精巧的一环。搞不清这里就说不明白它凭什么能去掉 NMS。4.1 集合预测的麻烦N 个输出和 M 个真值怎么配传统检测器不存在这个问题。因为每个预测都绑定在一个具体的先验框上哪个先验框对应哪个真值在数据准备阶段就定好了算损失的时候直接一一对应就行。DETR 没有这个绑定关系。它输出的 N 个框是无序的谁都不属于谁。如果随便按顺序配对会出大问题同一个预测第一次配给 A 目标算出一个损失换个顺序配给 B 目标又算出另一个损失。模型收到自相矛盾的信号根本学不动。所以必须先解决“配对”这件事配对完了才能算损失。思路是这样的把 N 个预测和 M 个真值看成二分图的两边找一种配对方式让总的匹配成本最小。这就是 ppt 里说的二分图匹配。它解决的其实是“谁该对谁负责”的问题。这里有个细节值得说清楚配对用的“成本”和后面算的“损失”不是一回事。成本是配对阶段的度量损失是配对完成后用来反传的。两者形式接近但作用和权重可以不同。汇报时如果把这两个混成一个词听众会以为配对过程也在反传梯度。4.2 匈牙利算法一次全局最优的“配对”求解这个最小成本配对用的是匈牙利算法。ppt 里点名了这个算法汇报时最好能说清楚它在干什么。做法是先构建一个 N×M 的成本矩阵第 i 行第 j 列的值表示第 i 个预测和第 j 个真值配在一起有多“贵”。这个成本由三部分组成分类成本预测成这个类别的概率越高越便宜、L1 距离、GIoU 距离。三项加权求和得到一个标量。然后匈牙利算法在这个矩阵上找一组配对使得总成本最小。它的特点是全局最优不是贪心——不会因为前面配了一个看起来还行的就放弃后面可能更好的组合。这一点很关键贪心配对在目标密集的场景下会明显吃亏。配对完成后每个预测要么分到一个真值要么没分到。分到的按类别和框的误差算损失没分到的只要求它把类别判成 ∅。没分到框的预测不参与框回归损失的计算这一点和传统检测里“背景框不回归”是一个道理。还有一个实现上的细节配对是在每张图上独立做的不是整个批次一起配。因为每张图的目标数不一样混在一起配没有意义。4.3 损失函数的组成L1 与 GIoU 为什么要一起用真值的表示ppt 给的是 yi (ci, bi)。ci 是类别标签bi 是一个四维归一化向量包含中心点相对整图的位置以及宽高相对整图的大小。损失分两部分。分类部分用负对数似然这个和常规检测器一样没什么特别。框回归部分有讲究。如果只用 L1 loss会有一个问题L1 对所有尺寸的框一视同仁。一个大框偏移 10 个像素可能无所谓一个小框偏移 10 个像素可能已经完全框不住了。但 L1 给出的惩罚是一样的。这就叫“对小目标不公平”。解决办法是加一个 GIoU loss。GIoU 衡量的是两个框的重合程度是个比例量和框的绝对大小无关。大框小框用同一把尺子量小目标就不会被大目标的损失淹没。ppt 的消融实验印证了这一点只用 L1 loss 时结果很差和 GIoU 结合使用之后APM 和 APL 都有改善。注意改善的是中等目标和大目标——因为小目标本来就难加 GIoU 更多是避免它们在总损失里被大目标压过去。下面这段伪代码把匹配和损失串起来看批维度做了简化# pred_logits: ( p a hrefhttps://download.csdn.net/download/m0_60152377/85219591 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
阅读完成 · 觉得有帮助?