对这篇论文感兴趣的小伙伴可以订阅笔者《目标检测》专栏,关注笔者对该文献的阅读和理解。
前两篇解读链接:
目录
四、 检测器的加速发展
让检测器变得更快一直是一项具有挑战性的工作。加速技术可以分为“检测流水线”加速、“检测骨干(backbone)”加速和“数值计算”加速三个层次,如下图所示:
加速技术从下至上形成金字塔结构:数值计算包括积分图像、快速傅里叶变换(Fast Fourier Transform)、矢量量化和约阶近似。检测引擎/骨干的加速包括网络修剪和量化以及轻量化网络设计。最后,流水线加速包括特征映射共享计算和级联检测。
下面对这些技术分别进行介绍:
4.1 特征映射共享计算
检测器不同计算阶段中,特征提取占据计算量的主导地位。减少特征计算冗余最常用的方法就是只计算一次整幅图像的特征映射,该方法已实现数十倍甚至百倍的加速。
4.2 级联检测
级联检测是一种常用技术,采用从“粗”到“精”的检测理念,使用简单计算过滤简单的背景窗口,用复杂窗口处理困难窗口。该方法适用于大场景小物体检测任务,如人脸、行人的检测。
4.3 网络修剪和量化
“网络修剪”和“网络量化”是两种加速CNN模型的方法。前者修剪网络结构或权值,后者减少代码长度。最初网络修剪采用迭代训练和修剪,每个训练阶段后只去除一小组不重要的权值并重复该操作。目前的工作集中于网络二值化,通过激活或权重量化为二进制(0/1)压缩网络,将浮点运算转为逻辑运算。
标准的卷积如下图所示:
4.4 轻量化网络设计
除了有“少通道多层”的方法外,近年来也提出了许多其他方法。
4.4.1 分解卷积
这是轻量级CNN最直接的方法。一般有两组分解方法:第一组是将大的卷积滤波器分解成一组小的,如下图所示:
我们可以将一个7×7的滤波器分解成三个3×3的滤波器,并且它们享受相同的感受野,后者的效率却更高。第二组则是对通道维度的卷积进行因式分解,如下图所示:
4.4.2 组卷积
组卷积就是将特征通道分成不同组,在每个组上进行卷积,从而减少卷积层中参数数量。如下图所示:
理论上,其他条件相同情况下,将特征均匀分成m组,计算量将减少1/m。
4.4.3 深度可分离卷积
深度可分离卷积可以看作是组卷积的一种特殊情况(即组的个数和通道数相同)。使用多个1×1滤波器进行维度转换以得到具有所需通道数量的输出。通过深度可分离卷积,计算量可以从O()减少到
。该思想可以应用于目标检测和细粒度分类。如下图所示:
4.4.4 瓶颈设计
与前几层相比,神经网络瓶颈层包含节点较少。瓶颈的设计通常被用来设计轻量级网络。可以对输入层网络进行压缩,减少检测开始的计算量。也可以压缩特征图,加快后续检测。
4.4.5 NAS检测
基于深度学习的检测器越来越复杂,也严重依赖手工构建的网络架构和训练参数。神经结构搜索(Nerual Architecture Search,NAS)主要关注确定候选网络适当空间,改进快速准确搜索策略,以低成本验证搜索结果。在设计检测模型时,NAS可以减少人为干预网络骨干网和锚盒设计需求。
4.5 数值加速
数值加速旨在加速目标检测器底层实现过程。
4.5.1 积分图像加速
积分图像是图像处理的一种方法,其有助于快速图像子区域的和。本质就是信号处理中卷积的积分-微分可分性。
其中dg(x)/dx是稀疏信号,之后卷积部分就能通过方程右边部分进行加速。
积分图像也可以用于加速更多的目标检测常见特征,如颜色直方图、梯度直方图。很典型的是通过计算积分HOG映射加速HOG,如下图所示:
积分HOG地图用于行人检测,并在不损失精度条件下加速数十倍。
4.5.2 频域加速
卷积是一种重要的运算,由于线性检测器检测可以看作是特征映射和检测器权重之间的窗口内积,通过卷积实现。傅里叶变换是一种加速卷积的方法。在适当条件下,两个信号I*W的卷积傅里叶变换F是他们傅里叶空间中的点积:
F是傅里叶变换,F-1是傅里叶反变换。上述公式可以通过快速傅里叶变换和快速傅里叶反变换实现加速。
4.5.3 矢量量化
VQ(vector quantization)是信号处理的常用量化方法。通过一组小的原型向量近似一组大数据分布。可以用于数据压缩和加速目标检测内积运算。