3D检测经典 | 第一个Anchor-Free、第一个NMS-Free 3D目标检测算法!!!

简介: 3D检测经典 | 第一个Anchor-Free、第一个NMS-Free 3D目标检测算法!!!

ee01ccb74de69d32c6a5a1a062fa987f.png

在嵌入式系统上操作的高效点云3D目标检测对于包括自动驾驶在内的许多机器人应用来说都是重要的。大多数以前的工作都试图使用基于Anchor的检测方法来解决这个问题,这些方法有2个缺点:


后处理相对复杂且计算昂贵


调整Anchor参数很复杂

本文是第一个使用Anchor-free和NMS-Free的单阶段检测器AFDet解决这些缺点的算法。整个AFDet可以通过简化的后处理在CNN加速器或GPU上高效处理。


在没有附加功能的情况下,本文提出的AFDet在KITTI验证集和Waymo开放数据集验证集上与其他基于Anchor的方法相比也具有一定的竞争力。

1、简介

检测点云中的3D目标是自动驾驶最重要的感知任务之一。为了满足功率和效率的限制,大多数检测系统都在车辆嵌入式系统上运行。开发嵌入式系统友好的点云3D检测系统是实现自动驾驶的关键步骤。


由于点云的稀疏性,直接在原始点云上应用3D或2D卷积神经网络(CNN)是低效的。一方面,引入了许多点云编码器来将原始点云编码为3D或2D CNN可以有效处理的数据格式。另一方面,一些工作直接从原始点云中提取特征用于3D检测,这是PointNet的启发。但在检测部分,大多数采用了在图像目标检测任务中被证明有效的基于Anchor的检测方法。


基于Anchor的方法有2个主要缺点:

首先,非最大抑制(NMS)是基于Anchor的方法抑制重叠的高置信度检测边界框所必需的。但它可能会引入比较大的计算成本,尤其是对于嵌入式系统。根据作者的实验,即使在具有高效实现的现代高端桌面CPU上,处理一个KITTI点云帧也需要20毫秒以上,更不用说通常用于嵌入式系统的CPU了。


第二,基于Anchor的方法需要Anchor选择,这既复杂又耗时,因为调整的关键部分可能是手动试错过程。例如,每次向检测系统添加新的检测类别时,都需要选择诸如合适的Anchor数量、Anchor尺寸、Anchor角度和Anchor密度等超参数。

可以摆脱NMS,设计一个高效的嵌入式系统友好的Anchor-Free点云3D检测系统吗?最近,图像检测中的Anchor-Free方法取得了显著的性能。在这项工作中,作者提出了一种具有简单后处理的Anchor-Free和无NMS的单阶段端到端点云3D目标检测器(AFDet)。


在作者的实验中,使用PointPillars将整个点云编码为鸟瞰图(BEV)中的伪图像或类似图像的特征图。然而,AFDet可以与生成伪图像或类似图像的2D数据的任何点云编码器一起使用。编码后,应用具有上采样Neck的CNN输出特征图,该特征图连接到5个不同的头部,以预测BEV平面中的目标中心,并回归3D边界框的不同属性。最后,将5个头的输出组合在一起以生成检测结果。关键点热图预测头用于预测BEV平面中的目标中心。它将把每个物体编码成一个以heatmap为中心的小区域。在推断阶段,每一个heatmap值都将通过最大池化操作进行挑选。在此之后,不再将多个回归Anchor平铺到一个位置,因此不需要使用传统的NMS。这使得整个检测器可以在典型的CNN加速器或GPU上运行,为自动驾驶中的其他关键任务节省了CPU资源。

贡献总结如下:

  1. 首次提出了一种Anchor-Free和无NMS检测器,用于简化后处理的点云3D目标检测。
  2. AFDet是嵌入式系统友好的,可以以更少的工程工作量实现高处理速度。
  3. 在KITTI验证集上,AFDet可以实现与以前的单阶段检测器相比具有竞争力的精度。AFDet的一种变体在Waymo验证上超越了最先进的单阶段3D检测方法。

2、相关工作

2.1、LiDAR-based 3D Object Detection

由于长度和顺序不固定,点云呈稀疏且不规则的格式,需要在输入神经网络之前对其进行编码。一些工作利用网格网格对点云进行体素化。诸如密度、强度、高度等特征在不同的体素中被连接为不同的通道。体素化点云被投影到不同的视图,例如BEV、距离视图(RV)等,以通过2D卷积处理,或者被保持在3D坐标中,以通过稀疏3D卷积处理。

PointNet提出了一种使用原始点云作为输入进行3D检测和分割的有效解决方案。PointNet使用多层感知器和最大池化操作来解决点云的无序和非均匀性,并提供了令人满意的性能。基于原始点云输入的连续3D检测解决方案提供了有前景的性能,如PointNet++、Frustum PointNet、PointR CNN和STD。

VoxelNet结合了体素化和PointNet,提出了体素特征提取器(VFE),其中在每个体素内实现了PointNet风格的编码器。尽管稀疏3D卷积被用于在VFE之后在z轴上进一步提取和下采样信息,但在SECOND中使用了类似的思想。VFE显著提高了基于LiDAR的检测器的性能,然而,使用从数据中学习的编码器,检测流水线变得更慢。

