自动驾驶神经网络模型压缩与模型加速浅谈

来源:汽车电子与软件 ,作者Dr. HU
2023-04-24
1380
1.jpg



一、介绍


随着深度学习技术的快速发展,深度神经网络已经在各个领域,如目标检测、图像分类、图像分割以及语音识别等领域取得了较大的成功。为了追求性能的提升,深度神经网络的模型也变得越来越大,从早期的VGG16100多万的参数量发展到今天的Bert以及GPT模型的数十亿以及GPT3上千亿的参数量,这些巨大的模型在获得性能提升的同时也带来了显著的复杂性,以及很难部署在嵌入式环境中。嵌入式环境中的存储和计算都是有限、成本是十分宝贵的,因此如何保证模型性能的同时也能部署于嵌入式系统是一个比较大的挑战,特别是对于一些实时性要求较高的应用例如自动驾驶得目标检测任务。另外,具有很多参数的DNN 训练起来也十分耗时。

为了实现这些目标,研究者进行了较多的探索,并在过去几年取得了较多的进展。当前的方法主要包括:

1)模型剪枝和参数量化

2)低秩分解

3)网络结构优化(包括知识蒸馏以及NAS 模型小型化)

4)计算优化例如卷积转化GEMMWinagrad等,算子的融合和优化Conv+Activation等融合,以及稀疏矩阵优化等

在下面的表格中,我们总结了这些方法。 模型剪枝主要基于探索模型中的参数冗余,并尝试去除模型中的冗余和对结果影响不大的非关键参数。模型量化主要是将网络中的浮点参数转换成针对硬件并行计算更友好的int整数进行计算,因此从FP32浮点数转换成int8乃至int4int2等整数类型,大大降低了读写存储的计算和时延因此提高了嵌入式系统推理的速度。基于知识蒸馏的方法通过参数量巨大且性能优异的模型训练一个小的模型也叫(Teacher-Student)模型,也可以通过自蒸馏的方式挑选一个性能和推理速度平衡的模型。低秩分解技术是一种将高阶张量分解为低秩张量的方法,将大层分解为许多较小的层,例如将一个3*3的卷积分解为3*11*3的两个张量, 从而减少计算量。网络结构的优化方法主要包括基于知识蒸馏的方法,通过知识蒸馏的方法学习蒸馏模型并训练更紧凑和更小的神经网络来再现更大模型的输出和保持相当的性能。而NASNetwork Auto-Search)则是通过自动搜索更紧凑和更小参数量的模型来保持较高的性能的一种模型压缩方法。最后,在模型部署到嵌入式系统之前,还可以通过算子转换例如卷积转换GEMMWinagrad以及算子融合等手段进一步降低计算量和降低存储读写带宽,加快模型推理的速度。

2.png

模型压缩和加速的不同方法总结

当然, 这些方法大多是独立设计的,可以进行相互补充。 例如,模型剪枝和算子融合以及算子转换可以一起部署,NAS也可以和知识蒸馏结合来实现更进一步的压缩/加速。 我们将在下面的部分更进一步描述他们的特性,以及优缺点和使用。


二、模型剪枝(Prunt)


模型剪枝的方法根据实现可以分为基于度量标准、基于重建误差、基于稀疏训练几种的剪枝方法。基于度量的方法主要是通过判断一个神经元例如权值是否重要,将不重要的神经元进行剪掉。目前,主要用于度量重要的元素为:Weight / Activation /。模型剪枝的示意图如下图2所示:

3.png

图2模型剪枝示意

