有个城市之星的活动,加紧赶一篇博文出来吧。这是 VALSE 2023 大会(VALSE 2023 无锡线下参会个人总结 6月11日-2)上的一篇 Poster 论文,遂找来读读。
一对一匹配是 DETR 建立端到端训练的关键,以至目标检测不再需要 NMS了。然而更少的 queries 被赋值为正样本,导致一对一匹配显著减低了正样本的有效训练。于是提出混合匹配计划:在训练中结合原始的一对一匹配分支和辅助的一对多匹配分支。在推理过程中,仅采用原始的一对一匹配分支,维持端到端的优点以及 DETR 相同推理效率的同时,提高精度。本文提出的方法名为 H-DETR,提升了一系列包括 Deformable-DETR、PETRv2、PETR、TransTrack 等方法在大量视觉任务上的表现。
DETR 在各大视觉任务上都取得了突破性的进展,后续的工作通过重新设计更加先进的 Transformer 编码器和解码器结构,或者 query 的构成方法都实现了一定的提升。与之前不同,本文关注于一对一匹配造成的训练效率问题:仅给每个 GT 赋值一个 query。例如,在单个图像中,Deformable-DETR 通常从一组 300 个 queries 中仅选择少于 30 个的 query 来匹配 GT。于是将近 99% 的 COCO 图像中 boxes 选择标注的数量少于 30,而剩下的 270 个 queries 被赋值为空,仅由分类损失来监督,而这导致了非常低的定位能力。
为了克服一对一匹配的问题以及扩大正样本 queries 所带来的好处,本文提出混合匹配计划,通过引入额外的一对多匹配分支来赋值多个 queries 到每个正样本。在推理过程中,仅采用原始的一对一解码器分支,维持了端到端的优点以及 DETR 相同的推理效率的同时,提高了精度。
本文提出的混合匹配方法名为 H-DETR,在大量的视觉任务上验证了 H-DETR 及其变体的有效性。如下图所示;
列举 Deformable-DETR、DAB-DETR、DINO-DETR、DE-DETR。不同于这些工作,本文关注于 DETR 中的匹配机制,提升训练效率的同时保留了原版 DETR 的优点。
分割、3D 目标检测、姿态估计、目标跟踪。对于分割任务,首先构造 baseline 方法:Mask-Deformable-DETR,然后在这个 baseline 加上本文提出的方法。对于其他任务,直接采用最近提出的 PETRv2、PETR、TransTrack 作为 baseline 来验证本文的混合匹配方法。
现有的标签赋值可划分为两类:一对多的标签赋值,即为每个 GT box 赋值多个正样本的预测;一对一的标签赋值,为每个 GT box 仅赋值一个正样本预测,方法举例:POTO。本文采用混合匹配的方法。
与 DN-DETR 和 DINO-DETR 的关系
本文提出的方法与最近的这两个方法有关,通过引入 GT 目标噪声增强来辅助 queries。然而 DN-DETR 和 DINO-DETR 主要解决的是:由 Hungarian 赋值带来的不稳定性问题,本文主要解决:一对一匹配过程中正样本训练不充分的问题。
另外,DN-DETR 和 DINO-DETR 都设计了噪声方式以及在噪声 querise 和 GT 目标间手动赋值,本文提出的方法使用端到端赋值的方式来匹配辅助的 queries 和 GT boxes,相比于匈牙利匹配则更简单。DN-DETR/DINO-DETR 需要微调或者重新设计噪声方式及 query 的格式,本文的方法更容易拓展到其他 DETR 变体上而不需要额外的微调。
给定输入图像 I I I,DETR 首先应用 Backbone 和 Transformer 编码器来提取出增强的像素 embedding X = { x 0 , x 1 , ⋯ , x N } X=\{x_0,x_1,\cdots,x_N\} X={x0,x1,⋯,xN},之后将 X X X 和一组默认的目标 query embedding Q = { q 0 , q 1 , ⋯ , q n } Q=\{q_0,q_1,\cdots,q_n\} Q={q0,q1,⋯,qn} 送入到 Transformer 解码器。然后在解码器的输出上,DETR 利用特定任务的预测头将更新后的 Q Q Q 输出为一组预测 P = { p 0 , p 1 , ⋯ , p n } P=\{p_0,p_1,\cdots,p_n\} P={p0,p1,⋯,pn}。最后 DETR 在预测和 GT G = { g 0 , g 1 , ⋯ , g n } G=\{g_0,g_1,\cdots,g_n\} G={g0,g1,⋯,gn} 间执行一对一的双边匹配。具体来说,DETR 将具有最小匹配损失的预测和 GT 关联起来,然后利用相应的监督损失来训练。示意图如下:
后续的一些工作根据不同的的视觉识别任务修改目标 query 从而实现不同的功能,例如修改目标 query 为 mask query、pose query、track query、bins query 等等。
Deformable-DETR 从以下几个方面提升了 DETR:
需要注意的是 Deformable-DETR 和 DETR 同样执行的是一对一双边匹配原则。
混合匹配方法关键在于结合一对一匹配和一对多匹配,其中一对一匹配对于移除 NMS 是必须的,而一对多匹配丰富了与 GT 匹配的 queries 数量。
采用两组 queries Q = { q 1 , q 2 , ⋯ , q n } Q=\{q_1,q_2,\cdots,q_n\} Q={q1,q2,⋯,qn} 和 Q ^ = { q ^ 1 , q ^ 2 , ⋯ , q ^ n } \widehat Q=\{\widehat q_1,\widehat q_2,\cdots,\widehat q_n\} Q ={q 1,q 2,⋯,q n},前者用于执行一对一匹配,后者执行一对多匹配。
采用 L L L 层解码器处理第一组 Q Q Q,在每个解码器的输出层分别执行预测。之后在每一层的 {predictions,GT} 间执行双边匹配,估计 L ( P l , G ) \mathcal{L}{(\mathbf{P}^l,\mathbf{G})} L(Pl,G):
L one2one = ∑ L Hungarian ( P l , G ) \mathcal{L}_{\text{one2one}} =\sum\mathcal{L}_{\text{Hungarian}}(\mathbf{P}^l,\mathbf{G}) Lone2one=∑LHungarian(Pl,G)其中 P l \mathbf{P}^l Pl 表示第 l l l 层 Transformer 解码器层的输出预测。沿用 DETR 和 Deformable-DETR,选择 L m a t c h ( ⋅ ) \mathcal{L}_{match}(\cdot) Lmatch(⋅) 和 L H u n g a r i a n ( ⋅ ) \mathcal{L}_{Hungarian}(\cdot) LHungarian(⋅):由一个分类损失、 L 1 \mathcal{L}_1 L1 回归损失和 GIoU 损失组成。
之后,采用相同数量 L L L 层 Transformer 解码器来处理第二组 queries Q ^ \widehat {\mathbf{Q}} Q ,得到 L L L 组预测。为执行一对多匹配,简单重复 GT K K K 次,得到增强的目标 G ^ = { G 1 , G 2 , ⋯ , G K } \widehat{\mathbf{G}}=\{{\mathbf{G}}^1,{\mathbf{G}}^2,\cdots,{\mathbf{G}}^K\} G ={G1,G2,⋯,GK},其中 G 1 = G 2 = ⋯ = G K = G \mathbf{G}^1={\mathbf{G}}^2=\cdots={\mathbf{G}}^K=\mathbf{G} G1=G2=⋯=GK=G。同样在每层的 {predictions,增强的 GT} 对上执行双边匹配,估计 L match ( P ^ l , G ^ ) \mathcal{L}_{\text{match}}(\widehat{\mathbf{P}}^l,\widehat{\mathbf{G}}) Lmatch(P l,G ):
L one2many = ∑ l = 1 L L Hungarian ( P ^ l , G ^ ) \mathcal{L}_{\text{one2many}}=\sum_{l=1}^L\mathcal{L}_{\text{Hungarian}}(\widehat{\mathbf{P}}^l,\widehat{\mathbf{G}}) Lone2many=l=1∑LLHungarian(P l,G )其中 P ^ l \widehat {\mathbf{{P}}}^l P l 表示第 l l l 层 Transformer 解码器的预测输出。
训练总体损失为 λ L one2many + L one2one \lambda\mathcal{L}_{\text{one2many}}+\mathcal{L}_{\text{one2one}} λLone2many+Lone2one。为了加快训练速度和并行处理 Q \mathbf Q Q 和 Q ^ \widehat {\mathbf{Q}} Q ,进一步采用一种 masked 多头自注意力来避免彼此交互,实验中并未发现额外的训练损失。最后在评估过程中仅保持一对一匹配分支,即 Q \mathbf Q Q。
不同于混合分支计划,在混合 epoch 计划中,仅维持单组的 queries Q ~ = { q ~ 1 , q ~ 2 , ⋯ , q ~ M } \widetilde{\mathrm{Q}}=\{\widetilde{\mathrm{q}}_1,\widetilde{\mathrm{q}}_2,\cdots,\widetilde{\mathrm{q}}_M\} Q ={q 1,q 2,⋯,q M},在不同的训练 epochs 中基于 Q ~ \widetilde{\mathrm{Q}} Q 来执行一对一匹配和一对多匹配。
一对多匹配训练 epochs
在第一个 ρ \rho ρ 训练 epochs 内,采用一对一匹配来处理 L L L 层 Transformer 解码器中的 Q ~ \widetilde{\mathrm{Q}} Q ,从而得到 L L L 组预测。同时采用相似的策略通过一对多分支执行一对多匹配得到增强的 G ~ = { G 1 , G 2 , ⋯ , G K ~ } \tilde{\text{G}}=\{\text{G}^1,\text{G}^2,\cdots,\text{G}^{\tilde{K}}\} G~={G1,G2,⋯,GK~}。之后在 L ~ match ( P ~ l , G ~ ) \tilde{\mathcal{L}}_{\text{match}}(\widetilde{\mathbf{P}}^l,\widetilde{\mathbf{G}}) L~match(P l,G ) 间执行双边匹配:
L one2many = ∑ l = 1 L L Hungarian ( P ~ l , G ~ ) \mathcal{L}_{\text{one2many}}=\sum\limits_{l=1}^L\mathcal{L}_{\text{Hungarian}}(\widetilde{\mathbf{P}}^l,\widetilde{\mathbf{G}}) Lone2many=l=1∑LLHungarian(P l,G )
一对一匹配训练 epochs
在剩下的 1 − ρ 1-\rho 1−ρ 个 epochs 上执行一对一匹配,唯一的区别在于匹配预测和原始的 GT 的损失不同:
L one2one = ∑ L H u n g a r i a n ( P ~ l , G ) \mathcal{L}_{\text{one2one}} =\sum \mathcal{L}_{\mathrm{Hungarian}}(\widetilde{\mathbf{P}}^l,\mathbf{G}) Lone2one=∑LHungarian(P l,G)最后直接在评估时应用 Q ~ \widetilde{\mathrm{Q}} Q 。总结一下,在一个 ρ \rho ρ epochs 上仅应用 L one2many \mathcal{L}_{\text{one2many}} Lone2many,在剩下的 1 − ρ 1-\rho 1−ρ 个 epochs 上应用 L one2one \mathcal{L}_{\text{one2one}} Lone2one
与混合 epoch 计划类似,仅维持单组的 queries Q ‾ = { Q ‾ 1 , Q ‾ 2 , ⋯ , Q ‾ N } \overline{\mathbf{Q}}=\{\overline{\mathbf{Q}}_1,\overline{\mathbf{Q}}_2,\cdots,\overline{\mathbf{Q}}_N\} Q={Q1,Q2,⋯,QN}。在第一个 L 1 L_1 L1 Transformer 解码器层应用一对多匹配,而在剩下的 L 2 L_2 L2 层应用一对一匹配策略。
一对多匹配解码器层
在第一个 L 1 L_1 L1 层 Transformer 解码器的输出预测和增强的 GT G ‾ = { G ‾ 1 , G ‾ 2 , ⋯ , G ‾ K ‾ } \overline{\mathbf{G}}=\{\overline{\mathbf{G}}^1,\overline{\mathbf{G}}^2,\cdots,\overline{\mathbf{G}}^{\overline{K}}\} G={G1,G2,⋯,GK} 间应用一对多匹配计划:
L one2many = ∑ l = 1 L L Hungarian ( P ‾ l , G ‾ ) \mathcal{L}_{\text{one2many}}=\sum_{l=1}^L\mathcal{L}_{\text{Hungarian}}(\overline{\mathbf{P}}^l,\overline{\mathbf{G}}) Lone2many=l=1∑LLHungarian(Pl,G)在计算上述损失之前,也需要执行双边匹配 L match ( P ‾ l , G ‾ ) \mathcal{L}_{\text{match}}(\overline{\mathbf{P}}^l,\overline{\mathbf{G}}) Lmatch(Pl,G)。
一对一匹配解码器层
对接下来的 L 2 L_2 L2 层 Transformer 解码器,执行一对一匹配计划:
L one2one = ∑ l = L 1 L 1 + L 2 L Hungarian ( P ‾ l , G ) \mathcal{L}_{\text{one2one}}=\sum_{l=L_1}^{L_1+L_2}\mathcal{L}_{\text{Hungarian}}(\overline{\mathbf{P}}^l,\mathbf{G}) Lone2one=l=L1∑L1+L2LHungarian(Pl,G)总结:在整个训练过程中执行 L one2many \mathcal{L}_{\text{one2many}} Lone2many 和 L one2one \mathcal{L}_{\text{one2one}} Lone2one 的组合。
见补充材料 C 部分。
本文展示了一种简单但有效的混合匹配方法,解决基于 DETR 系列的方法在多个任务上的低效率问题。结合了一对一匹配方法的优势,即避免 NMS,和一对多匹配的优势,即增加正样本 queries 的数量和训练效率。希望大家都来 follow。
COCO、LVIS、nuScnes、ScanNetV2、MOT17。
在原始方法中,用两个独立的函数来简单执行一对一和一对多的匹配及损失计算,因此增加了整体的训练时间。当与使用相同数量 queries 的 baseline 方法进行比较时,从 75 分钟增加到 85分钟。为了降低这一额外的耗时,在下列算法中融合这两个函数,从而将原始的训练时间从 85 分降为 80 分 。
写在后面
别看这篇论文简短且简单,人家这个实验做的可是滴水不漏,工作量恐怖! 实验部分的做法与写法值得好好学习。