自动驾驶中多模态下的Freespace检测轻量化设计实现

电子说

1.3w人已加入

描述

Freespace检测是驾驶场景理解的一部分,它将图像中的每个像素分类为可驾驶或不可驾驶区域,通常通过图像分割算法来实现。自动驾驶系统中的其他模块受益于这些像素级分割结果,例如轨迹预测和路径规划,以确保自动驾驶车辆在复杂环境中可以进行安全导航。近年来,多模态数据融合卷积神经网络(CNN)架构极大地提高了自由空间检测算法的性能。为了实现稳健且准确的场景理解,自动驾驶车辆通常配备不同的传感器,并且多种传感模式可以通过其互补性进行融合。在多模态学习中,模态可以根据融合级别从下到上进行组合。

自动驾驶

然而,这种多模态 CNN 具有高数据吞吐量并包含大量计算密集型卷积计算,限制了其实时应用的可行性。高阶智驾车载运算单元HPC为这些问题提供了灵活性、性能和低功耗的独特组合,以适应多模态数据和不同压缩算法的计算加速。网络轻量级方法为促进 CNN 在此类资源上的部署提供了极大的保证。

在本文中,介绍了一种用于多模态自由空间Freespace检测算法的网络轻量级方法。首先,通过设置HPC中擅长的算子进行运算,同时对神经网络进行两部分有效的剪枝,以减少参数数量,以防完整模型超出HPC芯片内存。然后,根据低秩特征图包含较少信息的原则提出了数据相关的过滤器剪枝器。对于特征提取器来说,为了不损害多模态信息的完整性,剪枝器对于每种模态都是独立的。对于分段解码器,应用通道修剪方法来删除冗余参数。

详细神经网络训练到底需要多大的计算量?

强大的骨干网络表现更好的分割特征。基于 U-Net的模型将较低级别的特征作为跳跃连接到特征图,以预测更详细的输出。最近的研究主要集中在语义分割模型中的非局部操作,以消除特征图中的噪声。这些方法使用参数极大的变压器来确保网络学习语义之间的相关性,具有高精度结果的特点。后来,逐渐引入结合多模态数据的几何信息的方法来解决这个分割问题。早期的工作将深度转换为单通道图像,并使用早期融合将深度和 RGB 简单地连接起来作为四通道图像输入。另一种三通道深度编码,包括水平视差、离地高度和法线角。在其他研究中,RGB和HHA图像被输入到两个DCNN中分别提取特征,最后使用中间融合来进行连接。

自由空间检测网络采用经典的编码器-解码器架构构建,如图1所示。

自动驾驶

图 1.轻量级多模态自由空间检测网络。采用编码器-解码器架构,网络的输入是一对 RGB 和深度图像。由残差网ResNets编码器进行处理,多模态融合策略是特征图的串联, U 形分割解码器被传播用于最终预测。

与软件平台不同,硬件构建的卷积计算资源在程序过程中无法释放。这意味着实现的算子越少对资源的利用就越好。常见的图像编码器包括 VGG 、Deeplab 、mobilenet、ResNet等。VGG采用堆叠3×3卷积,但由于梯度消失问题,网络较浅,很难达到高精度。Deeplab取得了不错的效果,但空间金字塔结构包含多种空洞卷积算子,多尺度融合时会产生较大的特征张量,很难实现。Mobilenet是一个轻量级网络,它使用深度可分离卷积来减少3×3卷积的参数,但代价是计算步骤的增加和低维特征的细节损失。ResNet通过捷径连接大大增加网络深度,具有很强的特征提取能力,基本只由3×3卷积和1×1组成卷积,这是我们编码器的首选。

如下图所示,卷积分解涉及残差网络ResNet中的计算有1×1卷积、3×3卷积、7×7卷积和快捷级联。

自动驾驶

图2. 用 3 × 3 卷积替换 7 × 7 卷积

需要注意的是,车载域控中的级联运算只需通过内存调度即可实现,无需计算单元的参与。因此,7×7卷积的计算量是最大的。同时,该卷积仅在第一层中出现一次,并且随后不会重复使用,这导致我们产生了对其进行优化的想法。与 7 × 7 空间滤波器的卷积意味着该操作的感受野是 7 × 7。不改变大小的感受野,我们试图找到一个具有更小的卷积核的多层网络来代替这个操作。卷积层的理论感受野可以通过递归公式计算:

自动驾驶

