大家好,欢迎来到IT知识分享网。
作者丨秋名山车神@知乎(已授权)
来源丨https://zhuanlan.zhihu.com/p/517579299
编辑丨极市平台
如何利用车载环视相机采集到的多张图像实现精准的3D目标检测,是自动驾驶感知领域的重要课题之一。针对这个问题,传统的检测方案可以概括为:先利用一个2D模型在各自的相机视角获取3D检测结果,再通过后处理算法将各个视角的3D检测框投影到 ego frame 再组合在一起。这样的做法简单有效,但是由于将多视角融合的步骤排除在模型学习之外,导致其难以检测相邻环视相机重叠部分中被截断的物体,也难以实现与3D点云传感器 (LiDAR) 的数据级/特征级融合。
随着 Attention 机制在 Vision 领域的成功应用,大家开始关注如何将多个 Perspective view 的图片表征 (image representation) 转化为一个统一的BEV view (Bird’s Eye View, 鸟瞰图) 的场景表征 (scene representation),从而实现完整统一的3D目标检测。具体而言,传统的2D网络包含 Backbone 和 Head 两个模块,分别用于特征提取和目标检测。BEV 网络则在二者之间增加一个 BEV Neck,用于2D到3D的 BEV 特征投影以及 BEV 视角下的特征提取。本文尝试盘点一下目前市面上几种主流的 Transformer-based BEV 3D object detection 的方法,重点着眼于如何高效的从环视相机视角提取BEV特征。
(PS:以下文章或多或少都借鉴了 DETR [1] 的检测思路,不了解的同学建议复习一下前两篇解读 —— 大白话用Transformer做object detection ,以做到无缝衔接)
Feature point sampling
DETR3D [2] 将原本的DETR模型拓展到3D空间。具体而言:在 2D Image feature extraction 部分,利用共享权重的 ResNet+FPN (output stride = 1/8, 1/16, 1/32, 1/64) 提取环视相机所采集到的6张图片的特征;在3D Transformer decoder 部分,每个 object query 先通过一个子网络预测所查询物体在真实世界的3D坐标 (reference point),再利用由相机的内参外参所构造的坐标变换矩阵 (camera transformation matrices, 3×4) 将真实世界的3D坐标投影至环视相机的2D像素坐标,并应用双线性插值采样各个相机视角、各个 PFN 层级同一位置的特征点(投影在图像外的特征点用0填充),最后利用所采样到的 6×4=24 个特征点的均值作为物体特征更新object query。
Feature point sampling有很多优点:1、计算量小(毕竟只采样24个特征点);2、兼容FPN(应该对检测不同距离的物体有帮助);3、避免了dense depth prediction(只需要预测 sparse object query 的3D坐标,不需要预测每张图片、每个像素的深度信息)。
Global cross-attention
无法直接用 3D object query 在 2D spatial features 上实现查询匹配的原因之一,是二者空间上的不一致:在2D图片上两个点之间的坐标距离难以表述3D世界中这两个点的实际距离。为了将2D的图像特征扩展到3D检测空间(以方便 3D object query 查询匹配),PETR [3] 选择在 Positional embedding 方面做改进:为2D特征图上的每个像素生成一个对应真实世界中的3D坐标列表(2D图片上的一个点对应3D真实世界中以相机镜头为起始点的一条射线 (camera ray),列表即是在这条射线上采样的N个点的3D坐标集合),再通过MLP将这个坐标列表转化为 3D Positional embedding。下图展示了前视相机的左中右三个点与其他所有相机视角的 3D Positional embedding 的相似度比较,可以发现与这三个点所对应真实世界的三条射线夹角较小的区域相似度较高,证明这种2D到3D的转换是有效的。
图片来自PETR
有了 3D Positional embedding 的修饰,原本的2D图像特征便可以升级成3D空间特征,直接与 3D object query 做查询匹配。PETR [3] 最大程度上保留了Anchor DETR [4] 的网络结构和检测逻辑,在 Transformer decoder 阶段使用了原本的 Global cross-attention,即每个 3D object query 要和6张环视图片的所有特征点做一遍相似度匹配。值得注意的是:1、可能是出于计算量考虑,PETR [3] 并没有采用多尺度 FPN,而是仅仅使用固定大小 (stride =16) 的特征图;2、根据作者的实验,BEV query(3D anchor points)需要在高度上(z轴)做出细分,这与目前许多 pillar-based 检测方法有所不同。
Deformable cross-attention
BEVFormer [5] 继承自 Deformable DETR [6],与上述两个工作的主要区别在于:1、显式得构建 BEV features(200×200分辨率,覆盖以车为中心边长102.4米的正方形区域);2、利用 Deformable cross-attention 从 image space aggregate spatial information 到 BEV query 中;3、引入多帧时序信息。
图片来自BEVFormer
其具体做法是:为 BEV space 的每个 feature point 定义一组 anchor heights (pillar-like query, four 3D reference points from -5 meters to 3 meters),将这4个点投影回 2D image space 进行特征点采样 (sampling 4 points around this reference point),再用采样得到的特征点与 BEV query 做 deformable attention。相比于前两种方法,Deformable cross-attention更加灵活:它并不只采样一个点,也不是跟6张图片的所有位置挨个匹配,而是查询reference point周围的感兴趣区域 (RoI, region of interest)。细算一下,一个 pillar-like BEV query 对应4个不同高度的 reference points,每个 reference point 采样4个特征点,deformable attention 还涉及8个heads,再加上3层 FPN (output stride = 1/16, 1/32, 1/64) 的特征输出,最终一个 BEV query 实际上考察了4x4x8x3=384个特征点。
Lift-Splat
严格来说 Lift-Splat [7] 并不是基于 Attention 实现的,而是根据(预测的)深度信息加权来实现特征从 perspective view 到 BEV 的转换(值得注意的是,每张图片的每个特征点都需要预测其深度信息)。
图片来自Lift, Splat, Shoot
具体来说,在 Lift 步骤:与 PETR [3] 类似,考虑2D图片上的一个点对应3D世界的一条射线,故可以在这条直线上采样N个点(例图用了10个,实际用了41个);之后网络需要预测这个特征点的深度信息 (distribution over depth,参考直线上的直方图),利用深度信息加权 (scale) 同一位置的图像特征 C(参考例图右侧,由于网络预测的深度在第三个 bin 较高,所以当深度 D=3 时特征与图片特征C最接近,而其余深度处特征较弱)。对一张图片每个2D特征点做相同的操作,就可以生成一个形状类似平头金字塔 (frustum) 的点云。在 Splat 步骤:首先构建一个 pillar-based BEV 视角的特征图(200×200分辨率,覆盖以车为中心边长100米的正方形区域),然后将上一步骤得到的6个平头金字塔点云中的每个点匹配 (assign) 给距离最近的 pillar,最终 BEV space 上每个 pillar 的特征就是所有匹配到的特征点的和 (sum pooling)。基于此方法的后续改进包括:1、通过添加显式的深度预测监督 (explicit depth estimation supervision) 实现更精确的 camera to BEV 特征转换 [8];2、通过添加坐标转换预计算 (precomputation) 与GPU多线程并行池化 (specialized GPU kernel that parallelizes directly over BEV grids) 实现更快速的 camera to BEV 特征转换 [9];3、由于 Splat 步骤所采用的 sum pooling 会粗暴地压缩一个BEV grid 的高度(Z轴)信息,故可以先将Lift步骤得到的点云渲染成立体特征 (pseudo voxel, feature shape = XYZC),再 reshape 成 XY(ZC),最后通过3×3卷积降低特征通道数至 C [10]。
Future directions
仿照 Sparse RCNN [11] 的思路,在 BEV space 通过 RoIAlign 的方式抽取环视相机 perspective view 的2D特征(每个视角一个RoI,投影到图片外的 proposal 用0填充)是否可行?目前还没有读到类似的工作,有待进一步验证。
上面介绍的方法都是基于 query-based detection,出于计算量考虑 query 的数量一般比较少(大约500-1500左右),复杂场景下模型的recall表现还有待调研。
Transformer-based BEV 3D object detection模型是否必须依赖 perspective view 的预训练模型 (e.g., FCOS3D [12])?能否设计一种时间+空间、2D到3D、单任务到多任务、单传感器到多传感器的大规模自监督预训练?能否利用大规模仿真产生的数据?
参考链接:
[1] End-to-End Object Detection with Transformers https://arxiv.org/abs/2005.12872
[2] DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries https://arxiv.org/abs/2110.06922
[3] PETR: Position Embedding Transformation for Multi-View 3D Object Detection https://arxiv.org/abs/2203.05625
[4] Anchor DETR: Query Design for Transformer-Based Object Detection https://arxiv.org/abs/2109.07107
[5] BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers https://arxiv.org/abs/2203.17270
[6] Deformable DETR: Deformable Transformers for End-to-End Object Detection https://arxiv.org/abs/2010.04159
[7] Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D https://arxiv.org/abs/2008.05711
[8] Categorical Depth Distribution Network for Monocular 3D Object Detection https://arxiv.org/abs/2103.01100
[9] BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation https://bevfusion.mit.edu/assets/paper.pdf
[10] BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework https://arxiv.org/abs/2205.13790
[11] Sparse R-CNN: End-to-End Object Detection with Learnable Proposals https://arxiv.org/abs/2011.12450
[12] FCOS3D: Fully Convolutional One-Stage Monocular 3D Object Detection [https://arxiv.org/abs/2104.10956]
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/65127.html