特征图共享计算的思想在基于卷积的检测器中也得到了广泛的应用。一些相关的著作可以追溯到20世纪90年代。近年来大多数基于CNN的检测器,例如,SPPNet、Fast-RCNN和Faster-RCNN都采用了类似的思想,实现了数十倍甚至数百倍的加速度。
Scale Computational Redundancy and Speed Up
为了减少尺度计算冗余,最成功的方法是直接缩放特征而不是图像,这种方法首次应用于VJ检测器。然而,由于模糊效果,这种方法不能直接应用于类似于HOG的特性。对于这个问题,P. Dollar’等人通过广泛的统计分析发现HOG相邻尺度与积分通道特征之间存在很强的 ( log-linear ) 相关性。这种相关性可以通过近似相邻尺度的特征图来加速特征金字塔的计算。此外,构建 “ 检测器金字塔 ” 是避免尺度计算冗余的另一种方法,即,通过简单地在一个feature map上滑动多个检测器来检测不同尺度的对象,而不是重新缩放图像或feature。
Speed up of Classifiers
传统的基于滑动窗口的检测器,如HOG检测器和 DPM,由于计算复杂度较低,更喜欢使用线性分类器而不是非线性分类器。核SVM等非线性分类器的检测精度较高,但同时也带来较高的计算开销。作为一种标准的非参数方法,传统的核函数法没有固定的计算复杂度。当我们有一个非常大的训练集时,检测速度会变得非常慢。
在目标检测中,有很多方法可以加快核分类器的速度,其中最常用的是“ 模型近似 ”。由于经典 核SVM 的决策边界只能由一小组训练样本 ( 支持向量 ) 确定,因此推理阶段的计算复杂度与支持向量的个数成正比:O(Nsv)。约简集向量是核SVM 的一种近似方法,其目的是用少量的合成向量来获得一个等价的决策边界。另一种提高 核SVM 在目标检测中的速度的方法是将其决策边界近似为分段线性形式,从而获得一个恒定的推理时间。核方法也可以通过稀疏编码方法来加速。
Cascaded Detection
级联检测是一种常用的目标检测技术。它需要一个粗到精的检测理念:使用简单的计算过滤掉大部分简单的背景窗口,然后用复杂的窗口处理那些更困难的窗口。VJ检测器是级联检测的代表。在此之后,许多后续的经典对象检测器,如HOG检测器和DPM,都使用了这种技术来加速。
近年来,级联检测也被应用到基于深度学习的检测器中,特别是针对 “ 大场景中的小对象 ” 的检测任务,如人脸检测、行人检测等。除了算法加速外,级联检测还被应用于解决其他问题,如提高对困难样本的检测,整合上下文信息,提高定位精度。
Network Pruning and Quantification
“ 网络修剪 ” 和 “ 网络量化 ” 是加速CNN模型的两种常用技术,前者是指对网络结构或权值进行修剪以减小其大小,后者是指减少激活值或权值的码长。
Network Pruning
“ 网络修剪 ” 的研究最早可以追溯到20世纪80年代。当时,Y. LeCun等人提出了一种称为 “ 最优脑损伤(optimal brain damage) ” 的方法来压缩多层感知器网络的参数。该方法利用二阶导数逼近网络的损失函数,从而去除一些不重要的权重。基于这一思想,近年来的网络修剪方法通常采用迭代的训练和修剪过程,即,在每个训练阶段后只移除一小部分不重要的权重,并重复这些操作。传统的网络剪枝只是简单地去除不重要的权值,这可能导致卷积滤波器中存在一些稀疏连接模式,不能直接应用于CNN模型的压缩。解决这个问题的一个简单方法是删除整个过滤器而不是独立的权重。
Network Quantification
近年来网络量化的研究主要集中在网络二值化方面,其目的是通过量化网络的激活值或权值为二进制变量,来加速网络的速度
(例如,0/1),以便浮点运算转换为AND,OR,NOT 逻辑运算。网络二值化可以显著加快计算速度,并减少网络的存储,从而更容易部署到移动设备上。上述思想的一种可能实现是用最小二乘法通过二进制变量近似卷积。使用多个二进制卷积的线性组合可以得到更精确的近似。此外,一些研究人员进一步开发了GPU加速库进行二值化计算,获得了更显著的加速结果。
Network Distillation
网络蒸馏是将大型网络 ( “ 教师网 ” ) 的知识压缩成小型网络 ( “ 学生网 ” ) 的一般框架。最近,这一思想被用于加速目标检测。该思想的一种直接方法是使用教师网来指导 ( 轻量级 ) 学生网的训练,以便后者可用于加速检测。另一种方法是对候选区域进行变换,使学生网络和教师网络的特征距离最小化。该方法使检测模型的速度提高了2倍,同时达到了相当的精度。
Lightweight Network Design
最后一组加速基于 CNN 的检测器的方法是直接设计一个轻量级的网络,而不是使用现成的检测引擎。研究人员长期以来一直在探索网络的正确配置,以便在有限的时间成本下获得准确性。除了一些通用的设计原则如 “ 更少的通道,更多的层(fewer channels and more layers) ”,近年来也提出了一些其他的方法:
1) 分解卷积,2) 群卷积,3) 深度可分离卷积,4) 瓶颈设计,5) 神经结构搜索
。