![d3e252c906bb0f0db6c6785771450d18.png](https://i-blog.csdnimg.cn/blog_migrate/f7b3ece77792a16d41774ed61b74498b.jpeg)
论文:Speeding up Convolutional Neural Networks with Low Rank Expansions
论文链接:https://arxiv.org/abs/1405.3866
摘要:
本文的重点是加快卷积神经网络。
卷积神经网络虽然在一系列计算机视觉和机器学习任务中均能提供令人印象深刻的结果,但它们在计算上却要求很高,从而限制了其可部署性。
卷积层通常会消耗大量的处理时间,因此我们提出了两种简单的方案来大大加快这些层的速度。 这是通过利用跨通道或卷积核冗余来构建空间域中rank-1的低等级滤波器来实现的。
我们的方法与体系结构无关,可以轻松地应用于现有的CPU和GPU卷积框架,以实现可调节的加速性能。 我们通过一个专为场景文本字符识别而设计的现实世界网络证明了这一点,该网络显示出2.5倍的加速速度而不会降低精度,而4.5倍的加速速度而准确度却下降了不到1%,仍然实现了最先进的标准基准。
1、介绍:
端到端学习系统与对人类设计决策的最低需求相结合,以及有效训练大型和复杂模型的能力的结合,使它们能够在许多基准测试中达到最先进的性能。然而,由于使用了多个卷积层的链,这些高性能的CNN带来了巨大的计算成本,通常需要在GPU或高度优化的分布式CPU体系结构上实施以处理大型数据集。这些网络越来越多地用于滑动窗口方法中的检测,以及在实际系统中应用CNN的意味着测试速度成为应用的重要因素。
在本文中,我们介绍了一种易于实施的方法,可显著加快需要对现有框架进行最少修改的预训练CNN。这可以调整到所需的精度水平并且保证相关的性能损失很小。例如,我们证明了在字符识别的示例应用程序中,4.5倍的加速仍然可以提供最先进的性能。
本文中对CNN加速的两个方案主要是利用不同特征通道和捐几个之前存在的冗余。
2、Filter Approximations
滤波器组通常被用作特征提取器,在卷积层内部使用是,可以从输入图像生成特征图。
对于一个H*W的二维输入
假设对于单通道的输入,利用N个2D
接下来,我们利用不同的卷积核和特征通道之间存在大量冗余这一事实,介绍了用于加快计算速度的方法。
a、一种方法是通过少一些的M个滤波器的线性组合来近似原本的滤波器组。
这个小的基组表示为
由于仅仅需要将较少数量的滤波器与输入图像进行卷积,并且最终特征图由一些廉价的线性组合组成,这就可以加速特征图的计算。计算复杂度为
b、通过在近似的基础上将滤波器选择为rank=1并因此使各个卷积可分离,可以进一步提高速度。
这意味着可以将每个基本滤波器分解为一系列水平和垂直滤波器
![411d15d9f4e9094700ff5600b91d6bbe.png](https://i-blog.csdnimg.cn/blog_migrate/f757d1a4bb7060f0f2178b2428d584d3.png)
使用这种分解方式,计算复杂度可以由
这种可分离滤波器是一个低秩近似,但在空间滤波器维度上执行。在CNN中,还可以通过利用跨通道冗余在通道维度上执行低秩分解来实现大幅提速。我们将在续集中探讨这两种低阶近似。
2.1 Approximating Convolutional Neural Network Filter Banks
卷积过程:输入类别为C,N个
![6b176e18ad10b0af96ec1ca628caa332.png](https://i-blog.csdnimg.cn/blog_migrate/b453d7d62147d5e6ec22af8f868ce660.jpeg)
Scheme 1.
单层卷积层如图1(b)所示。
一个单层卷积,有N个滤波器
总之,直接计算
第一项的近似
Scheme 2.
方案2旨在通过全面考虑3D滤波器来利用输入和输出冗余。这个想法很简单:每个卷积层都被分解为两个规则卷积层的序列,但是具有矩形(在空间域中)滤波器,如图1(c)所示。
![4af990b6293c286fc28eb0cf8d4053c2.png](https://i-blog.csdnimg.cn/blog_migrate/3d8b5ed1b5f1c2134c21c5e2bbbce190.png)
![e67e9067eff9a6240505925de595b684.png](https://i-blog.csdnimg.cn/blog_migrate/6896436f2f980d20641ac9797be6abe2.png)
总计算代价为
假设K,N和C阶数相同,则加速d倍!!!
在这两种方案中,我们都假定可以将满秩原始卷积核组分解为一组可分离的基础滤波器的线性组合。方案之间的差异在于他们如何对输入和输出通道之间的交互进行建模,这相当于对低秩通道空间近似进行建模的方式。在方案1中,是通过线性组合层 完成的,而在方案2中,通道交互是使用3D垂直和水平滤波器建模的,这样会在通道上产生求和,这也是卷积的一部分。
2.2 Optimization
详细介绍如何实现卷积层的最佳可分离基的表示。
第一种方法旨在通过最小化滤波器重建误差来直接冲减原始滤波器。
第二种方法旨在通过最小化卷积输出的重构误差来简介近似卷积层。
2.2.1 Filter Reconstructioni Optimization
我们能够获得可分离基础表示的第一种方法是,力求用我们的新表示最小化原始滤波器的重构误差。
方案1.可分离的基础可以简单地通过最小化原始滤波器的L2重构误差,并使用近似的滤波器Sm作为惩罚项。 这样得出公式:
![5ec09294a43f0c3b2fb56bfa3cc0e32c.png](https://i-blog.csdnimg.cn/blog_migrate/4804be7ea30d097c87b5afff5b0fa3c7.png)
函数双凸,在给定Sm的情况下,{an}的值可以唯一确定
左半部分为L2重建误差,右半部分核范数||Sm||*
方案2.
![de861e42b291f7041ed29220c7c162e4.png](https://i-blog.csdnimg.cn/blog_migrate/813799b3af2fa87423137c36db21ec01.png)
通过用两个变量对可分性进行建模来避免核范数约束,这种优化更简单。
在优化水平和垂直滤波器组之间交替执行共轭梯度下降,得到最优解。
2.2.2 Data Reconstruction Optimization
直接对权值参数进行估计得到的最佳结果的结果不一定会是预测结果最好的。
作为替代方案,可以通过在给定训练数据的情况下重建原始卷积层的输出来对filter进行估计优化。
![1c7a32deb1e04af13d5d05a566f36367.png](https://i-blog.csdnimg.cn/blog_migrate/a840e8ca8f883a5a5c61fe6133a7e416.png)
L是卷积层的层数,
通过原始卷积层的输出和优化后的输出的L2误差来反向传播训练近似层。然后一层一层的向下进行。
![dfc5e3c6b28621a87e6b13977daba8f8.png](https://i-blog.csdnimg.cn/blog_migrate/d2bd34d6cd167b0186bbcbd54468872b.png)
两个优点:
1.和输入数据相关,原始滤波器中和数据相关性较小的维度将会被忽略。
2.近似层的优化可以通过学习来一步一步叠加。例:当地一层被估计好了之后,接下来的输入数据将会走向估计层而不是原始层。这意味着可以将所有近似层与反向传播一起进行优化。
但是,这实际上并没有比L2数据重建优化带来更好的分类准确性-实际上,优化整个网络中的可分离基础filters会导致训练数据过度拟合,并尝试通过像dropout这样的正则化方法来最小化这种过度拟合会导致拟合不足,这很可能是由于我们已经在尝试对原始过滤器进行近似估算。 但是,这是需要更详细研究的领域。
3 实验和结果
1.使用预训练的CNN对场景文本执行不区分大小写的字符分类。给出基本模型细节以及加速优化的效果。
2.原始:四层CNN,输出层softmax进行分类,输入是24*24的灰度图像,输出为26个不区分大小写的字母和10个数字(共36类)
3.训练集样本数量为163222,测试集数量5379(在ICDAR2003的训练数据集中移除非字符和数字的样本)CNN的训练使用SGD完成, 除了第一层卷积层之外,其余所有层dropout=0.5防止过拟合,并且在训练过程中自适应地降低学习率。
4.在第二和第三层卷积层应用之前提到的优化方法。(第四层核为1*1,第一层会对输入造成影响)网络加速效果显着,因为Conv2和Conv3占整个网络处理时间的90%,如表所示。
![2b7e5b166ef9ea8d04ed97a760977223.png](https://i-blog.csdnimg.cn/blog_migrate/11238b49d602ceac8097b7842ae85b8c.jpeg)
![00a8ebb6348fd1397b451d378ac87fa1.png](https://i-blog.csdnimg.cn/blog_migrate/d159e50ee5fc2d00cc50f9561c2ef288.jpeg)
上图显示出了具有测试数据的每个近似层的输出重构误差。 显然,在理论上和实践上,随着所达到的加速比的提高,重构误差都会加剧。 由于重建误差是通过近似层馈送的测试数据特征的误差,因此与滤波器重建相比,数据重建优化方案在相同的加速下给出了更低的误差。 即使完全随机的高斯噪声数据通过近似的层馈送,通常也是如此-来自完全不同的分布的数据与经过训练的数据优化方案完全不同的分布。
Full Net Performance.
下图(b)(c)显示了在不同的优化策略下,随着端到端网络速度的提高,准确性总体下降。
![b6bdf0c674d21c8acc17a934b0486781.png](https://i-blog.csdnimg.cn/blog_migrate/f93e6ccfa0ce2d3954b45b10a18718fb.jpeg)
通常,Conv2和Conv3的联合数据优化可在给定的加速条件下提高最终分类性能。
在方案2下,我们可以实现2.5倍的加速,而不会降低精度,并且4.5倍加速,分类精度仅下降1%,90.3%的精度。
利用31个水平filters和随后的128个垂直filters 近似原始的128个Conv2 filters,并且利用26个水平filters和随后的512个垂直filters近似原始的512个Conv3filters来获得4.5倍的加速效果。
这种加速对于滑动窗口方案非常有用,它可以快速生成例如下图所示的字符检测图之类的检测图。即使以3.5倍的加速比,并且将其合并到屏幕中时,差异也很小。在完整的应用程序中,可以调整提速以提供可接受的最终结果。
![7b5d4c3b315a7fbfde5c4ea7d12e8c8d.png](https://i-blog.csdnimg.cn/blog_migrate/df569fbc607852c4ae2eb92cf6dec6ea.jpeg)
相比基于FFT的CNN,我们的方法实际上可以提供更大的加速。使用相同的层设置(5×5 kernel,16×16×256输入,384个filters),方案2使用256个基本filters给出了2.4倍的实际加速(应该不会导致性能下降)。如果使用数据优化,则应进一步提高此准确性。
总结
在本文中,我们证明了CNN卷积层中表示的冗余可以通过将学习的满秩滤波器组近似为秩1滤波器基础的组合。我们提出了两种方案来实现此目的,并提供了两种用于获得近似值的优化技术。由此产生的近似值所需的运算量大大减少,从而导致使用训练有场景文字字符识别功能的真实CNN观察到的大幅加速:加速4.5倍,分类准确率仅下降1%。
在以后的工作中,尝试以分层方式布置可分离滤波器的其他布置(例如,水平基础层,然后是垂直基础层,然后是线性组合层。从图4(a)中两种方案的滤波器重构来看,很明显,两种提出的方案的行为都非常不同,因此可以探索不同近似结构之间的联系。此外,应该进一步研究在训练过程中是否可以有效利用这些模型近似值,并以判别方式学习低秩滤波器层。
参考:
https://blog.csdn.net/weixin_41977410/article/details/83302989