2.1 基于Weight的剪枝:其中比较经典的方法是对滤波器的剪枝,这种方法通过权重的L1-Norm判断filter的重要性,进而剪掉那些不太重要的权重。但这种基于L1-Norm的方法是一种主观的方法,事实上不同权重的大小值并不是直接和网络输出的呈现绝对的关联关系,在某些神经网络中有可能将某些权值较小但实际对网络输出有较大的影响的因此将这类值偏小的权值剪掉进而导致模型性能的下降。因此,一些学者提出了另外一种基于优化目标的剪枝方法,例如Lecun提出的最优脑伤(Optimal Brain Damage)是其中一种方法,这种方法建立了一个误差函数的局部模型来预测扰动参数对优化目标造成的影响,从Loss寻找对损失影响最小的神经元。

2.2 基于Activation的剪枝:这种方法采用Activations中的比例用activations0的比例 (Average Percentage of Zeros, APoZ)作为度量标准,通过激活的稀疏性来判断一个通道的重要性,认为拥有更高稀疏性的通道应该被剪除。另外一种是基于信息熵进行剪枝。对权值的剪枝也可以分为按通道剪枝和按滤波器剪枝。基于通道的剪枝中的一种方法是基于重要性因子【Network Trimming】,即评估一个通道的有效性,再结合约束一些通道使得模型结构本身具有稀疏性从而进行剪枝,另外一种方法是利用重建误差来指导剪枝,间接衡量一个通道对于输出的影响。第三种是基于优化目标的变化来衡量通道的敏感性,进而进行剪枝。

不管是连接剪枝还是通道剪枝,都是通过重要性也即某种准则来判断一个连接或者通道是否重要,比如范数。但这类直观方法的假设前提条件太强,需要权重和激活值本身满足一定的分布。之前的一些方法都是逐层进行剪枝,并没有让各层之间联动,这些方法过于局限,当前阶段冗余的模块在其它阶段并不一定也是冗余,因此最近的一些研究人员也提出了通过反向传播来对整个神经网络的重要性进行打分评估,一次性完成整个剪枝。

最新的一些剪枝的研究则是动态剪枝和自动化剪枝, 其中的代表方法AMC(AutoML for Model Compression)是一种自动化剪枝技术,其核心思想是使用强化学习技术来实现自动化压缩模型,采用强化学习中的DDPG(深度确定性策略梯度法)来产生连续空间上的具体压缩比率,通过约束FLOPs和准确率设定奖励值,因此得到的压缩策略是适应当前硬件环境的。而动态剪枝是相对于静态剪枝来说的,动态剪枝可以通过利用改变输入数据潜在减少计算、带宽和功耗来克服静态修剪的限制。动态剪枝主要是通过使用通道阈值加权来决策需要动态修剪的通道。总的来说,单纯的依赖规则的剪枝当前看来已经不是最优的方案了,由于深度神经网络中的层并不是孤立的,因此基于动态的剪枝和基于自动搜索的方法将得到更多的应用。



三、模型量化


模型量化是通过一组整数值来近似神经网络元的连续值信号的过程。早期的神经网络都是用FP32来进行训练和推理的,后来研究人员发现将FP32转为INT8的整数可以在不显著降低准确性的同时加速推理,并可以显著减少内存带宽、能耗以及片上面积,神经网络量化就开始得到了大量应用。量化技术的发展经历了从后量化(PTQ)到量化感知(QAT),如下图3所示:


4.png

图3 量化流程

早期的量化,主要针对权重的量化,通过量化、聚类和共享,训练后的量化通过量化权重,然后重新训练优化模型可以将模型的存储大大降低。量化函数如下公式1:


5.png


这里,S是量化sclaer,z是偏置,在对称量化中z是零值。量化可以用于输入特征F, 权重W和偏置b。反量化是将量化值q转换回浮点值x,在推理的最后阶段进行反量化将结果转换回浮点值。


而利用待量化值分布和量化值分布的最小化KL-Divergence是另外一种量化方法,这种也是Nnvida TensorRT所采用的一种方法。KL散度的作用主要体现在量化阶段,获取zero point和scale factor上,用来衡量量化前后信息的损失程度。量化方法如下式所示:

6.png 


