PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images
全文摘要
本文介绍了一种名为PETRv2的统一框架,用于从多视图图像中进行三维感知。该框架基于先前提出的PETR框架,并探索了时间建模的有效性,利用前一帧的时间信息来提高三维物体检测效果。作者在PETR的基础上扩展了三维位置嵌入(3D PE),以实现不同帧对象位置之间的时间对齐,并引入了一个特征引导的位置编码器来改善3D PE的数据适应性。为了支持多任务学习(如BEV分割和三维车道检测),PETRv2提供了简单而有效的解决方案,通过引入特定于任务的查询,在不同的空间下初始化。实验结果表明,PETRv2在三维物体检测、BEV分割和三维车道检测等方面取得了最先进的性能。此外,还进行了详细的鲁棒性分析。作者希望PETRv2能够成为三维感知的强大基准线。代码可以在https://github.com/megvii-research/PETR上获得。
论文方法
方法描述
本文提出的PETRv2是一种基于多视角图像的自动驾驶感知框架,用于检测、分割和识别场景中的对象和车道线。该框架建立在先前的PETR模型之上,并增加了时序建模和BEV分割模块。
首先,对于每帧图像,使用ResNet-50等预训练的卷积神经网络提取特征。然后,根据相机坐标系生成3D坐标。考虑到车辆运动的影响,将前一帧的3D坐标通过姿态变换转换到当前帧的坐标系中。接着,将相邻两帧的2D特征和3D坐标分别连接起来,输入到特征引导位置编码器(FPE)中,以生成关键值和值组件供Transformer解码器使用。最后,将检测、分割和车道查询初始化于不同空间并注入Transformer解码器,更新后的查询被送入任务特定头以进行最终预测。
方法改进
与原始的PETR模型相比,PETRv2引入了以下改进:
- 增加了时序建模:通过计算3D坐标之间的距离,实现跨帧目标定位和速度估计。
- 引入了BEV分割模块:通过为每个指定区域分配一个seg查询来实现高分辨率BEV地图的分割。
- 添加了3D车道检测功能:通过添加lane查询来支持3D车道检测。
此外,本文还提出了特征引导位置编码器(FPE),以利用2D特征提供视觉先验信息。
解决的问题
PETRv2主要解决了以下问题:
- 跨帧目标定位和速度估计:通过计算3D坐标之间的距离,实现了跨帧目标定位和速度估计。
- 高分辨率BEV地图分割:通过为每个指定区域分配一个seg查询,实现了高分辨率BEV地图的分割。
- 3D车道检测:通过添加lane查询,支持3D车道检测。
这些改进使得PETRv2能够更准确地检测、分割和识别场景中的对象和车道线,从而提高自动驾驶系统的性能。
论文实验
本文主要介绍了基于PETR模型的多帧3D目标检测方法PETRv2,并进行了多项对比实验以验证其性能表现。
首先,在nuScenes和OpenLane两个数据集上,作者比较了PETRv2与近期其他公开方法在3D物体检测任务上的性能差异。结果表明,PETRv2在nuScenes测试集中取得了39.8%的mAP和49.4%的NDS,相较于PETR模型有显著提升。此外,PETRv2在BEV分割任务中也表现出色,实现了更好的IoU分数。
其次,作者还对PETRv2进行了不同参数设置下的对比实验,如使用不同的摄像头旋转幅度等。结果显示,增加锚点数量可以进一步提高模型性能,而引入FPE模块则有助于提高模型鲁棒性。
最后,作者还分析了模型在存在相机时间延迟、相机丢失等情况下的性能表现。实验结果表明,时间延迟对模型性能影响较大,相机丢失也会导致较大的性能下降。
综上所述,PETRv2在多个数据集和任务上均表现出优异的性能,且具有较强的鲁棒性和可扩展性。
论文总结
文章优点
该论文提出了一种名为PETRv2的统一框架,用于从多相机图像中实现三维感知。该框架在原有基础上增加了时序建模和多任务学习,并通过引入特征引导位置编码(FPE)来改进了原始的3D位置嵌入(3D PE)。实验结果表明,该框架在3D目标检测、BEV分割和3D车道检测等任务上均取得了最先进的性能。
方法创新点
该论文的主要贡献在于提出了以下几点创新点:首先,作者研究了将位置嵌入变换扩展到时序表示学习的概念,通过相机参数将相机视图中的3D坐标转换为当前帧和前一帧之间的相对坐标,从而实现了时序建模;其次,作者设计了一种针对不同任务的任务特定查询方案,使得不同的任务可以共享相同的解码器,同时使用不同的头部产生高质量的预测结果;最后,作者引入了特征引导位置编码(FPE),通过对2D图像特征进行注入并应用sigmoid层来重新加权3D PE,使其更加数据依赖,提供更有效的查询指导。
全文翻译
摘要
本文提出PETRv2,这是一种用于多视图图像的三维感知统一框架。基于PETR[24],PETRv2探索了时间建模的有效性,利用前一帧的时间信息来提升三维物体检测性能。具体来说,我们扩展了PETR中的3D位置嵌入(3D PE)进行时间建模。3D PE在不同帧的对象位置上实现了时间对齐。此外,还引入了一个特征引导的位置编码器以提高3D PE的数据适应性。为了支持多任务学习(例如BEV分割和3D车道检测),PETRv2通过引入任务特定查询提供了一种简单而有效的解决方案,这些查询是在不同的空间中初始化的。PETRv2在三维物体检测、BEV分割和3D车道检测方面取得了最先进的性能。我们也对PETR框架进行了详细的鲁棒性分析。我们希望PETRv2能够作为三维感知的强大基准。代码可在https://github.com/megvii-research/PETR获得。
1.介绍
最近,自动驾驶系统中的多摄像头三维感知引起了广泛关注。基于BEV的多摄像头三维目标检测方法可以分为BEV基[11、12]和DETR基[20、24、39]的方法。基于BEV的方法(例如,BEVDet [12])通过LSS [33]显式地将多视图特征转换为鸟瞰图(BEV)表示。与这些BEV基部分不同,基于DETR的方法[39]将每个3D对象建模为一个对象查询,并使用匈牙利算法[16]实现端到端建模。在这些方法中,PETR [24],基于DETR [4],通过添加3D位置嵌入(3D PE),将多视图2D特征转换为具有3D位置意识的特征。从3D空间初始化的对象查询可以直接
通过与生成的3D位置感知特征交互来感知3D对象信息。在本文中,我们旨在通过将PETR扩展到时间建模和多任务学习的支持来构建一个强大的统一框架。
对于时间建模,主要问题是如何在三维空间中对不同帧的对象位置进行对齐。现有工作 [11, 20] 从特征对齐的角度解决了这个问题。例如,BEVDet4D[11] 显式地通过姿态变换将前一帧的 BEV 特征与当前帧对齐。然而,PETR 暗示地将 3D 位置编码到二维图像特征,并且无法执行显式的特征转换。由于 PETR 已经证明了 3D PE(将 3D 坐标编码到 2D 特征)在 3D 视觉感知的有效性,我们想知道 3D PE 是否仍然适用于时间对齐。在 PETR 中,相机投影空间中的网格点,用于不同的视图共享,由相机参数转换为 3D 坐标。然后将这些 3D 坐标输入到简单的多层感知器 (MLP) 来生成 3D PE。在我们的实践中,我们发现仅通过将前一帧的 3D 坐标与当前帧对齐,PETR 在时间条件下表现良好。
对于多任务学习,BEVFormer [20] 提供了一个统一的解决方案。它将BEV地图上的每个点定义为一个BEV查询。因此,BEV查询可以用于3D对象检测和BEV分割。然而,在分辨率较大的情况下(例如,256×256),BEV图中的BEV查询的数量(例如,>60,000)往往会变得巨大。这种对物体查询的定义显然不适合PETR,因为transformer解码器中使用了全局注意力。在本文中,我们设计了一种适用于多任务学习的统一稀疏查询方案。对于不同的任务,我们在不同的空间下定义了不同的稀疏任务特定查询。例如,为了进行3D车道检测,车道查询是在锚定车道风格的3D空间中定义的;而为了进行BEV分割,初始化的seg查询是在BEV空间中进行的。这些稀疏的任务特定查询输入到相同的transformer解码器中更新其表示,并进一步注入到不同任务特定的头部以生成高质量的预测。
此外,我们还改进了PETR中的三维PE的生成,并对PETRv2进行了详细的稳健性分析。如上所述,在PETR中,基于相机投影空间中的固定网格点生成三维PE。所有来自一个相机视图的所有图像共享相同的三维PE,使得三维PE数据无关。在此论文中,我们进一步通过引入特征引导的位置编码器(FPE)来改进原始的三维PE。具体来说,将投影到二维上的特征首先注入一个小的多层感知机网络和Sigmoid层以产生注意力权重,该权重用于在元素级别重新加权三维PE。改进后的三维PE是数据依赖性的,为变压器解码器中的查询学习提供信息指导。为了对PETRv2进行全面的稳健性分析,我们考虑了多个噪声情况,包括相机外参噪声、相机丢失和时间延迟。
总结起来,我们的贡献是:
• 我们研究了一种概念简单的位置嵌入变换的扩展,用于时间表示学习。通过在三维PE上进行姿态变换可以实现时间对齐。进一步提出一种特征引导的位置编码器来重新权重三维PE,并从二维图像特征中获得指导。
• 对PETR进行多任务学习的支持,提出了一种简单而有效的解决方案。通过引入任务特定的查询支持BEV分割和三维车道检测。
• 实验表明,所提出的框架在三维物体检测、BEV分割和三维车道检测方面均达到了最先进的性能。此外,还提供了PETR框架的全面评估中详细的鲁棒性分析。
相关工作
2.1 多视图三维对象检测
先前的工作 [2,6,13 - 15,29,35,37,38] 主要是在单视图设置下进行三维物体检测。最近,基于多视图图像的三维物体检测引起了更多的关注。ImVoxelNet[34] 和 BEVDet[12] 投影了多视图图像特征到 BEV 表示中。然后可以使用来自三维点云的方法来执行三维物体检测,例如[42]。DETR3D[39] 和 PETR[24] 主要受端到端 DETR 方法[4,23,28,46]启发,对三维物体检测进行了操作。对象查询在三维空间中定义,并与多视图图像特征交互,在变压器解码器中。BEV-Former[20] 进一步将时间信息引入基于视觉的三维物体检测。采用空间交叉注意力聚合图像特征,而自注意力用于融合历史 BEV 特征。BEVDet4D[11] 在 BEVDet[12]的基础上扩展了。
时域建模并实现了良好的速度估计。BEVFormer [20] 和 BEVDet4D [11] 在 BEV 空间中对多帧特征进行对齐。与它们不同,我们从三维位置嵌入(3D PE)的角度扩展了PETR 的时间版本,并实现时间对齐。
2.2. BEV分割
BEV分割专注于BEV视图中的感知。它将多视图图像作为输入,并将其输出栅格化到地图视图中。VPN [30] 在模拟环境中提出了一种视图解析网络,然后将其转移到真实世界环境中进行跨视图语义分割。LSS [33] 通过隐式估计深度并将二维特征转换为三维空间来转换二维特征,并使用不同的头执行BEV分割和规划。M2BEV [40] 进一步使用相机参数投影从主干提取的特征到三维自我汽车坐标系以生成BEV表示。然后使用多个任务头进行三维检测和分割。BEVFormer [20] 使用预定义的网格状BEV查询与二维图像特征交互以生成BEV特征。CVT [43] 使用交叉视图变压器学习几何变换。HDMapNet [19] 将多视图图像转换为BEV视图并产生矢量化局部语义地图。BEVSegFormer [32] 提出多摄像头可变形注意力构建语义地图。
2.3. 三维车道检测
BEV分割可以重建局部地图的元素,但是它无法建模不同实例之间的空间关联。最近,三维车道检测任务越来越受到关注。3D-LaneNet [7] 是第一个进行三维车道预测的方法。它使用逆透视映射 (IPM) 将特征从正面视图转换到 BEV。Gen-LaneNet [8] 引入了一个新的锚定车道表示来对齐视角锚定表示和 BEV 特征。Persformer [5] 使用可变形注意力通过参考点周围的局部上下文生成 BEV 特征。Curve-Former [1]引入了曲线交叉注意模块计算曲线查询与图像特征之间的相似性。它使用可变形注意力获取对应于参考点的图像特征。
方法
3.1 总体架构
如图1所示,PETRv2的整体架构基于PETR[24]并扩展了时序建模和BEV分割。从多视图图像中提取二维图像特征。
图1所示。提出的PETRv2的范例。利用骨干网络从多视图图像中提取二维特征,并按照与PETR[24]相同的方法生成三维坐标。为了实现时间对齐,首先对前一帧t−1的PETR中的三维坐标进行位姿变换。然后将两帧的二维图像特征和三维坐标连接在一起,注入到特征引导的位置编码器中,生成用于变压器解码器的密钥和值分量。检测、分割和通道查询在不同空间下初始化,与变压器解码器中的键值组件相互作用。更新后的查询进一步用于预测具有特定任务头部的3D边界框、BEV分割图和3D车道。A为从第t−1帧到第t帧的三维坐标对齐。C为沿着批处理轴的串联操作。
2D主干(例如ResNet-50),并从相机投影空间生成三维坐标,如PETR[24]所述。考虑到自我的运动,首先将上一帧t-1的三维坐标转换到当前帧t的坐标系中,通过姿态变换。然后,相邻帧的二维特征和三维坐标分别进行拼接,并输入到特征引导位置编码器(FPE)。之后,使用FPE来生成变压器解码器的关键和值组件。进一步地,任务特定查询包括检测查询(det queries)和分割查询(seg queries),它们来自不同的空间,被输入到变压器解码器并与多视图图像特征交互。最后,更新后的查询被输入到任务特定头以进行最终预测。
3.2 时间建模
PETR [24] 使用图像特征和投影的三维点来生成多视图三维检测的隐式三维特征。在本节中,我们扩展了它,并通过实现更好的定位和速度估计的三维坐标对齐(CA)来实现时间建模。
三维坐标对齐。时间对齐是将帧t-1的三维坐标转换到帧t的坐标系中(见图2)。为了清晰起见,我们首先表示一些坐标系统:相机坐标为c (t),激光雷达坐标为l (t),以及在帧t中的自我坐标e (t)。此外,global坐标系为g。我们定义T dstsrc是从源坐标系到目标坐标系的变换矩阵。
图2。坐标系从坐标系t - 1变换到坐标系t的图示。
我们使用l(t)作为多视图相机的默认三维空间,用于生成三维位置感知特征。第i个相机投影到三维点P l(t) i (t),可以表示为:
其中Pm(t)是相机投影空间的网格格点集。Ki∈R4×4是第i个相机的内参矩阵。给定辅助帧t-1,我们从帧t-1对齐到坐标系中的三维点框架t:
以全局坐标空间作为帧t-1和帧t之间的桥梁,T l(t)l(t−1)可以很容易计算:
将对齐的点集 [P l(t) i (t-1),P l(t) i (t)] 用于生成三维PE,如第3.4节所述。
3.3 多任务学习
在本节中,我们旨在为PETR [24]提供seg查询和车道查询以支持高质量的BEV分割和三维车道检测。
图3。多任务学习中三种查询的定义。det查询是在整个3D空间中定义的,而seg查询是在BEV空间中初始化的。车道查询用锚线定义,锚线由300个锚点构成。
BEV分割 高分辨率的BEV地图可以被划分成少量的块。我们引入了BEV分割的seg查询,并且每个seg查询对应一个特定的块(例如,BEV地图左上角25×25像素)。如图3(b)所示,在BEV空间中使用固定锚点初始化seg查询,类似于PETR中的检测查询生成过程。然后通过简单的MLP将这些锚点投影到seg查询中,该MLP具有两个线性层。之后,seg查询输入到transformer解码器并与图像特征交互作用。对于transformer解码器,我们采用与检测任务相同的框架。然后更新后的seg查询最终被输入到分割头,类似于CVT[43]中的解码器,以预测最终的分割结果。我们使用focal损失分别监督每个类别的预测。
三维车道检测 我们在PETR中添加了车道查询,以支持三维车道检测(见图3 ©)。我们定义了三维锚定车道,每个锚定车道都表示为一组有序的三维坐标:l = {(x1, y1, z1,),(x2, y2, z2), · · ·,(xn, yn, zn)},其中n是每条车道的样本点数。为了提高对三维车道的预测能力,我们在Y轴上均匀采样固定数量的采样点集,类似于Persformer [5] 。不同于Persformer ,
我们的锚定车道与Y轴平行,而Persformer预先为每个锚定线定义了不同的斜率。变压器解码器更新的车道查询用于预测三维车道实例。三维车道头预测车道类别C以及相对于锚定车道在X轴和Z轴上的相对偏移(Δx,Δz)。由于三维车道长度不是固定的,我们还预测大小为n的可见性向量Tvis来控制车道的起点和终点。我们使用焦散损失监督车道类别的预测,并且使用L1损失监督偏移的预测。
3.4 特征引导位置编码器
PETR将三维坐标转换为三维位置嵌入(3D PE)。生成三维位置嵌入可以表示为:
其中ψ()是一个简单的多层感知器(MLP)。PETR中的三维PE与输入图像无关。我们主张,由于图像特征可以提供一些有信息的指导(例如深度),因此三维PE应该由二维特征驱动。在本文中,我们提出了一种基于特征引导的位置编码器,它隐式地引入了视觉先验。特征引导的三维位置嵌入的生成可以表示为:
其中ξ也是一个小型MLP网络。Fi (t)是第i个相机的二维图像特征。如图4所示,通过一个1×1卷积投影得到的二维图像特征输入到一个小型MLP网络ξ和Sigmoid函数以获得注意力权重。三维坐标由另一个MLP网络ψ变换,并乘以注意力权重生成三维PE。三维PE与二维特征相加以获取Transformer解码器的关键值。投影后的二维特征被用作Transformer解码器的价值组件。
图4。特征引导位置编码器的结构。与PETR[24]不同的是,PETRv2中的3D PE以数据依赖的方式生成,以图像特征为导向。
3.5.稳健性分析
尽管最近有很多关于自动驾驶系统的论文,但只有少数几篇[20, 33]研究了所提出方法的鲁棒性。LSS [33] 在测试时展示了在外部噪声和相机脱落下的性能。同样地,BEVFormer [20] 展示了模型变体对相机外参数的稳健性。实践中,传感器误差和系统偏置多种多样,并且由于安全性和可靠性的高要求,验证这些情况的影响非常重要。我们旨在对我们的方法进行广泛的实验研究。如图 5 所示,我们关注以下三种常见的传感器错误类型:
外在噪声:现实世界中,外在噪声非常普遍,例如汽车颠簸引起的相机晃动或由环境力造成的相机偏移。在这种情况下,系统提供的外在信息并不准确,并且感知结果会受到影响。
相机丢失:当一个相机故障或被遮挡时,会发生相机图像丢失。多视图图像提供了全景视觉信息,但存在其中一些在现实世界中不存在的可能性。有必要评估这些图像的重要性,以便提前准备传感器冗余策略。
相机延迟:由于相机曝光时间,相机延迟也是一个挑战,尤其是在夜间。较长的曝光时间导致系统接收来自以前的时间图像,并带来显著的输出偏移。
4 实验
4.1 数据集和指标
我们在nuScenes基准测试[3]和OpenLane基准测试[5]上评估我们的方法。NuScenes[3]是一个多任务的大规模数据集,涵盖了三维物体检测、BEV分割、三维物体跟踪等。该数据集正式分为训练/验证/测试集,分别有700/150/150个场景。我们主要关注两个子任务:三维物体检测和BEV分割。我们也对Open-Lane基准测试[5]上的三维车道检测进行了实验。Openlane[5]是大规模的现实世界三维车道数据集。它有20万帧和超过88万个精心标注的车道,并且使用了14类车道类别覆盖广泛的车道类型。
对于三维物体检测,每个场景有20秒的视频帧,并且标注了大约40个关键帧。我们报告官方评估指标包括nuScenes检测得分(NDS)、平均精度(mAP)和五个真阳性(TP)指标:平均位移误差(mATE)、平均尺度误差(mASE)、平均方向误差(mAOE)、平均速度误差(mAVE)和平均属性误差(mAAE)。NDS是一个综合指标来评价检测性能。
对于BEV分割,我们遵循LSS [33] 并使用IoU分数作为度量。地面真实包括三个不同的类别:可行驶区域、车道和车辆。车道类别由两个地图层组成:车道分隔线和道路分隔线。对于车辆分割,我们通过将3D边界框投影到BEV平面来获得BEV地面真实情况[33]。车辆分割的地面真实情况是指所有包含自行车、公共汽车、汽车、建筑、摩托车、拖车和卡车的meta类别的边界框。
对于三维车道检测,我们遵循Persformer [5] 使用F1分数和类别准确度作为指标。当预测车道实例的75%点具有小于1.5米的点到点欧几里得距离时,该车道实例被认为是正确预测。此外,我们还报告了近处X误差、远处X误差、近处Z误差和远处Z误差来评估模型。这些四个指标用于在指定范围内评估结果的平均误差。
4.2 实施细节
在我们的实现中,ResNet[9]、VoVNetV2[17]和EfficientNet[36]被用作特征提取的主干。输入分辨率1/16的P4特征(合并来自主干的C4和C5特征)用于生成二维特征。三维坐标生成与PETR[24]一致。遵循BEVDet4D[11],我们在训练期间随机采样一个帧作为前一帧,在[3T,27T]范围内,而在推理期间采样15T帧。T(≈ 0.083)是两个扫描之间的间隔时间。
框架。我们的模型使用AdamW优化器进行训练,权重衰减为0.01。学习率初始化为2.0×10−4,并通过余弦退火策略[26]进行衰减。所有实验都在8个Tesla A100 GPU上进行了24轮(2倍的调度)的训练,除了消融研究外,总批处理大小均为8。在推理过程中没有使用测试时间增强方法。
对于三维对象检测,我们对nuScenes测试数据集进行实验,在1500个det查询上。遵循PETR [24]中的设置,我们在三维世界空间中初始化一组可学习的锚点,并通过一个小的MLP网络生成这些查询。类似于FCOS3D [38] ,我们添加额外的解耦层用于回归目标。我们扩展DN-DETR [18] 中的查询去噪以加速三维对象检测的收敛。对于每个地面真实3D方框,中心会随机偏移小于 (w / 2, l / 2, h / 2),其中 (w, l, h) 是物体的大小。我们也采用Focal Loss [21] 进行分类和L1损失进行3D边界框回归。匈牙利算法 [16] 被用于将地面真实与预测之间的标签分配。对于BEV分割,我们遵循[33]中的设置。我们使用nuScenes数据集提供的地图层来生成200×200 BEV地图的真实值。我们将切片大小设置为25×25,并且使用625个seg查询来预测最终的BEV分割结果。对于3D车道检测,我们遵循[5]中的设置。图像输入尺寸为360×480。我们使用100个车道查询来预测3D车道。我们将每个锚定车道中的点数设置为10,并在Y轴上的预测范围是[3米,103米] 和X轴上的预测范围是[-10米,10米] 。距离是在Y轴上的固定位置计算的:[5米,10米,15米,20米,30米,40米,50米,60米,80米,100米] 对于3D锚定车道。
为了模拟外在噪声并评估效果,我们选择随机应用相机外在参数的三维旋转。三维旋转在现实场景中是非常常见和典型的,我们忽略了其他的噪声模式,如平移,以避免多变量干扰。具体来说,我们从多个摄像机中随机选择一个来应用三维旋转。表示α、β和γ分别为X轴、Y轴和Z轴的度数,我们在最大幅度为αmax、βmax、γmax∈{2,4,6,8}的不同旋转设置下进行研究,其中αmax=2意味着α均匀采样在[-2,2]之间,例如。在实验中,我们将Rmax=M表示αmax=βmax=γmax=M。
4.3. 最新状态比较
表1。nuScenes val集上近期作品的比较。对FCOS3D和PGD的结果进行了微调和测试,并延长了测试时间。DETR3D、BEVDet和PETR用CBGS[45]进行训练。†是从FCOS3D主干初始化的。
表1比较了我们的方法与nuScenes验证集上最近的工作。我们的方法在公共方法中达到了最先进的性能。PETRv2即使使用ResNet-50也取得了39.8%的mAP和49.4%的NDS。表2显示了在nuScenes测试集上的性能比较。我们的PETRv2超越了PETR,其NDS提高了8.3%,mAP提高了6.7%。得益于时间建模,mAVE可以达到0.343m/s,而PETR为0.808m/s。与其他时间方法相比,PETRv2分别优于Swin-Base[25]和BEVFormer[20] V2-99[17] 2.2%的NDS。这表明通过三维PE进行的时间对齐也可以获得出色的表现。值得注意的是,PETRv2可以通过简单的特征对齐轻松应用于实际应用。
我们还比较了PETRv2在nuScenes数据集上的BEV分割性能。如表3所示,我们使用ResNet-101和VoV-99作为主干进行实验。由于PETRv2是PETR的时序扩展,因此我们主要与BEVFormer进行公平对比。使用ResNet-101主干,我们的PETRv2在IoU-lane和IoU-Drive指标上显著优于BEVFormer,并且在IoU-Vehicle指标上具有可比性。使用预训练的VoV-99主干,我们的PETRv2达到了最先进的性能。
如表4所示,我们与最先进的三维车道检测方法进行了比较。由于Persformer [5]使用EfficientNet作为主干是一个静态的方法,因此我们没有使用时间信息进行公平的比较。
比较。与Performers的50.5%相比,我们的方法在相同的EfficientNet主干上实现了51.9%的F1分数。使用强大的预训练VoV-99主干,我们方法的表现得到了显著提高。我们也尝试用400个锚点来表示每条车道,并且实验结果表明增加锚点的数量可以进一步提高性能。我们认为10个锚点不足以建模相对复杂的三维车道,这使得准确预测变得困难。值得注意的是,在我们的方法中,大量锚点只增加了边际计算成本。增加的成本主要是来自车道头部MLP的更高维度。
4.4 消融研究
在本节中,我们使用VoVNet-99作为主干进行消融实验。主干在DDAM15M数据集[31]和Nuscenes的训练集中预训练,并且输入图像大小为800×320,模型经过了24个epoch的训练。检测查询的数量设置为900。
在这里,我们探索了我们在设计中两个关键组件的效果:三维坐标对齐(CA)和特征引导位置编码器(FPE)。为了进行消融研究,我们仅训练了3D检测分支以清晰起见。如表5 (a)所示,在没有CA的情况下,PETRv2仅提高了2.7%的NDS和0.5%的mAP性能。有了CA,性能进一步提高到2.1%的NDS和0.9%的mAP。mAVE指标降低至0.429米/秒,这与原始PETR基准相比具有很大的优势。为了验证FPE的有效性,我们将PETR中的3D位置编码器替换为FPE。NDS指标增加了1.5%,而mAP只增加了0.2%。
在PETRv2上应用FPE,mAP实现了相对较高的改进(0.8%)。这表明FPE模块对PETR的时序版本也是有益的。
4.5 稳定性分析
表6显示了在nuScenes数据集上进行推理时的定量结果总结。我们比较了PETRv2、PETR和PETR+FPE(FPE表示特征引导的位置编码器)。随着噪声增加,所有三种模型的表现都持续下降,表明外接噪声的影响。在极端噪声设置中Rmax = 8,PETRv2下降了4.12%mAP和2.85% NDS,PETR+FPE下降了4.68%mAP和3.42% NDS,而PETR下降了6.33%mAP和4.54% NDS。观察到FPE提高了对外接噪声的鲁棒性,而使用多个帧的时间扩展并没有带来显著的鲁棒性收益。
我们还在图6中展示了当随机丢失一个摄像头时模型的表现。在nuScenes数据集的这六个摄像头中,前视和后视摄像头是最关键的,它们的缺失分别导致了mAP下降5.05%和13.19%。由于其广角(120°),后视摄像头尤其重要。其他摄像头的丢失也带来了平均性能降低2.93%mAP和1.93%NDS。请注意,nuScenes数据集中的摄像头重叠区域非常小,因此任何摄像头的缺失都很难通过相邻的摄像头进行补偿。实践中,在紧急情况下传感器冗余是必要的,而相机之间的互补需要更深入的研究。
相机时间延迟的效果在表7中显示。在nuScenes中,关键帧被标注为真实值,并且我们利用了关键帧之间的未标注的帧。
将帧作为输入图像来模拟时间延迟。0.083秒的延迟导致mAP下降了3.19%,NDS下降了8.4%,表明时间延迟对检测有显著影响。当时间延迟超过0.3秒时,性能急剧下降到26.08% mAP和36.54% NDS。由于在实际系统中不可避免的时间延迟会影响检测,因此应该更加关注它。
结论
本文介绍PETRv2,一种多摄像头图像的三维感知统一框架。PETRv2在PETR的基础上扩展了时间建模和多任务学习。通过三维位置嵌入的时间对齐,PETRv2自然地实现了多帧建模,并提高了三维检测性能。为了全面了解PETRv2框架,我们进一步提供了一个详细的分析,在三种类型的模拟传感器错误下PETRv2的鲁棒性。我们希望PETRv2可以作为三维感知的强大基准和统一框架。在未来,我们将探索大规模预训练、更多三维视觉任务以及自动驾驶系统的多模态融合。
相关文章:
PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images
全文摘要 本文介绍了一种名为PETRv2的统一框架,用于从多视图图像中进行三维感知。该框架基于先前提出的PETR框架,并探索了时间建模的有效性,利用前一帧的时间信息来提高三维物体检测效果。作者在PETR的基础上扩展了三维位置嵌入(…...
Python库常用函数-数据分析
Python库常用函数 1.pandas库 (1)数据读取与写入 读取 CSV 文件: data pd.read_csv(file.csv)读取 Excel 文件: data pd.read_excel(file.xlsx, sheet_nameSheet1)写入 CSV 文件: data.to_csv(new_file.csv, ind…...
【机器学习】机器学习的基本分类-监督学习-随机森林(Random Forest)
随机森林是一种基于集成学习(Ensemble Learning)思想的算法,由多个决策树构成。它通过结合多棵决策树的预测结果来提升模型的泛化能力和准确性,同时减少过拟合的风险。 1. 随机森林的核心思想 多样性: 随机森林通过引…...
Java入门:22.集合的特点,List,Set和Map集合的使用
1 什么是集合 本质就是容器的封装,可以存储多个元素 数组一旦创建,长度就不能再改变了。 数组一旦创建,存储内容的类型不能改变。 数组可以存储基本类型,也可以存储引用类型。 数组可以通过length获得容量的大小,但…...
Web3与区块链如何通过智能合约实现自动化生态?
Web3和区块链正在重塑互联网的未来,其核心在于去中心化和用户数据自主权。而作为区块链技术的重要组成部分,智能合约通过自动执行预设规则,大大提升了效率和安全性。本文将探讨Web3与区块链如何通过智能合约实现生态的自动化。 什么是智能合约…...
排序算法入门:分类与基本概念详解
引言 排序是编程世界中最常见的操作之一,也是许多算法的基础。不管是从数据中找出最大值还是将一堆乱序的名字整理得井井有条,排序算法都在幕后默默工作。你可能会觉得排序很简单:从小到大排个序而已嘛。但当数据量大到上百万、上亿…...
【Spring Cloud 微服务的简单概述】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
稳定运行的以Azure Synapse Dedicated SQL Pool数据仓库为数据源和目标的ETL性能变差时提高性能方法和步骤
在Azure Synapse Dedicated SQL Pool(以前称为SQL Data Warehouse)的ETL性能变差时,可以通过以下方法和步骤来提高性能: 1. 分析和监控性能瓶颈 查看执行计划:使用SQL的SET STATISTICS IO ON和SET STATISTICS TIME O…...
可供参考的GitHub国内镜像
在配置了本地hosts文件和魔法后仍存在无法访问的问题 针对如上问题,可以使用国内的镜像地址做替换 例如: https://github.com/bubbliiiing/detr-pytorch改成 https://hub.nuaa.cf/bubbliiiing/detr-pytorch推荐使用的镜像 https://hub.yzuu.cf/ https://hub.nua…...
统计中间件稳定性指标
目前订单业务域涉及中间件:MySQL、Redis、TiDB、MQ、ES。(遗漏项请补充) 一、RDS 资源使用率 实例ID实例名称规格maxCPUavgCPUmaxDISKmaxIOPSavgIOPS活跃会话maxTPSavgTPSmaxQPSavgQPS实例风险 慢查询 慢查询会消耗大量的系统资源&#x…...
Qt Quick开发基础+实战(持续更新中…)
最近更新日期:2024/12/4 一、Qt Quick简介 写在前面: 本篇文章虽然只是作为我的学习笔记,但也作为我日后复习之用,所以会认真并详细记录,但会分重点。 1.3 新建Qt Quick Application工程 这节主要讲2个知识点&#x…...
FPGA Xilinx维特比译码器实现卷积码译码
FPGA Xilinx维特比译码器实现卷积码译码 文章目录 FPGA Xilinx维特比译码器实现卷积码译码1 Xilinx维特比译码器实现2 完整代码3 仿真结果 MATLAB (n,k,m)卷积码原理及仿真代码(你值得拥有)_matlab仿真后代码-CSDN博客 MATLAB 仿真…...
数据结构初阶1 时间复杂度和空间复杂度
本章重点 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度OJ练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢?比如对于以下斐波那契数列: long long Fib(int N) { if(N < 3) return 1;return Fib(N-1) Fib(N-2); }斐…...
基于Matlab计算机视觉的车道线识别与前车检测系统研究
随着自动驾驶技术的发展,车道线识别和前车检测成为智能驾驶系统中的核心技术之一。本实训报告围绕基于计算机视觉的车道线识别与前车检测系统展开,旨在通过处理交通视频数据,实时检测车辆所在车道及其与前车的相对位置,从而为车道…...
刷蓝桥杯历年考题(更新至15届~)
第十五届 CA组省赛 AcWing5980.训练士兵 方法一:树状数组:O(nlogn) self-complete /*先枚举组团,后分析每个士兵,有一个特点,组团费用是固定的,那当然是让所有士兵一块训练,训练完的士兵也不会有损失当还…...
Stream API来提取两个字符串字段
如果您有一个包含对象的List,并且想要使用Java 8的Stream API来提取两个字符串字段,然后将这些字段的值连接成一个以逗号隔开的单个字符串或者集合List,您可以按照以下步骤操作: 假设您有一个Person类,其中包含两个字…...
《无畏契约》运行时提示“d3dcompiler_43.dll丢失”是什么原因?“找不到d3dcompiler_43.dll文件”如何解决?
《无畏契约》运行时提示“d3dcompiler_43.dll丢失”是什么原因?“找不到d3dcompiler_43.dll文件”如何解决? 作为一位软件开发从业者,我深知在游戏运行过程中,遇到各种文件丢失、文件损坏和系统报错等问题是多么令人头疼。今天&a…...
社群分享在商业引流与职业转型中的作用:开源 AI 智能名片 2+1 链动模式小程序的应用契机
摘要:本文聚焦于社群分享在商业领域的重要性,阐述其作为干货诱饵在引流方面的关键意义。详细探讨了提供有价值干货的多种方式,包括文字分享、问题解答以及直播分享等,并分析了直播分享所需的条件。同时,以自身经历为例…...
芯食代冻干科技研究院:创新与品质并重,推动家用冻干机高质量发展
11月25日,芯食代首届食品冻干前沿与智能化升级创新大会在江苏常州成功举办。本次大会由芯食代冻干科技研究院(江苏)有限公司与芯食代(上海)科技发展有限公司联合主办,云集学界专家教授、商界企业精英,共议家用冻干机的未来创新发展。作为创新大会,芯食代冻干科技研究院也在本次…...
【C++】栈和队列的模拟实现(适配器模式)
不论是C语言还是C,我们都用其对应的传统写法对栈和队列进行了模拟实现,现在我们要用新的方法模拟实现栈和队列,这个新方法就是适配器模式。 C语言传统写法: C语言模拟实现栈 C传统写法:C模拟实现栈 1.容器适配器 …...
CSS过渡练习-进度条(12)
该进度条先需要一个大盒子和一个小盒子,然后给大盒子与小盒子加style,看进度到多少就是百分之多少;如果要进度条从百分之五十到满格的话就加一个hover的样式(鼠标移到链接上时添加的特殊样式),然后是想要进…...
青动CRM系统PHP+Uniapp
全面解决企业销售团队的全流程客户服务难题,旨在助力企业销售全流程精细化、数字化管理,全面解决企业销售团队的全流程客户服务难题,帮助企业有效盘活客户资源、量化销售行为,合理配置资源、建立科学销售体系,提升销售业绩。 青动…...
word如何快速创建目录?
文章目录 1,先自己写出目录的各级标题。2、选中目标标题,然后给它们编号3、给标题按照个人需求开始分级4、插入域构建目录。4.1、利用快捷键插入域构建目录4.2、手动插入域构建目录 听懂掌声!学会了吗? 前提声明:我在此…...
【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)
CART(Classification and Regression Tree) CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART …...
使用GDI对象绘制UI时需要注意的若干细节问题总结
目录 1、一个bitmap不能同时被选进两个dc中 2、CreateCompatibleDC和CreateCompatibleBitmap要使用同一个dc作为参数 3、不能删除已经被选入DC中的GDI对象 4、使用完的GDI对象,要将之释放掉,否则会导致GDI对象泄漏 5、CreateCompatibleBitmap返回错…...
C++:std::fstream详细介绍
std::fstream 是 C 标准库中的一个类,用于处理文件的输入输出操作。它可以同时进行文件的读和写操作,因此被称为“文件流”(File Stream)。它是 C 输入输出流库 iostream 的一部分,继承了 std::istream 和 std::ostrea…...
ndp协议简介
在IPv6中,ARP(地址解析协议)被替代为邻居发现协议(Neighbor Discovery Protocol,NDP)。NDP是IPv6网络中用于发现邻居节点(相邻设备)的协议,类似于IPv4中的ARP。但与ARP不…...
915DEBUG-obsidianTemplater使用
Templater使用 tp函数不正常显示相应数据 模板使用方式不正确 <% tp.date.now("YYYY-MM-DD") %> 应该被放置在一个被Templater识别为模板的文件中,或者在你使用Templater的插入模板功能时输入。如果只是在一个普通的Markdown文件中直接输入这段代码…...
【Linux篇】权限管理 - 用户与组权限详解
一. 什么是权限? 首先权限是限制人的。人 真实的人 身份角色 权限 角色 事物属性 二. 认识人–用户 Linux下的用户分为超级用户和普通用户 root :超级管理员,几乎不受权限的约束普通用户 :受权限的约束超级用户的命令提示符是#,普通用…...
JWT 在 SaaS 系统中的作用与分布式 SaaS 系统设计的最佳实践
在现代 SaaS(软件即服务) 系统中,随着服务规模的扩大和用户需求的多样化,如何高效、安全地进行用户身份验证、权限控制以及租户隔离,成为了系统架构中的核心问题之一。**JWT(JSON Web Token)**作…...
docker更换容器存储位置
一:原因 今天之前在某个服务器上使用docker搭建的服务突然无法访问了,进入服务器查看发现服务运行正常,但是就是无法使用,然后我这边准备将docker服务重新启动下看看,发现docker服务无法重启,提示内存已满…...
gitlab-cicd部署安装与具体操作
一、安装 本例中是用安装包直接在ubuntu下安装的,也可以用docker镜像。 curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpmrpm -i gitlab-runner_amd64.rpm 安装runner后,需要跟在runner所在服务器安装…...
基于MFC实现的人机对战五子棋游戏
基于MFC实现的人机对战五子棋游戏 1、引言 此报告将详细介绍本次课程设计的动机、设计思路及编写技术的详细过程,展现我所学过的C知识以及我通过本次课程设计所学到例如MFC等知识。在文档最后我也会记录我所编写过程遇到的问题以及解决方案。 1.1 背景 五子棋是…...
mac电脑多个ssh keys共存
一、同一台电脑,不同域名的git仓库为什么要设置不同的ssh keys? 每个git仓库通常要求使用唯一的ssh key,以防止权限冲突和安全问题。 权限控制:每个git仓库的权限是独立的,使用不同的ssh keys可以更好的管理权限&…...
Elasticsearch数据迁移(快照)
1. 数据条件 一台原始es服务器(192.168.xx.xx),数据迁移后的目标服务器(10.2.xx.xx)。 2台服务器所处环境: centos7操作系统, elasticsearch-7.3.0。 2. 为原始es服务器数据创建快照 修改elas…...
【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石
我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 一、引言 1. 栈与队列在编程中的角色定位 栈和队列作为两种基本的数据结构,在众多编程场景中都有着独特的地位。它们为数据的有序…...
使用ensp搭建内外互通,使用路由跨不同vlan通信。
1.网络拓扑图 2.规则 (1)允许 (自己)ping通内外网,内外网随便一个pc就可以. (2) 允许(电信)ping通内外网,内外网随便一个pc就可以 (时间问题不做…...
URDF 发布者
URDF 发布者 #! /usr/bin/env python3 import rclpy from rclpy.node import Node import rclpy.parameter from sensor_msgs.msg import JointState from rcl_interfaces.msg import SetParametersResultimport threading import timeclass RotateWheelNode(Node):def __init…...
用于目标检测的集中式特征金字塔
摘要 https://arxiv.org/pdf/2210.02093 视觉特征金字塔在多种应用中已展现出其在有效性和效率方面的优越性。然而,现有方法过度关注层间特征交互,却忽略了经验证明有益的层内特征调节。尽管一些方法试图借助注意力机制或视觉变换器来学习紧凑的层内特征表示,但它们忽略了…...
微信小程序购物车全选反选功能以及合计
微信小程序基于Vant Weapp的购物车功能实现 1、单选 使用微信小程序原生表单组件checkbox和checkbox-group 注意:checkbox原生不支持bind:change事件,checkbox-group支持 <checkbox-group bindchange"handleCheck"><checkbox val…...
大数据新视界 -- Hive 数据湖集成与数据治理(下)(26 / 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
【基础数学二】整除,最大公约数约数,最小公倍数
整除 在数论中,一个整数 a a a 能够被另一个整数 d d d 整除,记做 d ∣ a d|a d∣a。 整除的性质: 如果 d ∣ a d | a d∣a,则对于任意整数 k k k 有 d ∣ k a d | ka d∣ka。如果 d ∣ a d|a d∣a 并且 d ∣ b d|b d∣…...
【lua语言基础(四)】IO模型以及补充知识
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:lua从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学更多lua语言的知识 🔝🔝 lua语言基础 1. 简单的IO模型2…...
Python知识分享第十九天-网络编程
网络编程 概述用来实现 网络互联 不同计算机上运行的程序间可以进行数据交互也叫Socket编程 套接字编程 三要素IP地址概述设备在网络中的唯一标识分类IPV4城域网13广域网22局域网31IPV6八字节 十六进制相关dos命令查看ipwindows: ipconfigmac和linux: ifconfig测试网络ping 域…...
【JuMP.jl】非线性规划
[JuMP] 03 非线性规划 非线性规划模型 非线性规划问题是线性规划问题的自然推广, 在实际的工程问题中,优化问题中的目标函数与约束不会总是线性函数,因此非线性规划的求解功能是必要的。 min x ∈ R n f 0 ( x ) s.t. l j ≤ f j ( x ) ≤…...
网络(TCP)
目录 TCP socket API 详解 套接字有哪些类型?socket有哪些类型? 图解TCP四次握手断开连接 图解TCP数据报结构以及三次握手(非常详细) socket缓冲区以及阻塞模式详解 再谈UDP和TCP bind(): 我们的程序中对myaddr参数是这样…...
40分钟学 Go 语言高并发:服务性能调优实战
服务性能调优实战 一、性能优化实战概述 优化阶段主要内容关键指标重要程度瓶颈定位收集性能指标,确定瓶颈位置CPU、内存、延迟、吞吐量⭐⭐⭐⭐⭐代码优化优化算法、并发、内存使用代码执行时间、内存分配⭐⭐⭐⭐⭐系统调优调整系统参数、资源配置系统资源利用率…...
5092 星际争霸
逆序对排序; 字符串遍历; pair 特点: 两个值,第一个是字符串,第二个是逆序对数。而且没有重复的字符串。 #include<bits/stdc.h>using namespace std; typedef long long ll; const int N1e35; #define x f…...
AUTOSAR AP 汽车API知识点总结(Automotive API )R24-11
汽车API知识点总结 一、背景与目标 背景:智能互联汽车正逐步依赖远程诊断、软件更新等功能以确保行驶安全,并且用户已习惯于通过智能设备中的应用程序控制连接设备。虽然AUTOSAR标准支持车辆软件的可更新性,但尚未提供将AUTOSAR应用产生的数据和功能安全可靠地暴露给非AUTO…...
vue2:Cascader 级联选择器中加载两种不同的数据结构
前言 因UI调整,需要将el-tree控件更换为级联选择器,而在原树形控件中,加载了两种不同的数据结构,(参见vue2:树形控件el-tree中加载两种不同结构的数据_vue2 树形插件-CSDN博客)所以现在级联选择器中也需要加载这两种不同的数据结构。 问题 原本以为处理方式差不多,在…...