SEPatch3D:动态Patch压缩技术,突破ViT在多视角3D检测中的计算瓶颈
1. 项目概述:当ViT遇上多视角3D检测,计算瓶颈如何破局?
在自动驾驶的感知系统中,多视角3D目标检测是让车辆“看懂”三维世界的关键。它需要同时处理来自车身周围多个摄像头的图像,并将这些2D信息融合、推理,最终在三维空间中定位和识别出车辆、行人、障碍物等。近年来,Vision Transformer(ViT)凭借其强大的全局建模能力,在这一领域崭露头角,逐渐成为主流架构的基石。然而,当我们把ViT这套优秀的“大脑”搬到多摄像头、高分辨率、有时序依赖的3D检测场景时,一个严峻的挑战立刻浮现:计算爆炸。
问题的根源在于ViT处理图像的基本单元——Patch(图像块)。标准的ViT会将一张图片均匀地切割成固定尺寸(例如16x16像素)的Patch,每个Patch被编码为一个Token(令牌)。对于单张图片,这没问题。但在多视角3D检测中,我们需要一次性处理6个、8个甚至更多摄像头的高清图像(如nuScenes数据集中的1600x900分辨率)。更棘手的是,为了利用时序信息提升检测稳定性(比如判断静止车辆和移动车辆),模型往往需要同时处理连续多帧(如4帧)的图像。这样一来,需要处理的Token数量会呈几何级数增长。简单算一笔账:假设6个摄像头,每帧图像被切成约5000个Patch,连续4帧,那么模型入口就需要处理超过12万个Token。这不仅让推理速度慢如蜗牛,巨大的内存占用也让部署在车载计算单元上变得异常困难。
面对这个瓶颈,一个很自然的想法是借鉴2D视觉任务中的“Token压缩”技术,比如Token Pruning(令牌剪枝)或Token Merging(令牌合并),直接扔掉或合并一部分看似“不重要”的Token。然而,在3D检测这个特殊战场上,这套“减法”策略却常常失灵。原因在于,3D检测器(尤其是基于稀疏Query的先进方法,如StreamPETR)严重依赖图像中的背景信息来抑制“Hard Negative”(难以区分的负样本,例如远处的电线杆、模糊的交通标志)。这些背景区域虽然不直接包含待检测的目标,但它们提供了关键的上下文线索,帮助模型划定决策边界。粗暴地剪掉这些背景Token,相当于蒙上了模型的一只眼睛,虽然计算量下来了,但检测精度,尤其是对远处小物体和复杂场景的鲁棒性,会显著下降。
那么,有没有一种方法,既能大幅削减计算量,又能保住这些宝贵的背景信息呢?这正是我们团队在ECCV 2024上提出的SEPatch3D框架所要回答的核心问题。我们的思路不是做“减法”(剪Token),而是做“动态缩放”(调Patch)。我们不丢弃任何图像区域,而是根据场景的时空特性,智能地决定用“粗粒度放大镜”还是“细粒度显微镜”去看待不同的区域。具体来说,对于远处、运动平缓的物体主导的场景,我们使用更大的Patch尺寸(如22x22像素),用更少的Token覆盖相同的视野,减少冗余计算;对于近处、细节丰富的关键区域,我们则使用更精细的Patch尺寸(如16x16像素),保留足够的细节用于精确定位和分类。同时,我们只对筛选出的信息量最大的Patch区域进行额外的特征增强,避免“遍地开花”式的计算浪费。这套“动态Patch压缩”策略,在nuScenes和Argoverse 2两大权威自动驾驶数据集上,实现了在几乎不损失精度(NDS和mAP指标)的前提下,将推理速度提升最高达30%以上,为基于ViT的高效多视角3D检测开辟了一条新路。
2. 核心设计思路:为什么是动态Patch,而不是剪枝?
在深入技术细节之前,我们有必要先厘清SEPatch3D最根本的设计哲学:从“丢弃内容”转向“调整粒度”。这背后是对多视角3D检测任务本质的深刻理解。
2.1 Token剪枝在3D检测中的“水土不服”
为了定量说明问题,我们复现了多种经典的2D Token剪枝方法(如SparseDETR, Cropr, SViT),并将其应用到我们的基线模型StreamPETR上。我们在ViT的中间层(例如第6、12、18层)设置了固定的剪枝比例(如50%)。实验结果(如下表所示)一目了然:
| 方法 | NDS (%) | mAP (%) | 推理时间 (ms) |
|---|---|---|---|
| StreamPETR (基线) | 61.2 | 52.1 | 317.0 |
| + SparseDETR | 59.5 | 51.2 | 251.3 |
| + Cropr | 60.1 | 51.4 | 251.6 |
| + SViT | 60.3 | 51.1 | 250.0 |
| SEPatch3D (Ours-fast) | 61.2 | 52.1 | 250.2 |
可以看到,尽管Token剪枝成功地将推理时间降低了约20%,但所有方法都伴随着明显的精度损失(NDS下降0.9-1.7个百分点)。而我们的SEPatch3D在取得相近加速比的同时,完全守住了精度基线。这强有力地证明了,在3D检测任务中,单纯追求Token数量的减少是一条代价高昂的路径。
注意:这里的“精度损失”并非均匀分布。我们进一步分析了False Positive(误检)的情况。在固定召回率下,使用Cropr剪枝后,平均误检率(mFP)从35.4%飙升到了53.2%。这意味着剪枝后模型变得“疑神疑鬼”,把大量本应是背景的区域误判成了物体。这恰恰印证了背景Token对于抑制误检的关键作用。
2.2 动态Patch尺寸的直觉与优势
那么,动态调整Patch尺寸的优势何在?我们可以用一个简单的类比来理解:想象你在查看一张卫星地图。如果你想了解整个城市的布局,你会放大到能看到街区轮廓的级别(大Patch,低细节,全局快)。但如果你想找到某条小巷里的一个咖啡馆,你就必须放大到能看清门牌号的级别(小Patch,高细节,局部精)。动态Patch策略就是让模型学会根据当前“任务”(场景内容)自动切换“缩放级别”。
在多视角3D检测中,这个“任务”主要由两个因素驱动:
- 场景深度(空间线索):远处的物体在图像中占据的像素面积小,细节模糊。用大Patch去覆盖它,既不会丢失太多有用信息(因为本来细节就少),又能显著减少Token数量。反之,近处的物体像素面积大、细节丰富,必须用小Patch来捕捉其精细特征。
- 物体运动(时序线索):快速运动的物体或新出现的物体,其状态不确定性高,需要更精细的观察(小Patch)来准确估计其位置和速度。静止或运动缓慢的物体,其状态变化平缓,可以用相对粗糙的表示(大Patch)来跟踪。
基于此,SEPatch3D的核心设计围绕两个模块展开:
- SPSS(时空感知的Patch尺寸选择)模块:负责宏观决策。它综合分析当前帧的空间深度信息和历史帧的时序运动信息,为整个场景(或图像网格)动态选择一个最优的Patch尺寸(例如,在16和22之间选择)。这是计算效率提升的主要来源。
- IPS(信息性Patch选择)模块:负责微观优化。在SPSS选定的Patch网格基础上,IPS模块会进一步识别出哪些Patch区域包含了对3D检测最关键的信息(通常是物体边缘、高纹理区域等),并只对这些选中的“信息性Patch”进行额外的特征增强计算,避免了对平滑天空、路面等低信息量区域的无效计算。
这套“宏观动态缩放 + 微观重点增强”的组合拳,确保了模型的计算资源始终被用在“刀刃”上。
2.3 与FlexiViT等灵活Patch工作的区别
有读者可能会联想到像FlexiViT这类支持可变Patch尺寸的ViT变体。它们确实允许在一个模型中处理不同尺寸的Patch,但其主要目的是提升模型在不同分辨率输入下的泛化能力,而不是为了动态加速。FlexiViT在推理时,Patch尺寸通常是预先固定好的,或者需要针对不同尺寸进行模型微调。而SEPatch3D的SPSS模块是在推理过程中根据输入内容实时、自适应地决定Patch尺寸,并且与下游的3D检测头进行端到端协同训练,其优化目标直接指向最终的检测精度与效率的权衡。这是面向任务的动态优化与面向架构的静态灵活性之间的本质区别。
3. 核心模块深度解析:SPSS与IPS如何协同工作?
理解了为什么这么做,接下来我们拆解SEPatch3D是如何实现的。整个框架可以无缝集成到现有的基于ViT的稀疏多视角3D检测器(如StreamPETR)中,其核心是SPSS和IPS两个可插拔模块。
3.1 SPSS模块:时空感知的Patch尺寸选择器
SPSS模块的目标是为每一帧输入图像(或图像网格)输出一个最优的Patch尺寸 ( P_s \in {P_{small}, P_{large}} ),例如 ( P_{small}=16, P_{large}=22 )。其决策依据融合了空间和时序两类信息。
输入与特征提取:
- 空间线索:我们利用一个轻量化的卷积网络,从当前帧的图像特征中快速提取一个全局深度分布估计。这个估计不需要非常精确的逐像素深度,而是得到一个反映场景整体远近的标量或低维向量,例如“本帧图像中物体的平均深度”。
- 时序线索:我们维护一组历史帧的检测结果(如3D框的位置、速度)。通过一个小的LSTM或GRU网络,我们编码物体运动的趋势,输出一个运动活跃度分数。
决策与融合: 我们将空间深度特征和时序运动特征拼接,送入一个简单的多层感知机(MLP)。这个MLP的输出是一个二分类概率,分别对应选择小Patch尺寸 ( P_{small} ) 和大Patch尺寸 ( P_{large} ) 的置信度。在训练时,我们使用Gumbel-Softmax技巧使这一选择过程可微分;在推理时,则直接取argmax。
实操心得:第一帧的“安全垫”。在序列检测的开始(第一帧),我们没有历史信息。此时SPSS模块会采用一个预设的、相对保守的初始Patch尺寸(例如 ( P_{small} ) )作为回退方案,确保初始性能稳定。从第二帧开始,SPSS才被激活进行动态选择。这个细节对于实际部署的稳定性至关重要。
效果验证:我们统计了在nuScenes验证集上,SPSS模块选择不同尺寸的频率。在320x800的输入分辨率下,我们的“fast”版本选择了2654次小Patch和3365次大Patch,比例约为44%:56%。“faster”版本的比例也类似。这说明SPSS并非总是偏向某一种尺寸,而是进行了有效的动态调整。如下图所示,在一个典型场景中,随着车辆前行,远处物体平均深度增加,SPSS选择的Patch尺寸也随之增大,证明了其决策与场景内容的关联性。
3.2 IPS模块:信息性Patch的“注意力”聚焦器
在SPSS决定了用“多大格子”划分图像后,IPS模块的任务是判断“哪些格子更重要”。它的输入是经过Patch Embedding后得到的Token序列(对应细粒度Patch ( P_{small} ) 的网格)。IPS的目标是生成一个二值掩码,标识出哪些Token值得进行后续更复杂的特征增强(通过CGFE模块)。
自适应选择策略: 一个朴素的方法是固定比例Top-K选择,即永远只保留得分最高的前K%的Token。但我们发现这并不work。如表所示,无论K设为30%、50%还是70%,其检测精度(NDS, mAP)均低于基线,且推理时间并非最优。
| 选择策略 | 保留比例 | NDS (%) | mAP (%) | 推理时间 (ms) |
|---|---|---|---|---|
| 基线 (无IPS) | - | 61.2 | 52.1 | 317.0 |
| Top-K | 30% | 59.6 | 51.0 | 198.4 |
| Top-K | 50% | 59.8 | 51.1 | 202.7 |
| Top-K | 70% | 59.9 | 51.3 | 207.6 |
| 自适应 (Ours) | 动态 | 60.3 | 51.6 | 194.3 |
固定比例的问题在于场景复杂度是变化的。简单场景可能只需要关注10%的区域,复杂场景可能需要关注50%。固定比例要么漏掉关键信息,要么引入大量冗余。
因此,我们设计了一个自适应的门控机制。对于每个Token,我们计算一个信息量得分 ( s_i ),这个得分基于该Token的特征本身以及其局部上下文。然后,我们不是设定一个全局阈值,而是设定一个动态的预算。这个预算可以是一个轻量级网络根据当前图像特征预测的“本帧所需信息量比例”,也可以是一个与SPSS输出联动的函数(例如,当选择大Patch时,预期需要关注的比例更小)。最终,我们选择信息量得分最高的前 ( B ) 个Token,其中 ( B ) 由动态预算决定。
为何只在细粒度Patch后做选择? 我们也尝试了将IPS模块放在粗粒度Patch特征之后,或者同时对粗细粒度特征做选择。实验表明(如下表),将IPS仅应用于细粒度Patch特征之后,能取得最佳的精度-效率权衡。
| IPS模块位置 | NDS (%) | mAP (%) | 推理时间 (ms) |
|---|---|---|---|
| 仅在细粒度Patch后 | 60.3 | 51.6 | 194.3 |
| 仅在粗粒度Patch后 | 60.2 | 51.7 | 209.2 |
| 在两者之后 | 60.4 | 51.7 | 213.8 |
这是因为,粗粒度Patch本身已经丢失了部分细节,在其基础上做选择,然后再映射回细粒度进行增强,会引入不精确的对应关系,导致无关的细粒度Patch被错误地包含进来,增加了计算冗余。直接在最原始的、信息保留最完整的细粒度特征上进行筛选,是最直接有效的。
3.3 CGFE模块:跨粒度特征增强
这是IPS的配套模块。对于那些被IPS选中的“信息性Patch”,我们需要增强它们的特征表示能力,以弥补可能因使用大Patch而损失的细节。CGFE模块的核心思想是跨粒度特征融合。
具体来说,对于每个被选中的细粒度Token,我们不仅使用它自身的特征,还从其对应的粗粒度Patch区域中提取上下文特征。这个“对应区域”可以通过简单的空间坐标映射找到。然后,我们通过一个轻量的交叉注意力机制或特征拼接+MLP的方式,将细粒度的细节特征和粗粒度的上下文特征融合起来,生成一个增强后的Token特征。这个过程只对被选中的Token进行,计算开销可控。
4. 实现细节与训练技巧
要让SEPatch3D这套动态系统稳定工作,训练策略和实现细节上有不少讲究。
4.1 分阶段训练策略
我们采用了一个两阶段的训练流程,这在实践中被证明是稳定有效的:
- 第一阶段(基础检测器训练):首先,我们冻结SPSS和IPS模块,使用一个灵活的Patch Embedding层(例如借鉴FlexiViT的思想)来训练基础的3D检测器。在这个阶段,我们固定使用单一的Patch尺寸(例如 ( P_{small} ) )进行训练,持续24个epoch(在nuScenes上)。目的是让检测器首先学会在一个稳定的、高精度的输入表示下进行检测,打下良好的性能基础。
- 第二阶段(动态模块联合微调):在基础检测器收敛后,我们解冻SPSS和IPS模块,并将它们与检测器一起进行端到端的联合微调,持续12个epoch。在这个阶段,SPSS开始学习动态选择Patch尺寸,IPS学习选择信息性区域。由于基础检测器已经具备了较强的检测能力,动态模块可以更专注于学习如何高效地分配计算资源,而不必从零开始学习检测本身。
注意事项:在第二阶段训练时,由于SPSS的选择是离散的(二选一),我们使用Gumbel-Softmax技巧来提供梯度。同时,需要给SPSS和IPS的预测结果加入适度的正则化损失(如熵正则化),防止其预测结果过于极端或不确定。
4.2 超参数选择与消融实验
为什么只用两种Patch尺寸? 这是一个很实际的设计选择。我们实验了提供更多可选的Patch尺寸(如16, 18, 20, 22)。结果发现,当可选项增加到三个或四个时,模型在基准尺寸(16)上的性能会出现逐渐下降。如下图所示,使用(16, 18)两种尺寸已经能达到与单尺寸基线相当的性能,而增加更多尺寸反而导致性能下滑。
我们分析认为,过多的Patch尺寸选项增加了Token分布模式的复杂性,迫使检测头需要去适应多种不同粒度的特征表示,这分散了其优化注意力,导致其对任何一种特定尺寸的 specialization(专业化)能力减弱。因此,两种尺寸提供了一个足够灵活的调整范围(约37.5%的Token数量变化),同时保持了模型的简洁和强专业性。
SPSS中时空线索的贡献: 我们通过消融实验拆解了空间线索(深度)和时序线索(运动)各自的作用:
| 空间线索 | 时序线索 | NDS (%) | mAP (%) | 推理时间 (ms) |
|---|---|---|---|---|
| 61.2 | 52.1 | 317.0 | ||
| ✓ | 59.7 | 51.2 | 195.5 | |
| ✓ | 59.5 | 51.3 | 191.3 | |
| ✓ | ✓ | 60.3 | 51.6 | 194.3 |
可以看到,单独使用任何一种线索都能大幅降低推理时间(约40%),但都会带来明显的精度损失。只有当两者结合时,SPSS模块才能做出更准确的决策,在显著加速的同时,将精度损失控制在极小的范围内(NDS仅下降0.9,而mAP甚至略有提升)。这证明了融合时空信息对于做出合理Patch尺寸决策的必要性。
5. 实验结果与性能分析
我们在自动驾驶领域两个主流的大规模数据集上进行了全面评估:nuScenes和Argoverse 2。基线模型选用目前性能领先的稀疏查询式多视角3D检测器StreamPETR。
5.1 主要结果
下表展示了SEPatch3D在nuScenes验证集上的结果。我们提供了两个版本:“SEPatch3D-fast”在精度(NDS, mAP)上完全匹配基线,同时将推理时间从317ms降低到250ms,加速比达21%。“SEPatch3D-faster”版本在精度上有微小妥协(NDS下降0.4),但进一步将推理时间降低到218ms,加速比达31%。
| 模型 | NDS (%) | mAP (%) | 推理时间 (ms) | 加速比 |
|---|---|---|---|---|
| StreamPETR (基线) | 61.2 | 52.1 | 317.0 | - |
| SEPatch3D-fast | 61.2 | 52.1 | 250.2 | 21.1% |
| SEPatch3D-faster | 60.8 | 51.8 | 218.1 | 31.2% |
更重要的是,我们对比了同类加速方法。如前文所述,基于Token剪枝的方法(SparseDETR, Cropr, SViT)在相似加速比下,NDS指标下降了0.9-1.7个百分点。而SEPatch3D在实现加速的同时,守住了精度底线,甚至在“fast”版本上做到了无损加速。
5.2 可视化分析
为了直观理解SPSS和IPS模块的工作方式,我们进行了大量的可视化。
SPSS动态调整可视化:我们选取了一段连续帧序列。如图所示,当自车转弯进入一条新的道路段,远处出现了新的物体(红色框标注)时,SPSS将Patch尺寸从20调整到了22。这是因为新出现的物体距离较远,细节需求低,增大Patch尺寸可以减少Token数量。相反,在另一段序列中,随着前方车辆逐渐靠近,在图像中占据区域变大,SPSS又将Patch尺寸从22调回20,以捕捉更多的细节。这生动展示了SPSS根据场景内容动态调整的能力。
IPS关注区域可视化:我们通过热力图可视化了IPS模块选中的“信息性Patch”。可以看到,这些区域高度集中在车辆边缘、行人轮廓、交通标志等对3D检测至关重要的区域,而大面积的路面、天空等均匀区域则被有效地过滤掉了。经过CGFE模块增强后,这些关键区域的特征响应明显变得更加尖锐和突出。
检测结果对比:我们将SEPatch3D-faster与基线StreamPETR的检测结果进行并排可视化。在多数场景下,两者的检测框几乎重合,SEPatch3D-faster没有出现明显的漏检或误检。这表明我们的方法在显著提升速度的同时,确实保持了高质量的检测性能。
5.3 效率与部署考量
SEPatch3D的加速收益主要来源于两个方面:
- Token数量的直接减少:通过SPSS选择更大的Patch尺寸,输入ViT的Token总数减少。这是最主要的加速来源,因为Transformer的计算复杂度与Token数量的平方成正比。
- 条件计算的引入:IPS模块和CGFE模块只对部分Token进行计算,实现了条件计算,进一步节省了开销。
在部署方面,SPSS和IPS模块本身是轻量级的(主要由小型CNN、LSTM/GRU和MLP构成),其计算开销与庞大的ViT主干和检测头相比可以忽略不计。因此,整个框架可以方便地集成到现有的ViT检测器中,无需改变其核心架构。
避坑指南:实际部署时的延迟波动。由于SPSS是动态决策的,不同帧的推理时间可能会有轻微波动(取决于选择的Patch尺寸和IPS选中的Token数量)。在追求极致稳定帧率的车载系统中,需要评估这种波动是否在可接受范围内。我们的测试表明,在nuScenes数据集上,延迟的标准差很小,不会对整体系统稳定性造成影响。
6. 局限性与未来展望
尽管SEPatch3D在精度和效率的权衡上取得了不错的效果,但它仍然存在一些局限性,这也指明了未来的改进方向。
当前局限:
- 启发式先验依赖:目前SPSS模块的决策依赖于手工设计的深度估计和运动编码网络,其选择的“最优”Patch尺寸本质上是一种基于经验的启发式策略。在极端复杂、动态变化的场景下(如密集车流突然出现、恶劣天气),这种启发式规则可能无法总是做出最佳选择。
- 离散的尺寸选择:当前框架只支持在预定义的、离散的几种Patch尺寸间切换(如16和22)。这虽然简化了问题,但可能不是最平滑、最优的粒度控制方式。
未来工作方向:
- 可学习的Patch尺寸选择:一个很自然的延伸是让网络自己学会决定Patch的粒度。我们可以探索连续或更细粒度的Patch尺寸预测,甚至让模型为图像的不同区域预测不同的Patch尺寸(非均匀划分),实现更精细的计算资源分配。
- 与底层硬件协同优化:SEPatch3D产生的动态计算图(不同帧的Token数和计算路径不同)对硬件加速器(如GPU)的友好度需要进一步研究。未来可以探索与稀疏计算库、动态形状编译器等技术的结合,以在硬件层面获得更大的加速收益。
- 扩展到更广泛的任务:动态Token压缩的思想并不局限于3D目标检测。我们计划将其扩展到其他基于查询(Query)的时空场景理解任务,例如3D占据栅格预测(3D Occupancy Prediction)和世界模型(World Model),在这些同样需要处理大量视觉Token且对效率敏感的任务中验证其通用性。
回过头看,SEPatch3D的核心价值在于它提供了一种新的视角:面对ViT在高分辨率、多模态、时序任务中的计算瓶颈,与其纠结于“扔掉哪些Token”,不如思考“如何更智能地看待这些Token”。通过动态调整观察的“粒度”,我们既保住了信息的完整性,又甩掉了计算的冗余性。这套思路,或许能为未来更多视觉大模型的高效部署,点亮一盏不一样的灯。