PointPillars建议将点云编码为pillar而不是体素。结果,整个点云变成BEV伪图像,其通道等效于VFE的输出通道,而不是3个。

在基于Anchor的方法中,为边界框编码提供预定义的框。然而,使用密集Anchor会导致大量潜在目标对象,这使得NMS成为一个不可避免的问题。之前的一些工作提到了Anchor-free概念。PointRCNN提出了一种基于全场景点云分割的Anchor-free box的3D proposals生成子网络。VoteNet从投票的兴趣点而不是预定义的Anchor框构建3D边界框。但它们都不是无NMS的,这使得它们效率较低,对嵌入式系统也不友好。

此外,PIXOR是一个BEV检测器,而不是3D检测器。

2.2、Camera-based 3D Object Detection

基于摄像头的解决方案随着降低成本的意愿而蓬勃发展。随着越来越复杂的网络的设计,基于摄像头的解决方案正在迅速赶上基于激光雷达的解决方案。

MonoDIS利用了2D和3D检测损失的新颖解纠缠变换和3D边界框的新颖自监督置信分数。它在nuScenes 3D目标检测挑战中排名第一。

CenterNet从特征图上的边界框中心预测目标的位置和类别。虽然最初设计用于2D检测,但CenterNet也有可能使用单摄像头进行3D检测。

TTFNet提出了缩短训练时间和提高推理速度的技术。

RTM3D预测图像空间中3D边界框的9个透视关键点,并利用几何规则恢复3D边界框。

3、方法

435a618456eb3c99667d05b9c69ab3b7.png

在本节中将从3个方面详细介绍AFDet:点云编码器、主干和颈部以及Anchor-free检测器。框架如图1所示。

3.1、点云编码器

为了进一步挖掘Anchor-free检测器的效率潜力,本文使用PointPillars作为点云编码器,因为其速度快。


首先,将检测范围离散为鸟瞰图(BEV)平面(也是x-y平面)中的pillar。不同的点根据其x-y值指定给不同的pillar。在这一步骤中,每个点也将增加到D=9维。


其次,具有足够数量点的预定义P数量的pillar将应用于线性层和最大池化操作,以创建大小为1675319404741.png的输出张量,其中F是PointNet中线性层的输出通道数。由于P是所选pillar的数量,因此它们在整个检测范围内与原始pillar不是一一对应的。因此,第三步是将选定的P pillar散射到它们在检测范围上的原始位置。


之后,可以得到伪图像1675319434775.png,其中W和H分别表示宽度和高度。尽管使用PointPillars作为点云编码器,但Anchor-free检测器与生成伪图像或类似图像的2D数据的任何点云编码器兼容。

3.2、Anchor Free检测器

Anchor-free检测器由5个头组成。它们是keypoint heatmap head、 local offset head、z-axis location head、 3D object size head 和orientation head。图1显示了Anchor-free检测器的一些细节。

1、BEV中的目标定位

对于heatmap head和offset head,预测关键点heatmap1675319450599.png 和local offset regression图1675319478721.png,其中C是关键点类型的数量。关键点heatmap用于查找目标中心在BEV中的位置。offset regression图有助于heatmap在BEV中找到更精确的目标中心,也有助于恢复pillar化过程导致的离散化误差。


对于类别为1675319498777.png的3D目标k,将其3D GT边界框参数化为1675319520257.png,其中1675319532449.png表示表示激光雷达坐标系中的中心位置,1675319568090.png表示边界框的宽度、长度和高度吗, 1675319591274.png是围绕垂直于地面的z轴的偏航旋转。1675319609867.png表示x-y平面中的检测范围。

具体来说,在LiDAR坐标系中,1675319622723.png沿x轴,1675319644078.png沿y轴。在这项工作中,x-y平面中的pillar始终是正方形。因此,设b表示pillar边长。根据CornerNet,对于每个目标中心,在BEV伪图像坐标中有关键点1675319681694.png1675319668581.png。是关键点热图中的等效值。BEV中的二维边界框可以表示为1675319693822.png

对于伪图像中二维边界框中覆盖的每个像素1675319707254.png,在下面的heatmap中设置它的值

cf3b238a4904700d02cc0ceba4b743d4.png

式中,d为离散的伪图像坐标中边界框中心与对应像素之间计算的欧氏距离。预测值1675319731487.png表示目标中心,1675319751496.png表示该pillar为背景。

,即代表BEV中的目标中心,将被视为阳性样本,而所有其他pillar将被视为阴性样本。作者使用改进的Focal Loss:

fb04a136f5e4d61b62fcaee453c065dc.png

训练heatmap,其中N是检测范围内的物体数量,α和β是超参数。在所有实验中使用α=2和β=4。

对于 offset regression head,有两个主要功能。首先,它用于消除由pillar化过程引起的误差,在pillar化过程中,将浮动目标中心分配给BEV中的整数pillar位置,如上所述。第二,它在细化heatmap目标中心的预测中起着重要作用,特别是当heatmap预测错误的中心时。具体而言,一旦heatmap预测到距离GT中心数个像素的错误中心,offset head就能够减轻甚至消除对GT目标中心的数个像素误差。