其思路就是首先构建起一种FP32数据向Int8数据的映射关系,对每一层采集的数据构建一个直方图,并生成多个量化分布,然后寻找最小阈值的量化,这个最小阈值的式通过一个矫正数据来进行Scaler的选择,选择的标准就是最小化KL 散度,因此最后找到了对应的映射关系。

对数量化是另外一种量化方法。与乘法运算相比,移位运算在硬件中的实现成本较低,如果权重被限制为可具有可变长度编码的二次方,则可以进一步优化网络推理。移位神经网络(ShiftCNN)通过将实值权重矩阵量化量化和分解为N倍B范围位移,并使用码本e对他们进行编码,权重w可以通过NB位进行索引,如公式所示:


7.png

后期,Deepshift则更进一步提出了一种通过移位卷积来节省计算消耗的方法,Deepshif去掉了所有的浮点乘法运算,取而代之的是位反转和位移位。量化方式如下式,这里S是符号矩阵,P是位移矩阵,Z是整数。
8.png

由于对数编码具有更大的动态范围,冗余网络尤其受益。

后量化(PTQ)的方法使用全局(逐层)量化将全精度模型缩减为整数位模型,这种方法一个显著的缺点就是由不可逆的精度降低变换引起的信息损失,精度损失在二进制网络(BNN)和浅层网络中尤其明显。研究表明反向传播微调(重新训练)量化网络可以恢复由于量化过程引起的精度损失。量化感知(QAT)是一种在训练阶段引入量化的手段,通过在一边量化一边训练可以降低量化过程带来的精度损失。通过end-to-end training微调训练后的模型参数,让模型对量化的鲁棒性更强,从而缓和造成的精度下降问题,而且通过QAT,我们也能够达成更低位,例如INT4的量化,从而进一步轻量化模型与提高推理效率。

由于对神经网络进行了量化成了二进制值例如BNN网络,单比特参数是无法进行微分的因此也无法通过反向传播训练来获得更新所需的梯度值。早期的方法用直通估计器(STE)来传播梯度值, STE 通过绕过二值函数直接计算梯度,

9.png


DoReFaNET则进一步将权重、特征和梯度都进一步量化为不同bit位的网络,从而获得比BNN 更大的动态范围。而LSQ方法则是在训练过程在训练过程中进行模拟量化,或者说是插入FakeQuant伪量化算子如下图4所示,对weight与activation tensor进行量化,然后再做反量化引入量化误差进行训练,所以在fine-tune的过程中模型还是以FP32精度进行运算的,并不是像推理过程中的低位运算。之后通过反向传播与梯度下降的方式微调模型权重。对于量化参数的确定,PTQ中weight tensor的量化参数通常采用绝对最大值除以127的方式确定,而activation tensor量化参数则根据QAT算法的不同可能也有所不同。后期的PACT和DSQ则更进一步进行了改进,此处不一一展开进行说明了。

10.png
                                      
图4 可学习量化参数的量化感知流程

量化的发展方向是自动压缩,低位宽的量化虽然能带来降低计算成本和带宽负荷,但也会带来精度损失, 自动量化来自动搜索量化编码以评估精度损失和压缩比的是未来的热门研究方向。



四、网络结构优化及知识蒸馏


知识蒸馏是一种能将复杂且高性能的大模型(教师模型Teacher)的能力泛化到一个紧凑型模型(学生模型Student)上,来提高学生模型的性能。使用知识蒸馏训练学生模型提高了它的泛化能力,使得学生模型能够模仿与教师模型相似的行为来预测目标类概率。知识蒸馏按蒸馏的应用可以分为:Logits 转移,教师辅助,领域适应。

按照蒸馏的方式来说也有多教师-学生融合方式,以及自蒸馏的方式。

Logits转移是从教师转移知识到学生模型的一种简单方式。首先,教师模型在数据集D上进行训练,对于分类器来说,取softmax前的神经网络输出也叫Logits输出,将其当作Soft 目标来指导学生模型训练,另外采用温度缩放Temptature scaler来对软目标进行缩放得到更平和的软目标分布,可以进一步提高学生模型性能。如下公式所示:


11.png


学生模型的总体损失函数Loss包括两部分:与软目标的交叉熵和与Ground Truth的交叉熵。经过训练后,较小的学生模型能得到等同或接近复杂教师模型大致相当的性能。下图5是采用logits转移来进行知识蒸馏的示意图。


12.png


图5Logits 转移的知识蒸馏


后面也有其他研究人员提出了多教师训练单个学生模型的方法,多模型进行ensemble融合来进一步提升学生模型的泛化性能。由于基于Logits的知识的学习较为简单,软目标依赖于神经网络最后一层的输出,无法采用教师模型的中级表征来监督学生模型的学习。

针对Logits方式的蒸馏的不足,研究人员后面又提出了基于特征的知识蒸馏方法,直观的来看,就是利用了中间层的输出和最后一层的logits输出来监督学生模型的训练。通常采用教师和学生不同特征层的L2距离损失加上Logits损失来监督学生层的训练,基于特征的知识蒸馏示意图如下图6所示:

13.png

图6基于特征蒸馏的知识蒸馏框图

自注意力蒸馏方法(Self Attention Distillation(SAD))则是另外一种无需专门的预训练模型。在自动驾驶等要求不可容忍错误的领域,需要进一步提高预测和分析的准确性,同时要求更低的预测时间。模型间的知识蒸馏存在以下的不足:1)需要耗费大量的时间和精力来寻找和设计合适的教师模型;2)知识迁移效率并不理想;因此,研究人员提出了利用自身的模型进行蒸馏,将模型的backbone进行分级成不同的子部分,每个子部分后添加Bottleneck模块,分别针对预测与GT之间进行蒸馏,针对Feature 之间进行蒸馏,针对每个bottleneck的预测与最深的层之间的预测进行蒸馏,最后根据精度和推理效率之间寻找一个最佳的结构。算法结构图如下图7所示:

14.png


图7自蒸馏知识框图


基于NAS的蒸馏,之前的知识蒸馏中知识迁移的成功不仅取决于教师的知识,还取决于学生的架构,但是教师模型和学生模型存在较大的能力差距导致较难让学生很好的学习到教师的知识,因此采用神经网络架构搜索(NAS)来找到合适的学生模型,进一步进行知识迁移是一个解决方法。



五、一些未来研究的研究方向探讨


由于自动驾驶的低时延特性,加上现在基于BEV和Transformer的模型的快速应用,以及自动驾驶采用的芯片的资源以及成本考虑无法满足快速算法快速增长的需求,对于模型的压缩和优化尤其重要。


本文讨论一些自动驾驶所用的深度学习的模型压缩的一些优化方法,包括网络剪枝、模型量化、知识蒸馏以及混合技术。不同类别的DNN压缩提供了多种研究和工程应用可能性,但仍有很多工作待业界进一步研究和探索。其中现有的研究工作主要强调压缩卷积神经网络和全连接层,但针对递归神经网络和图神经网络等模型所作的工作不多。而这些模型现在也开始大量应用于自动驾驶的预测、跟踪和决策。另外,尽管现有文献中采用的不同的精度保持机制,但DNN模型仍然面临性能的损失。这一些问题仍需要研究人员和工程人员进一步研究和探索。