其中 r 是感受野,k 是内核大小,s 是步幅。假设特征图的长度和宽度都是x(x >= 7)。我们使用 7 × 7 卷积核以 1 的步长进行滑动,这需要 (x − 7 + 1) 次滑动。垂直方向同样,滑动(x − 7 + 1)次,因此有(x − 6) ∗ (x − 6)次卷积计算,其中感受野的大小为(x − 6) ∗ (x − 6) 6)。同理,3×3卷积后的输出大小为(x−3+1)*(x−3+1)。在输出图上再使用两个 3 × 3 卷积来获得感受野 (x − 3 + 1 − 3 + 1 − 3 + 1) ∗ (x − 3 + 1 − 3 + 1 − 3 + 1) = (x − 3 + 1) 6)*(x-6),等于7×7卷积结果。因此,可以得出结论,3个3×3卷积和1个7×7卷积具有相同的特征提取能力。

3 × 3 卷积的运算量为 9 次,7 × 7 卷积的运算量为 49 次。对于长宽均为 x 的图像,3 个 3 × 3 卷积和 1 个 7 × 7 卷积的计算量为 O3 = 9 ∗(x−2)2+9*(x−4)2+9*(x−6)2 和 O7=49*(x−6)2 分别。计算O3<=O7,可以得到x>12,这意味着对于大于12×12的图像,三层3×3卷积在参数数量和计算量上都具有优势。对于Resnet的第一层,输入是原始图像,远大于12×12,因此使用三层3×3卷积而不是7×7卷积总是性能更好。本文设计的优化加速7×7卷积层如图3(a)所示。

自动驾驶

图 3.(a) 优化加速 7 × 7 卷积层的细节。(b) 大特征降维的细节

实际上,在语义分割模型中,网络越深,感受野越大,但解码器中丢失的信息也越多。因此,边缘特征的检索极其重要。U-Net采用跳跃连接的方法,将编码器中的同级特征图与反卷积层的恢复结果进行融合,实现边缘特征的检索。参考这种U形结构,我们将多模态同层特征连接到skip连接,同时将它们用于反卷积层的计算。缺点是级联后的特征张量会很厚。以KITTI数据集为例,原始图像的大小为1392×512,四次下采样后的特征图大小为87×32,ResNet-50第4层特征图的维度为1024。所以特征张量的大小连接后的双模网络的大小为 87 × 32 × 3072,占用约 8.13 Mb的RAM。虽然这size在可接受的范围内,但是需要占用了一半以上的内存空间,这使得设备无法运行双批并行。这是浪费,所以我们使用两个 1 × 1 卷积层降低融合特征的维数如上图3(b)所示。

整个轻量级自由空间检测网络采用ResNet-50作为主干,U-net作为分割头,并采用级联作为特征融合方法,有效保持了网络的复杂度和特征提取能力。该轻量级网络仅包含3×3卷积和1×1卷积两个卷积算子,大大节省了HPC上的计算资源。同时,对算法中间结果的大小进行精确控制,使算法能够在HPC内部进行多批次并行处理,避免了外部数据交换带来的延迟。

为何要进行模型剪枝?

剪枝是一种基于 CNN 过度参数化的神经网络消除不必要权重的技术。作为一种机器学习方法,CNN可以分为两个阶段:训练和推理。

训练阶段,需要根据数据学习必要的模型参数;在推理阶段,新的数据被输入到模型中,经过计算得到结果。过度参数化则意味着训练阶段有大量参数来捕获数据集中的信息。一旦训练完成到推理阶段,这些参数大部分都是冗余的,这意味着可以在部署之前对网络进行剪枝。网络剪枝有很多好处,最直接的一个是减少大量计算,从而减少计算时间和功耗。更小的内存占用还允许算法在低端设备上运行,例如用更快、更省电的 SRAM 取代 DRAM。最后,较小的包大小有利于模型更新,使产品升级更加方便。根据剪枝特征的粒度,剪枝技术可以分为权重剪枝和过滤剪枝。早期的方法基于权重剪枝,剪枝的粒度就是权重核,剪枝后的核是填充零元素的稀疏矩阵。在当今硬件的支持下,利用现有的基本线性代数子程序(BLAS)库无法对稀疏矩阵进行优化,因此剪枝模型很难获得实质性的性能提升。因此,近年来的研究主要集中在过滤器剪枝上。存在不同粒度的过滤器修剪,例如基于过滤器、基于通道、基于块和基于层。由于过滤器剪枝不会改变权重矩阵的稀疏性,因此现有的计算平台和框架可以很好地支持它。

本文主要关注滤波器剪枝来实现模型压缩和加速,旨在为HPC提供通用的解决方案。典型的神经网络剪枝框架是训练、剪枝和微调。

如何根据滤波器剪枝评估函数删除参数?

