在本文中对点云中3D检测的深度神经网络的优化进行了研究。使用了Brevitas和PyTorch工具中可用的量化和修剪等技术。对PointPillars网络进行了实验,该网络在检测精度和计算复杂度之间提供了合理的折衷。
这项工作的目的是提出一种将最终在FPGA设备中实现的网络变体。这将允许以低能耗进行实时LiDAR数据处理。所获得的结果表明,即使在算法的主要部分中从FP32到int2的显著量化,也会导致检测精度降低5%-9%,同时允许模型的大小减少近16倍。
1、简介
在高级驾驶员辅助系统(ADAS)和自动驾驶车辆(AV)中,检测物体,即车辆、行人、骑车人、动物等至关重要。它可以基于雷达、相机和激光雷达(光探测和测距)的数据。前两个传感器非常常用于目前上市的车辆,并配备了ADAS解决方案。然而,完全自动驾驶车辆通常还配有激光雷达传感器。最著名的例子是Waymo的车辆,但大多数主要汽车制造商和零部件制造商(博世、Aptiv)都有配备这些传感器的测试车辆。
LiDAR是一种有源传感器,其优点是对照明条件的灵敏度低(包括夜间的正确操作)以及对环境的相当精确的3D映射,尤其是在距离传感器较近的地方。缺点包括在强降雨或降雪和雾的情况下操作不当(发生激光束散射)、图像质量随着与传感器的距离增加而恶化(点云的稀疏性)以及非常高的成本。
最后一个问题是阻碍该技术在商用车中更广泛应用的主要原因。然而,应该注意的是,这一领域不断取得进展,包括所谓的固态解决方案(无移动部件)。因此,人们应该预期激光雷达的成本很快就会低得多。激光雷达传感器的输出是点云,通常在极坐标系中。将反射强度系数指定给每个点。其值取决于反射光束的材料的特性。
由于数据格式相当特殊,基于激光雷达点云的目标检测和识别与“标准”视觉系统已知的方法有很大不同。通常,可以区分两种方法:经典方法和基于深度神经网络的方法。
首先,对输入点云进行预处理、分组、特征向量计算和分类。这些方法在广泛认可的测试数据集(即KITTI)上仅达到中等精度。
在第二种情况下,使用深度卷积神经网络。它们提供了优异的成绩(参见KITTI排名)。然而,高精度的代价是计算和内存的复杂性,以及对用于训练和推理的高性能图形卡(GPU)的需求。这与自动驾驶汽车系统的要求形成了对比,自动驾驶汽车的目标是在保持实时操作和高检测精度的同时降低能耗。
最近,嵌入式深度神经网络的一个非常有前途的研究方向是计算精度降低(量化)。在许多出版物中,已经表明,从32位或64位浮点表示转换为定点,在极端情况下甚至转换为二进制表示,会导致相对较小的精度损失,并显著降低计算和内存复杂性。例如,在BNN中提出了使用二值网络的实验,在GXNOR-Net中给出了使用三值网络的试验。此外,可以使用修剪(去除不太重要的神经元),这可以进一步降低网络的计算复杂性。
在这项工作中评估了将上述优化应用于深度神经网络的可能性,用于对来自激光雷达传感器的点云数据进行目标检测。基于最初的分析,选择了PointPillars网络,这主要是因为检测精度与计算复杂度的良好比率。然后,使用Brevitas和PyTorch库,进行了一系列实验,以确定限制精度和修剪如何影响检测精度。
通过将精度从32位浮点更改为2-bits整数,能够将模型的大小减少近16倍。这也导致了检测精度下降5%-9%,应视为中等和可接受。该网络的类似实验以前没有在文献中描述过。本研究是在FPGA(现场可编程门阵列)设备中实现PointPillars网络的工作的一个阶段。这将允许创建一个能效高、实时工作的嵌入式检测系统。
2、PointPillars的优化
2.1、优化方法
首先,在设计阶段,可以减少层数,并且可以使用更简单的计算元素。然而,这与大模型或具有附加模块的模型提供更好结果的一般规则相矛盾。PV-RCNN网络就是这个问题的一个很好的例子。
其次,可以量化所需的计算。最初,所有算术运算都是对单精度或双精度浮点数(分别为32位或64位)执行的。这确保了高精度,但参数消耗大量内存资源,并且计算需要复杂的硬件资源,因此需要大量能量。
多年来,在FPGA中算法的硬件实现中,一个自然的步骤是转换为定点表示,精度从64位到1位。权重(网络参数)和激活(在这种情况下,ReLU函数)都可以被量化。值得注意的是,量化也用于人工智能算法的专用硬件加速器,例如谷歌的张量处理单元和许多其他加速器。
最简单的解决方案,以量化训练模型的权重的形式,并不能提供良好的结果——观察到操作质量显著下降。因此,精度有限的训练网络是一个更好的解决方案。在本文中使用了这种方法。
第三种流行的方法是所谓的剪枝,即去除权重不显著(即值较低)的连接和神经元。在实践中,该过程包括多次迭代,需要多个神经元移除和网络重新训练步骤。
2.2、使用的工具
如上所述,当从一开始就用量化参数训练网络时,量化提供了最佳结果。此外,在嵌入式系统(包括FPGA设备)中实现网络时,这一点很重要。
因此,在FPGA的领先制造商之一Xilinx的研究部门,FINN项目被开发用于在FPGA中实现量化神经网络(QNN)。它由三部分组成:QNN网络训练工具(Brevitas)、将网络描述转换为可在FPGA设备和基于Pynq的部署环境中运行的硬件模块的FINN编译器。
在本研究中,使用了Brevitas工具。它是一个基于流行的PyTorch工具的库,该工具允许训练量化神经网络(QNN)。它提供了诸如选择量化类型(二进制、三值或整数)、精度(恒定或学习的位宽)或缩放等选项,既适用于层,也适用于激活函数。
当前可用的层包括1D和2D卷积以及完全连接的层。Brevitas没有定义自己的批处理规范化层,但可以很容易地使用PyTorch中提供的规范化层。支持的激活功能有:ReLU、Sigmoid、Tanh和HardTanh。
2.3、PointPillars量化
为了检查PointPillars网络优化如何影响检测精度(AP值)和网络大小,作者进行了几个实验。这里专注于KITTI数据库中的数据,尤其是3D类别中的汽车检测,有三种难度:简单、中等和困难。作为参考,使用了32位浮点(FP32)表示中所有参数的网络。将PointPillars网络的量化分为4个部分:Pillar Feature Net(PFN)、Backbone、Detection Head(SSD)和激活函数。
最初的PointPillars网络使用Adam优化程序进行训练,初始学习率为0.0002,每15个周期衰减0.8倍。epoch的总数最初是160个,但在初步研究中发现大约20个后可以获得令人满意的结果。因此,决定将大多数实验限制在20个epoch,用于这样的配置,一个实验在配备AMD Ryzen 5 3600处理器和Nvidia RTX 2070S GPU的计算机上平均持续3小时。
将量化实验分为几个阶段。第一个重点放在Backbone部分,因为它对整个网络的大小影响最大(基础变体的影响超过99%)。在表II的左边部分和图2中总结了结果,其中根据网络的大小给出了AP值。虚线表示非量化网络的AP参考值。特定类别(简单、中等、困难)的波形相似-网络大小小于2 MiB(INT2量化)时,精度显著降低,超过2 MiB时,精度保持稳定,最大值约为5 MiB(INT8量化)。
观察到,INT8量化最接近于原始FP32,而INT16和INT32量化导致了明显更差的结果。这一观察结果需要进一步分析,因为这可能是由于训练期间使用的时间有限所致。
进一步的实验侧重于Backbone网络的INT2量化。网络规模减少了近16倍,AP最大下降11%。选择这个变型是考虑到未来在FPGA中实现这个网络的工作,其中模型的大小是关键约束之一。在这种情况下,当需要更高的精度时,也值得考虑INT4和INT8变型,其中尺寸分别减少了8倍和4倍。
第三个实验考察了SSD量化如何影响AP。在表III SSD量化列中给出了结果。该层略大于PFN,但从整个网络的角度来看也不显著(相对于INT2变体,仅为2.5%)。有趣的是,量化对最终AP值的影响相对较小,获得了INT8变体的最佳结果。
根据收集的结果,为整个网络选择了几个量化选项,并在表III的所有层量化列中进行了总结。考虑了PFN的变体INT16和INT8,Backbone的变体INT2,SSD的变体INT6、INT8和INT2。然后重新训练了选定的网络。最终,在变量PP(INT8、INT2、INT8、FP32)中获得了PointPillars网络的最佳结果,其中各个元素分别表示PFN、Backbone、SSD和激活函数的类型量化。配置PP(INT16、INT2、INT8、FP32)也获得了良好的结果。
对于这两个变体检查了量化ReLU激活函数的效果。在表V中展示了该实验的结果。考虑了3种变体INT16、INT8和INT4。结果表明,更高的精度对检测精度有负面影响。这个问题需要进一步研究。然而,对于所考虑的网络变体,FP32和INT4激活之间的差异很小,因此在进一步的实验中使用了这种量化。
所考虑的两种变体是最有前途的:PP(INT8、INT2、INT8和INT4)和PP(INT16、INT2和INT8、INT4)。又训练了140个Epoch,总共达到160个。获得的结果,包括训练了160个Epoch的PP(FP32、FP32,FP32和FP32),如表IV所示。所考虑的两个变体具有非常相似的AP结果。最终选择了PP(INT8、INT2、INT8和INT4),与参考变体相比,它为权重提供了几乎16倍的内存节省,而AP值在所有3个类别中最多下降9%。
2.4、PointPillars剪枝
作为进一步研究的一部分,考虑对训练了160个Epoch的PP(INT8、INT2、INT8和INT4)变体进行修剪。该网络被修剪成三种变体——整个网络中绝对值最小的权重分别为60%、70%和80%(使用了PyTorch中可用的功能)。接下来,用冻结和未冻结的修剪权重训练这些变体,再训练20个Epoch。在表6中显示了结果。所说的冻结权重是指在训练期间保持其值不变(即等于零)。
可以看出,当将60%和70%的权重归零时,AP值保持不变。当在修剪后将80%的权重归零时,可以看到AP值显著降低。然而,在重新训练后,结果是所考虑的情况中最好的,而且未冻结的变体与训练了20个Epoch的FP32基变体相当。与训练了160个Epoch的基础变体相比,AP在所有三个类别中最多下降8%。冻结变种的性能略有下降,但仍非常接近于训练了160个Epoch的PP(INT8、INT2、INT8和INT4)。使用剪枝不会直接影响网络的大小,但在FPGA设备中的硬件实现的情况下,它允许显著减少必要的计算元素。
3、总结
本文介绍了基于激光雷达点云的三维物体检测PointPillars网络的优化研究。使用了两种技术:量化和修剪。分别使用PFN、Backbone、SSD和激活函数部分,对不同的网络量化变体进行了几个实验。事实证明,最重要的是Backbone部分的量化,它负责99%的输入网络大小。在这种情况下,将计算精度从FP32更改为INT2导致尺寸减少了近16倍,损失了约11%的AP(平均精度)。其他层的量化对网络大小影响较小,对AP值影响不大。
作者还训练了160个Epoch的最佳变种P P(INT8、INT2、INT8和INT4),这使得简单测试用例的精度提高了约4%,而中、硬测试用例的精确度提高了10%。此外,进行了几次剪枝实验,结果表明,去除80%的神经元,然后进行再训练,只会导致性能略有下降。与浮点精度的输入网络相比,优化后的PointPillars网络的最后一个变体的AP值最大减少了9%,在使用冻结权重进行修剪后,AP值最大降低了10%。大多数操作使用INT2数字,有些使用INT8,整个模型比原始模型小约16倍。
综上所述,所获得的结果表明,PointPillars网络所使用的优化提供了非常好的结果,在可编程设备中实现节能、实时应是完全可能的。
在系统进一步工作的第一阶段,将使用FINN工具生成具有PointPillars网络优化变体的硬件模块,并尝试在FPGA或Zynq SoC设备上运行。
最终,希望创建一个与激光雷达传感器合作的演示器。然后,计划对KITTI集合中的其他类别,即行人和骑自行车者,以及Waymo和NuScenes集合进行网络实验。此外,将对Backbone进行深入的量化分析。从长远来看,考虑使用研究结果的状态或添加其他元素来修改网络架构。最终,希望将数据融合用于激光雷达、视频和雷达传感器。
4、参考
[1].Optimisation of the PointPillars network for 3D object detection in point clouds.
作者: 小书童
文章来源:集智书童
推荐阅读
更多嵌入式AI干货请关注 嵌入式AI 专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。