参考文献:
1)Li, Hao, et al. "Pruning filters for efficient convnets." arXiv preprint arXiv:1608.08710 (2016).
2)Liu, Chao, Zhiyong Zhang, and Dong Wang. "Pruning deep neural networks by optimal brain damage." Fifteenth Annual Conference of the International Speech Communication Association. 2014.
3)Hu, Hengyuan, et al. "Network trimming: A data-driven neuron pruning approach towards efficient deep architectures." arXiv preprint arXiv:1607.03250 (2016).
4)Hu, Hengyuan, et al. "Network trimming: A data-driven neuron pruning approach towards efficient deep architectures." arXiv preprint arXiv:1607.03250 (2016).
5)Luo, Jian-Hao, and Jianxin Wu. "An entropy-based pruning method for cnn compression." arXiv preprint arXiv:1706.05791 (2017).
6)Ye, Jianbo, et al. "Rethinking the smaller-norm-less-informative assumption in channel pruning of convolution layers." arXiv preprint arXiv:1802.00124 (2018).
7)R. Yu et al., “NISP: Pruning networks using neuron importance score propagation,” in Proc.IEEE/CVF Conf. Comput. Vis. Pattern Recognit.,Jun. 2018, pp. 9194–9203.
8)He, Yihui, et al. "Amc: Automl for model compression and acceleration on mobile devices." Proceedings of the European conference on computer vision (ECCV). 2018.
9) S. Han, H. Mao, and W. J. Dally, “Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding,” International Conference on Learning Representations (ICLR), 2016.
10) Y. W. Q. H. Jiaxiang Wu, Cong Leng and J. Cheng, “Quantized convolutional neural networks for mobile devices,” in IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016
11) S. Gupta, A. Agrawal, K. Gopalakrishnan, and P. Narayanan, “Deep learning with limited numerical precision,” in Proceedings of the 32Nd International Conference on International Conference on Machine Learning - Volume 37, ser. ICML’15, 2015, pp. 1737–1746.
12)Y. Choi, M. El-Khamy, and J. Lee, “Towards the limit of network quantization,” CoRR, vol. abs/1612.01543, 2016.
13) M. Courbariaux, Y. Bengio, and J. David, “Binaryconnect: Training deep neural networks with binary weights during propagations,” in Advances in Neural Information Processing Systems 28: Annual Conference on Neural Information Processing Systems 2015, December 7-12, 2015,Montreal, Quebec, Canada, 2015, pp. 3123–3131.
14) S. Han, J. Pool, J. Tran, and W. J. Dally, “Learning both weights and connections for efficient neural networks,” in Proceedings of the 28th International Conference on Neural Information Processing Systems, ser. NIPS’15, 2015.
15) Zhou, Shuchang, et al. "Dorefa-net: Training low bitwidth convolutional neural networks with low bitwidth gradients." arXiv preprint arXiv:1606.06160 (2016).
16) Gong, Ruihao, et al. "Differentiable soft quantization: Bridging full-precision and low-bit neural networks." Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019.
17) Choi, Jungwook, et al. "Pact: Parameterized clipping activation for quantized neural networks." arXiv preprint arXiv:1805.06085 (2018).
18)Hahn, S. & Choi, H. (2019). Self-knowledge distillation in natural language processing. In: RANLP.
19)Hinton, G., Vinyals, O. & Dean, J. (2015). Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531.
20)Gong, C., Chang, X., Fang, M. & Yang, J. (2018). Teaching semi-supervised classifier via generalized distillation. In: IJCAI.
21)Guan, Y., Zhao, P., Wang, B., Zhang, Y., Yao, C.,Bian, K., & Tang, J. (2020). Differentiable Feature Aggregation Search for Knowledge Distillation. In:ECCV.
22)Huang, Z. & Wang, N. (2017). Like what you like:Knowledge distill via neuron selectivity transfer. arXiv preprint arXiv:1707.01219.
23)Kwon, K., Na, H., Lee, H., & Kim, N. S. (2020).Adaptive Knowledge Distillation Based on Entropy.In: ICASSP.
24) Cheng, Yu, et al. "A survey of model compression and acceleration for deep neural networks." arXiv preprint arXiv:1710.09282 (2017).
25)Gou, Jianping, et al. "Knowledge distillation: A survey." International Journal of Computer Vision 129 (2021): 1789-1819.
收藏
点赞
2000