滤波器剪枝是通过去除特征提取能力较弱的卷积核,使网络稀疏来加速的方法。该方法可以大大减少网络中的参数。重新训练剪枝后的模型,精度可以很快恢复。该过程可分为五个步骤。步骤1是用数据集训练整个网络,生成初始网络模型文件。步骤2记录第一层卷积核的权重分布,并根据卷积核的重要性设置剪枝率。步骤3,根据剪枝率删除对网络性能影响较小的卷积核和特征图之间的对应关系。步骤 4 是重新训练网络以恢复性能损失。步骤5,逐层重复上述过程,进行剪枝和微调,直至输出剪枝后的网络模型文件。

自动驾驶

当前,众多研究专注于修剪过滤器的细粒度权重。先前有人提出了一种迭代方法来丢弃值低于预定义阈值的小权重值,同时,将剪枝表述为一个优化问题,即找到最小化损失的权重,同时满足剪枝成本条件。然而,通过权值剪枝得到的稀疏矩阵不支持相应的加速操作。

与权重剪枝相反,过滤器剪枝是根据某些指标删除整个过滤器。它是加速超参数化 CNN 最流行的方法之一,因为修剪后的深度网络可以直接应用于任何现成的平台和硬件上以获得在线加速,从而使一些与数据无关的过滤器剪枝策略得到进一步探索。一些有效的方法包括利用 l1-范数标准可以修剪不重要的过滤器。而使用 l2-范数标准可以有效的选择滤波器,并以软方式修剪这些选定的滤波器,随后又有人提出通过对批量归一化层的缩放参数实施稀疏性来修剪模型,在滤波器上使用谱聚类来选择不重要的滤波器。还有一些论文甚至提出了通过几何中值进行过滤器剪枝来压缩模型。而这些过滤器剪枝方法需要利用训练数据来确定修剪后的过滤器。进而,采用下一层的统计信息来指导过滤器的选择。旨在通过最小化训练集样本激活的重建误差来获得分解。还有提出了一种本质上由数据驱动的方法,该方法使用主成分分析 (PCA) 来指定应保留的能量比例。将子空间聚类应用于特征图,以消除卷积滤波器中的冗余。此外,也有开发一种经过数学公式化的方法,用于修剪具有低秩特征图的过滤器。

剪枝滤波器评价函数

使用低学习率用额外的时期来训练网络,以便网络有机会从性能损失中恢复。一般来说,最后两步是迭代的,每次迭代都会增加剪枝率。剪枝器的核心在于选择剪枝滤波器评价函数,其目标是在最高压缩比下实现较小的精度损失。根据是否利用训练数据来确定剪枝滤波器,滤波器剪枝可以分为数据相关型和数据无关型。

1)与数据无关的剪枝方法是基于网络的固有权重,不依赖于输入数据。剪枝后,需要进行微调以恢复精度。典型的方法包括 L1 或 L2 范数、一阶梯度度量、特征图的秩和网络层中的几何中值。这些滤波器具有时间复杂度低的优点,但在精度和压缩比方面存在局限性。

2)数据相关剪枝的方法是在输入数据中添加额外的正则项,使其稀疏,并将剪枝嵌入到训练过程中,使数据流在网络训练过程中提出更好的剪枝策略。该类别属于 BN 层中的缩放因子和掩蔽结构稀疏参数等方法。这些直接向网络添加稀疏约束的方法通常会比第一种方法取得更好的效果。

在多模态学习中,模型通常支持多个数据输入,这使得数据对网络产生显着影响。因此,我们更喜欢依赖数据的过滤器剪枝作为评估函数。

优化网络学习算法进行模型训练

高效的自由空间检测算法对于智驾系统的部署非常重要。然而,很少有工作讨论用于自由空间检测任务的语义分割神经网络的修剪。针对分类任务设计的修剪方法已直接应用于分割神经网络,且在ImageNet上的主干网络中修剪过滤器并将其转移到分割网络。

本文介绍了一种多任务通道修剪以获得轻量级语义分割网络。

假设 Ci 是预训练 CNN 模型的第 i 个卷积层。Ci 中的权重可以表示为 WCi = {w1, w2, ... , wni} ε Rni×ni−1×ki×ki,其中 ni 代表数字Ci 和 ki 中的滤波器数量表示内核大小。输入特征图表示为 Xi ={x1, x2, ... , xni}εRb×ni−1×hi×wi,其中 b 是批量大小,hi 和 wi 是特征图的高度和宽度。过滤器剪枝旨在识别并删除不太重要的权重从 WCi 设置,可以将其表述为优化问题:

自动驾驶

其中 F() 衡量 CNN 中权重的重要性。δ是一个过滤器,如果 wi,j 重要,则为 1;如果 wi,j不重要,则为 0。最小化 p 就是去除 Ci 中最不重要的权重。