在offset regression 图中围绕目标中心像素选择半径为的正方形区域。到目标中心的距离越远,偏移值就越大。使用L1损失训练偏移head:

8ede203f0fcbaef665113b37599cca4e.png

其中,训练仅针对关键点位置周围的边长为的正方形区域。

2、z轴位置回归

在BEV中定位目标之后,只有目标的x-y位置。因此,有z轴的位置头来回归z轴的值。使用L1损失直接回归z值1675319771049.png

0336e5096c69f9551dd014012a7fff56.png

3、大小回归

此外,还直接回归了目标大小1675319783849.png。对于每个目标都有1675319800345.png。回归的训练损失为

22fa99f7b88f38994644258a2ec80e4f.png

这也是L1的损失。

4、方向预测

目标k的方向1675319816249.png是围绕垂直于地面的z轴旋转的标量角度。按照CenterNet将其编码为8个标量,每个bin有4个标量。2个标量用于softmax分类,另外2个用于角度回归。2个bin的角度范围为1675319830533.png,略有重叠。


对于每个bin,预测1675319850555.png,用于softmax分类和1675319861278.png,用于计算到bin中心γ的偏移的sin和cos值。用softmax训练分类部分,而1675319874507.png用L1损失训练偏移部分1675319874507.png。因此,方向训练的损失是

20d702e5e2a5b4127ee4a50192b12d37.png

5、损失函数

已经描述了每个损失。总的训练损失函数是:

a9872eab01bde2022ffa2b8ded907efa.png

其中,λ表示每个头的权重。对于所有的回归头,包括局部偏移量、z轴位置、大小、方向回归。

6、收集索引并解码

在训练阶段,不对整个特征映射进行反向传播。相反,只反向传播作为所有回归头的目标中心的索引。在推理阶段,使用最大池化和and操作来寻找在CenterNet之后的预测heatmap中的峰值,这比基于iou的NMS更快、更有效。


在最大池化和and操作之后,可以从关键点heatmap中轻松地收集每个中心1675319904923.png的索引。设1675319926764.png表示检测到的BEV目标中心的集合。有1675319937837.png,其中n是检测到的目标的总数。那么BEV中的最终目标中心将是1675319952485.png,其中,1675319964262.png位于1675319975759.png使用1675319985583.png索引,对于所有其他的预测值,它们要么直接来自回归结果,要么已经提到了上面的解码过程。目标k的预测边界框为:

e4fcc8cc97a418d3cca2333a7038d62e.png

3.3、Backbone and Necks

在这项工作中对主干进行了几个关键修改,以支持Anchor-free检测器。网络包括主干部分和neck部分。主干部分类似于分类任务中使用的网络,该网络用于提取特征。neck部分用于对特征进行上采样,以确保来自主干的不同块的所有输出具有相同的空间大小,以便可以沿一个轴连接它们。图2显示了主干和neck的细节。

f4f8ee03f644e4b4ecbda206f35d6b58.png

首先,将主干从3个block减少到2个block。block 1675320026074.png由具有A个输出通道的E个卷积层组成,每个卷积层后面跟着一个BatchNorm和一个ReLU。T被定义为该块的下采样步长。通过将block的数量1675320080489.png从3减少到2,移除了下采样4次的特征图。因此,将上采样Neck 从3减少到2。每个上采样Neck 包含一个带A输出通道的转置卷积和T上采样步长,后跟BatchNorm和ReLU。第二,使用的第一个块是1675320093069.png,与输入大小相比,它没有对输出特征大小进行下采样。


因此,最终的主干和颈部由两个块1675320108523.png组成,随后分别是两个上采样颈部1675320123620.png。通过这样做,输入特征图和伪图像的宽度和高度是相同的。

总之,在生成特征图的过程中,不进行降采样,这对于保持KITTI数据集的类似检测性能至关重要。减少下采样步长只会增加FLOP,因此作者还减少了主干和Neck的过滤器数量。事实证明,主干和Neck的FLOP较少。

4、实验

aa6ea18dd0feee33df70f90945995a2f.png1a8a27d796023daa5cb3bd71b29c127c.png73212dfe723ea0ff20473cf26c4f1567.png

45f72d0111f4c94f02fb8ffe76ed9703.png02b6a24814843cbd071ba5738c9a717b.png

5、参考

[1].AFDet: Anchor Free One Stage 3D Object Detection.

6、推荐阅读

超实时语义分割 | DWR-Seg超越STDC-1/2、BiSeNet v1/v2,1080ti单卡320+FPS

Efficient-HRNet | EfficientNet思想+HRNet技术会不会更强更快呢?

量化加速系列 | 一文带你对YOLOv5使用PTQ和QAT进行量化加速!!!


相关文章
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
30天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
16天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
|
21天前
|
存储 JSON 算法
TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案
在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。
30 0
|
1月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
64 0
|
25天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
10天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
11天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
12天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。