点击蓝字关注我们 Spring comes
今天,“计算机视觉战队”给大家继续分享目标检测综述,今天主要说说目标检测算法的快速发展。
SPEED-UP OF DETECTION
加速目标检测一直是一个重要而又具有挑战性的问题。在过去的20年里,目标检测领域已经发展了复杂的加速技术。这些技术大致可以分为 “ 检测管道提速 ”、“ 检测引擎提速 ” 和 “ 数值计算提速 ” 三个层次,如下图所示。
Feature Map Shared Computation
在目标检测器的不同计算阶段中,特征提取通常占主导地位。对于基于滑动窗的检测器,计算冗余从位置和尺度两方面入手,其中位置冗余是由相邻窗口之间的重叠造成的,尺度冗余是通过相邻尺度间的特征关联造成的。
Spatial Computational Redundancy and Speed Up
减少空间计算冗余最常用的方法是特征图共享计算,即,在滑动窗口前只计算一次整个图像的特征图。传统检测器的 “ 图像金字塔 ” 可以看作是一个 “ 特征金字塔 ”。例如,为了加快HOG行人检测器的速度,研究者通常会将整个输入图像的 “ HOG map ” 进行累加,如下图13所示。
然而,这种方法的缺点也很明显,即, feature map 分辨率 ( 此 feature map 上滑动窗口的最小步长 ) 将受到单元格大小的限制。如果一个小对象位于两个单元格之间,那么所有检测窗口都可能忽略它。解决这个问题的一个方法是构建一个完整的特征金字塔,这将在后面有介绍。
特征图共享计算的思想在基于卷积的检测器中也得到了广泛的应用。一些相关的著作可以追溯到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) 神经结构搜索。
Factorizing Convolutions
分解卷积是构建轻量级CNN模型最简单、最直接的方法。有两类分解方法。
第一类方法是将一个大的卷积滤波器分解成一组空间维数较小的卷积滤波器,如上图(b)所示。例如,可以将一个7x7过滤器分解为三个3x3过滤器,它们共享相同的接收域,但是后者效率更高。另一个例子是将 k×k 滤波器分解为k×1滤波器和1×k滤波器,这对于非常大的滤波器来说可能更有效,比如15x15。该思想最近被用于目标检测。
第二类方法是将一大组卷积分解为信道维数较小的两组,如上图(c)所示。例如,可以用 d个滤波器近似卷积层,用d'个滤波器 + 一个非线性激活 + 另外d个滤波器 (d'<d)近似有c个通道的特征图。在这种情况下,原始层的复杂度O(dk^2c)可以降低到 。
Group Convolution
群卷积的目的是通过将特征信道划分为多个不同的组,然后分别对每个组进行卷积,从而减少卷积层中参数的数量,如上图(d)所示。如果我们将特征信道平均分成m组,不改变其他构型,理论上卷积的计算复杂度将会降低到原来的1/m 。
Depth-wise Separable Convolution
上图(e)所示的深度可分离卷积是近年来流行的一种构建轻量级卷积网络的方法。当组数等于信道数时,它可以看作是群卷积的一个特例。
假设我们有一个带有d个滤波器的卷积层,和一个 c 通道的特征图。每个滤波器的大小为 k×k 。对于深度可分卷积,每个 k×k×c 滤波器首先被分割成 c 个片,每个片的大小为 k×k×1 ,然后在每个通道中对滤波器的每个片分别进行卷积。最后,一些 1x1 滤波器用于进行维度转换,以便最终的输出应该具有 d 通道。利用深度可分卷积,将计算复杂度从O(dk^2c)降低到O(ck^2)+O(dc)。该思想最近被应用于目标检测和细粒度分类(fine-grain classification)。
Bottle-neck Design
与前一层相比,神经网络中的瓶颈层只包含很少的节点。它可以用来学习降维输入的高效数据编码,这在深度自编码中得到了广泛的应用。近年来,瓶颈设计被广泛应用于轻量化网络的设计。在这些方法中,一种常见的方法是压缩检测器的输入层,以减少从检测管道开始的计算量。另一种方法是压缩检测引擎的输出,使feature map变薄,使其在后续检测阶段更加高效。
Neural Architecture Search
近年来,人们对利用神经结构搜索 ( NAS ) 自动设计网络体系结构而不是依赖于专家经验和知识产生了浓厚的兴趣。NAS 已应用于大规模图像分类,目标检测和图像分割任务。NAS 最近在设计轻量级网络方面也显示出了很好的结果,其中在搜索过程中考虑了预测精度和计算复杂度的限制。
Numerical Acceleration
在这一节中,我们主要介绍了四种重要的数值加速方法,它们在目标检测中经常使用:1) 积分图像加速,2) 频域加速,3) 矢量量化,4) 降阶近似。
Speed Up with Integral Image
积分图像是图像处理中的一种重要方法。它有助于快速计算图像子区域的和。积分图像的本质是信号处理中卷积的积分微分可分性:
其中,如果dg(x)/dx是一个稀疏信号,那么卷积可以被方程右边的部分加速。虽然 VJ 检测器以积分图像加速著称,但在它诞生之前,积分图像已经被用来加速 CNN 模型,并达到了10倍以上的加速度。
除了上面的例子,积分图像还可以用来加速目标检测中更一般的特征,例如颜色直方图,梯度直方图等。一个典型的例子就是通过计算积分HOG映射加速HOG。积分HOG映射不是在传统的积分图像中积累像素值,而是在图像中积累梯度方向,如下图所示。由于cell的直方图可以看作是某一区域梯度向量的和,利用积分图像可以计算任意位置和大小的矩形区域的直方图,计算开销是恒定的。积分HOG映射已被应用于行人检测中,并在不损失任何精度的前提下实现了数十倍的加速度。
2009年晚些时候,P. Dollar’等人提出了一种新的图像特征,称为积分通道特征 ( ICF ),可以认为是积分图像特征的一种更为普遍的情况,并已成功应用于行人检测。ICF 在其所处的时间内,以接近实时的检测速度实现了最先进的检测精度。
Speed Up in Frequency Domain
卷积是目标检测中的一种重要的数值运算形式。由于线性检测器的检测可以看作是特征图与检测器权值之间的窗口内积,因此该过程可以通过卷积来实现。
卷积可以在很多方面得到加速,傅里叶变换是一个非常实用的选择尤其是对于加速那些大的滤波器。频域加速卷积的理论基础是信号处理中的卷积定理,即在合适的条件下,两个信号卷积的傅里叶变换是其傅里叶空间的点乘:
其中,F是傅里叶变换,F-1是傅里叶反变换,I和W是输入图像和滤波器,是卷积运算,是点乘运算。利用快速傅里叶变换 ( Fast Fourier Transform,FFT )和快速傅里叶反变换 ( Inverse Fast Fourier Transform,IFFT )可以加速上述计算。FFT 和 IFFT 现在经常被用来加速 CNN 模型和一些经典的线性目标检测器,这使得检测速度提高了一个数量级。下图为在频域中加速线性目标检测器的标准管道 ( 如 HOG 和 DPM )。
Vector Quantization
矢量量化 ( VQ ) 是信号处理中的一种经典的量化方法,其目的是通过一组小的原型矢量来近似一组大数据的分布。它可用于数据压缩和加速目标检测中的内积运算。例如,使用VQ,可以将HOG直方图分组并量化为一组原型直方图向量。然后在检测阶段,通过查表操作实现特征向量与检测权值之间的内积。由于该过程中没有浮点乘法和除法,因此DPM和例化SVM检测器(exemplar SVM detector)的速度可以提高一个数量级。
Reduced Rank Approximation
在深度网络中,全连接层的计算本质上是两个矩阵的乘法。当参数矩阵W较大时,检测器的计算量较大。例如,在Fast RCNN检测器中,将近一半的前向传递时间用于计算全连接层。降秩近似是一种加速矩阵乘法的方法。它的目的是对矩阵W进行低秩分解:
其中,U是由W的第一个t左奇异向量构成的u x t矩阵,∑t是一个包含W前t个奇异值的t x t对角矩阵,V是由W的第一个t右奇异向量构成的v x t矩阵。上述过程也称为截断 SVD(Truncated SVD),将参数uv从减少到t x (u+v),当t远小于min(u,v)时效果显著。截断 SVD 被用来加速 Fast RCNN 检测器,达到 x2 的速度。
感谢
Zhengxia Zou等人的无私贡献,本系列综述引用于《Object Detection in 20 Years: A Survey》,有兴趣的同学可以下载慢慢品!通知
计算机视觉战队正在组建深度学习技术群,欢迎大家私信申请加入!
如果想加入我们“计算机视觉战队”,请扫二维码加入学习群。计算机视觉战队主要涉及机器学习、深度学习等领域,由来自于各校的硕博研究生组成的团队,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。
我们开创一段时间的“计算机视觉协会”知识星球,也得到很多同学的认可,我们定时会推送实践型内容与大家分享,在星球里的同学可以随时提问,随时提需求,我们都会及时给予回复及给出对应的答复。