编码器剪枝:我们的关键问题在于设计一个能够很好地反映多模态特征信息丰富度的函数F()。由于不同模态的特征图相对独立,大多数直接基于网络权重设计F()的剪枝方法都会集中于某种模态,这导致算法忽略了重要的跨模态信息。因此,对于编码器,我们建议根据每个独立模态的特征图来定义 F(),因为特征图是可以反映滤波器属性和输入图像的中间步骤。

因此,优化函数 p 重新表述为:

自动驾驶

其中 F*() 估计 wi,j 和 xi,j 生成的特征图的信息。特征图包含的信息越多,相应的滤波器就越重要。

矩阵的秩是不相关的行或列向量的数量。对于图像的矩阵来说,秩可以表示图像中的信息冗余程度和信息量。我们对图像 xi,j 执行奇异值分解 (SVD):

自动驾驶

其中 R 是输入特征图的秩,σi、ui 和 vi 是奇异值。具有等级R的特征图可以分解为具有等级R和附加信息的较低等级的特征图,这表明较高等级的特征图比较低等级的特征图包含更多信息。它不仅可以作为信息的有效度量,而且可以作为稳定的表示。因此,我们将信息测量定义为:

自动驾驶

解码器剪枝:由于编码器和解码器网络中的缩放因子是交替优化的,因此为骨干网络和解码器设置相同的全局阈值是不合适的。无需考虑中间结果的影响,在解码器上应用传统的剪枝方法足以去除冗余参数。我们根据卷积核的 L1 范数对它们进行排序:

自动驾驶

我们为每个通道引入一个缩放因子,该因子乘以该层的输出。然后,我们联合训练网络权重和这些缩放因子,并对它们进行稀疏正则化。最后,我们用小因素修剪这些通道并对修剪后的网络进行微调。由于剪枝对应于删除该层的所有输入和输出,因此我们可以直接获得一个狭窄的网络。缩放因子充当权重选择并与权重共同优化,网络可以自动识别不重要的通道并安全地删除它们,而不会极大地影响泛化性能。

最后一步:量化和层融合

8位量化:我们的量化策略是在网络训练中使用浮点计算,在推理中使用整数计算。量化的目标是仅使用整数计算来完成所有算术运算。它是通过实数值r和整数值q之间的仿射变换来实现的:

自动驾驶

其中 Z 是量化零点,它是常数。r 是要量化的真实值,通常是 32 位浮点数。对于B位量化,q是B位的整数。在本文中,我们设置B = 8。S是量化尺度,通过计算整个数组的最大值和最小值来计算:

自动驾驶

Z是量化零点,表示q相对于0的偏差,与q是相同的数据类型。

量化层融合:一般CNN中的一层由卷积、BN和ReLU组成。由于推理过程中所有参数都是恒定的,这些计算的融合可以大大减少参数的数量。由于批量归一化,卷积计算可以设置为无偏的。

因此,卷积可以表示为:

自动驾驶

其中ω是权重,x是输入特征,y是卷积结果。将如上方程量化,其中 x = Sx(qx − Zx) 和 ω = Sω(qω − Zω),卷积等效于:

自动驾驶

批量归一化(BN)广泛用于解决内部协变量偏移问题。BN在推理过程中的计算可以概括为归一化和缩放的结合:

自动驾驶

其中ϵ是均值,σ是方差,α是尺度,β是平移。然后我们就有了量化的BN:

自动驾驶

卷积运算后接非线性激活单元,通过非线性激活函数处理上一层的线性输出,模拟任意函数,从而增强网络的表示能力。ReLU 是分段线性函数,这是最常用的激活层。ReLU算子可表示为:

自动驾驶

输出y也应量化为 y = Sy(qy − Zy)。因此当 y’’≥0 时,那么我们的量化结果为:

自动驾驶

当 y’’< 0 时:

自动驾驶

最后,得到量化卷积层参数公式如下:

自动驾驶

其中M、b、Zx、Zω和Zy是五个常数,可以在推理前离线计算。融合卷积层大大减少了推理中的计算步骤,进一步加速了网络。

总结

对于自动驾驶汽车来说,自由空间检测是视觉感知的重要组成部分。近年来,随着多模态卷积神经网络(CNN)的发展,驾驶场景语义分割算法的性能得到了显着提高。因此,大多数自由空间检测算法都是基于多个传感器开发的。

本文介绍的算法首先引入一种轻量级多模态自由空间检测网络,具有较少的卷积算子和较小的特征图。然后通过滤波器剪枝和8位量化来减少模型的参数。最后将该模型移植到车载域控上,使其能够在低功耗器件中进行独立预测。  






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分