ShuffleNet
ShuffleNet Module
2017年,Zhang等人提出了ShuffleNet,这是一种计算高效的神经网络架构,专门设计用于移动设备。他们认识到许多高效的网络在继续变小时会变得不那么有效,并且将其归因于昂贵的1x1卷积操作。与通道混洗操作配合使用,他们提出了使用组卷积来避免信息流量有限的缺点。ShuffleNet主要由标准卷积和由三个阶段分组的ShuffleNet单元堆叠组成。ShuffleNet单元类似于ResNet块,在3x3层中使用深度卷积,并用点组卷积替换1x1层,深度卷积层前面有一个通道洗牌操作。ShuffleNet的计算成本可以通过两个超参数管理:组数量来控制连接稀疏度,缩放因子来操纵模型大小。当组数变大时,误差率会达到饱和,因为每组的输入通道数减少,因此可能会降低表示能力。ShuffleNet在拥有相当小的尺寸的同时精度优于当前的模型。由于ShuffleNet唯一的改进是通道混洗,因此模型的推理速度没有提高。
MobileNetv2
MobileNetv2 Module
在2018年,Sandler等人在MobileNetv1 的基础上提出了MobileNetv2。它引入了带有线性瓶颈的倒置残差,这是一种新型的层模块,旨在减少计算量并提高准确度。该模块将输入的低维表示扩展到高维,并用深度卷积进行滤波编码,然后将其投影回低维,不同于常见的残差块,它的执行顺序是压缩、卷积再扩展。MobileNetv2包含一个卷积层、19个残差瓶颈模块,以及网络最后的两个卷积层。当步幅为1时,残差瓶颈模块才附带残差连接,对于步幅较大的情况,由于维度不同,不使用残差连接。他们还使用ReLU6作为非线性函数,而不是简单的ReLU,以进一步减少计算量。对于目标检测性能评测,作者使用MobileNetv2作为SSD 的特征提取器,并取名为SSDLite。该模型声称比原始SSD的参数少8倍,同时实现了具有竞争力的准确性。MobileNetv2在其他数据集上推广得很好,易于实现,因此受到了社区的欢迎。
PeleeNet
Residual prediction block
由于像MobileNet 和 ShuffleNet 这样的轻量级深度学习模型严重依赖深度可分离卷积,Wang等人提出了一种基于常规卷积的新型高效架构,称为PeleeNet,其使用了各种节省计算量的技术。PeleeNet围绕DenseNet展开,但也从许多其他模型中获得了灵感。它引入了双向密集层、根块、瓶颈中的动态通道数、转换层压缩以及常规的激活函数,以减少计算成本和提高速度。双向密集层有助于获得感受野的不同尺度,使更易于识别更大的目标。为了减少信息损失,他们也使用了根块。此外,他们还放弃使用的压缩因子,因为这会损害特征表达并降低准确度。PeleeNet由根块、四个双向密集层、转换层以及最终的分类层组成。作者基于PeleeNet和SSD 提出了一个实时目标检测算法,称为Pelee。它在移动和边缘设备上的性能更由于当时的轻量级目标检测算法,这表明了简单的设计选择对整体性能有着巨大影响。
ShuffleNetv2
ShuffleNetv2 Module
2018年,Ningning Ma等人在ShuffleNetv2 中提出了一套用于设计高效网络架构的综合指南。他们主张使用更为直接的指标(如速度或延迟)来衡量计算复杂度,而不是间接指标(如FLOP)。ShuffleNetv2建立在四项指导原则之上:1)输入和输出通道的宽度相等,以最小化内存访问成本;2)根据目标平台和任务仔细选择组卷积;3)多路径结构在代价效率的前提下实现更高的精度;4)元素操作(如add和ReLU)在计算上是不可忽略的。遵循上述原则,他们设计了一个新颖的模块。它通过通道拆分层将输入分成两部分,然后是三个卷积层,之后再与残差连接并通过通道混洗层。对于下采样模型,删除通道拆分,并在残差连接上添加深度可分离卷积层。在两个卷积层之间插入这些块的集合就形成了ShuffleNetv2。作者还对较大的模型(50/162层)进行了实验,并获得了更优的精度和更少的FLOP。ShuffleNetv2在相当复杂度的情况下超越了其他最先进的模型。
MnasNet
Factorized Hierarchical Search Space
随着各种边缘设备对精确,速度和低延迟模型的需求日益增加,设计这种神经网络变得比以往任何时候都更具挑战性。2018年,Tan等人提出了Mnasnet,该模型由神经网络架构搜索(NAS)方法设计。他们将搜索问题表示为旨在同时获得高精度和低延迟的多目标优化问题。它还通过将CNN划分为独特的块并将这些块内的操作和连接分开搜索来因式分解搜索空间,从而达到减小了搜索空间的目的,这也使得每个块具有独特的设计,而不像早期的模型,它们堆叠了相同的块。作者使用基于RNN的强化学习代理做为控制器,并使用训练器来测量精度,使用移动设备测量延迟。将每个采样的模型训练在任务上以获得其精度,并在真实设备上运行以获得延迟。这用于获得软奖励目标,并更新控制器。重复该过程直到达到最大迭代次数或找到合适的候选者。MnasNet的速度几乎比MobileNetv2快两倍,同时具有更高的精度。然而,与其他基于强化学习的神经架构搜索模型一样,MnasNet的搜索时间需要天文数字级别的计算资源。
MobileNetv3
MobileNetv3 Module
MobileNet v3 是一种高效的神经网络架构,专门用于边缘设备。它是使用MnasNet 相同方法创建的,但其中有一些修改。通过在分解层次搜索空间中执行自动神经架构搜索并通过NetAdapt 进行优化,后者在多次迭代中删除网络中未使用的组件。一旦获得了子网架构,就会修剪通道与随机初始化权值,然后微调它以提高目标指标。该模型进一步修改以删除架构中一些昂贵的层,并获得额外的延迟改进。Howard等人认为,架构中的滤波器通常是彼此的镜像,即使删除其中的一半滤波器,准确性也可以保持不变。MobileNet v3结合ReLU和hard swish作为激活函数,后者主要用于模型末尾层。Hard swish与swish函数没有明显差异,但MobileNet v3还为不同的资源使用情况提供了两种模型 - MobileNet v3-Large和MobileNet v3-Small。MobileNet v3-Large由15个瓶颈块组成,而MobileNet v3-Small则有11个。它还在其building block上包含了挤压与激活层。这些模型在SSDLite中充当特征检测器,比之前的迭代快35%,同时达到更高的mAP。
Once-For-All (OFA)
OFA
神经网络架构搜索算法(NAS)在过去几年中构建了许多轻量级SOTA模型。然而,由于抽样模型训练策略,它们的计算成本非常高。Cai等人提出了一种将模型训练阶段与神经网络架构搜索阶段解耦的方法。模型只被训练一次,并且可以根据需要从中蒸馏出子网络。Once-For-All(OFA)网络在卷积神经网络的四个重要维度中为这样的子网络提供了灵活性,其中包括:深度、宽度、内核大小和维度。由于它们嵌套在OFA网络内并且与训练相冲突,因此它可以在训练过程中逐步缩小参数尺寸,从而减少计算量并提高精度。首先,使用最大的参数尺寸训练最大的网络。然后,通过逐渐减小内核大小、深度和宽度来微调网络。对于弹性内核,使用大内核的中心作为小内核。由于中心是共享的,所以使用内核变换矩阵来保持性能。为了改变深度,使用前几层,而跳过大网络的其余部分。弹性宽度采用通道排序操作来重新组织通道,并在较小的模型中使用最重要的通道。OFA在ImageNet top-1精度百分比方面取得了最先进的80%,并获得了第4届低功耗计算机视觉挑战(LPCVC)的冠军,同时在搜索时间上减少了许多数量级。它展示了一种为各种硬件需求设计轻量级模型的新范式。
GhostNet
Ghost Module
GhostNet 是一种新型的端侧神经网络架构,它来自华为诺亚方舟实验室发表在CVPR 2020的一篇工作。该架构可以在同样精度下,速度和计算量均少于当时的 SOTA 轻量级架构。该论文提供了一个全新的 Ghost 模块,旨在通过廉价操作生成更多的特征图。基于一组原始的特征图,作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的 Ghost 特征图。该Ghost模块即插即用,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。在ImageNet分类任务,GhostNet在相似计算量情况下Top-1正确率达75.7%,高于MobileNetV3的75.2%
作者通过对比分析ResNet-50网络第一个残差组(Residual group)输出的特征图可视化结果,发现一些特征图高度相似。如果按照传统的思考方式,可能认为这些相似的特征图存在冗余,是多余信息,会想办法避免产生这些高度相似的特征图。但本文思路清奇,推测CNN的强大特征提取能力和这些相似的特征图(Ghost对)正相关,不去刻意的避免产生这种 Ghost 对,而是尝试利用简单的线性操作来获得更多的 Ghost 对。
Ghost Module 的计算过程主要分为常规卷积、廉价操作和特征图拼接三步。首先,利用常规卷积对输入特征图进行特征提取并压缩通道。然后,对压缩通道数后的特征图进行廉价操作,作者在这里使用的是深度卷积操作。最后,将常规卷积和廉价操作的输出特征图进行拼接得到最终的结果。
G-GhostNet
传统卷积、G-Ghost模块和G-Ghost with mix模块
2022年初华为诺亚方舟实验室团队对GhostNet进行了扩展,提出了适用于服务器的G版GhostNet,即G-GhostNet。该团队将早期GhostNet称之为C-GhostNet,即适用于CPU/移动端的GhostNet。
尽管 C-GhostNet 能大幅减少FLOPs同时保持高性能,但它所用到的廉价操作对于GPU既不廉价也不够高效。具体来说,深度卷积具有低计算密度特性,无法充分利用 GPU 的并行计算能力。如何在精度和GPU延迟之间获得更好的平衡,仍然是一个被忽视的问题。除了 FLOPs 与参数量外,《Designing Networks Desing Space》一文引入"Activations"衡量网络复杂度,相比FLOPs,它与GPU延迟具有更高的相关性。另一方面,CNN的主体部分通常包含多个分辨率渐进式缩小的阶段,每个阶段由多个Blocks堆叠而成。作者旨在降低"stage-wise"冗余而非C版的"block-wise",极大的减少中间特征进而降低计算量与内存占用。
G-GhostNet 具体的计算过程如上图 G-Ghost with mix 模块所示,复杂特征经过连续的n个卷积块生成,Ghost特征则由第一个卷积块经过廉价操作所得。其中mix模块用于提升廉价操作表征能力,即先将复杂特征分支中第2至第n层的中间特征进行拼接,再使用变换函数,变换至与廉价操作的输出同域,最后再进行特征融合(如简单的逐元素相加)。
GhostNetV2
GhostNetV2 Module
2022年11月华为诺亚方舟实验室团队提出了 GhostNetV2,文章提出了原始 GhostNet 存在无法有效提取全局感受野的问题,通过对其加入轻量化注意力结构,有效解决了常规卷积只能编码局部信息的固有缺陷。GhostNetV2 仅用 167M FLOPs 就达到了75.3% 的 top-1准确率,这极大地超过了 原版 GhostNet (74.5%),并且两者的计算成本相近。
尽管 Ghost 模块可以大幅度地减少计算代价,但是其特征的表征能力也因为 "卷积操作只能建模一个窗口内的局部信息" 而被削弱了。在 GhostNet 中,一半的特征的空间信息被廉价操作 (3×3 Depth-wise Convolution) 所捕获,其余的特征只是由 1×1 的 Point-wise 卷积得到的,与其他像素没有任何信息上的交流。捕捉空间信息的能力很弱,这可能会妨碍性能的进一步提高。为了改善常规卷积固有的局部信息问题,作者引入了如今被广泛使用的注意力结构,并考虑到计算成本,将常规的全局特征加权改进为水平与垂直方向特征加权,设计出了一种新颖的轻量化注意力方式并融入到 GhostNet中,这使得 GhostNet 获得了长距离编码能力,极大地增强了网络的特征提取能力。
对比结果
Performance comparison of various object detectors on MS COCO and PASCAL VOC 2012 datasets at similar input image size.
Comparison of Lightweight models in 2020
Performance of Object Detectors on MS COCO dataset
Comparison of one-stage models
Comparison of Lightweight models in 2022
未来趋势
在过去的十年中,目标检测技术取得了巨大的进步。在某些领域中,该算法几乎达到了人类的水平。然而,它仍然面临着许多令人兴奋的挑战。在本节中,我们讨论了目标检测领域中的一些未解决问题。
AutoML
AutoML是一个正在快速发展的领域,它使用神经网络架构搜索(NAS)来自适应数据集构建目标检测算法。在前面的章节中,我们已经展示了一些由NAS设计的检测算法,但它仍处于起步阶段。对算法进行搜索是一项复杂且需要巨大计算资源的任务。
轻量级检测算法
尽管轻量级网络在与常规网络在分类任务上的误差几乎没有差异,但它们在检测精度方面仍然有较大的差距。随着越来越多的边缘端的机器学习应用程序推向市场,小型,高效且高精确模型的需求将会增长。
Weakly supervised/few shot detection
大多数最先进的目标检测模型都是在数百万个带有标注的数据上训练,这需要巨大的时间和人力成本。能够在弱监督数据(即图像级标记数据)上训练可能会大大降低这些成本。
Domain transfer
Domain transfer 是指首先在特定源任务的带标签图像上训练的模型,然后在单独但相关的目标任务上使用。它鼓励重复使用训练模型,并减少对大型数据集的依赖。
3D目标检测
3D目标检测是自动驾驶中一个特别关键的问题。尽管模型已经取得了很高的准确度,但如果在人类水平性能以下部署任何东西都会引发安全问题。
视频目标检测
目标检测算法旨在在不相关的单个图像上进行推理预测。使用帧之间的空间和时间关系进行目标检测是一个悬而未决的问题。
总结
尽管过去十年目标检测算法取得了很大进展,但最好的检测算法在性能方面仍然远未饱和。随着它在现实世界中的应用范围的扩大,能够部署在移动和嵌入式系统上的轻量级模型的需求将呈指数级增长。这个领域的关注量日益增长,但仍然存在很多挑战。在本文中,我们展示了双阶段和单阶段检测算法是如何逐步改进,在精度和速度指标上击败过去的算法。虽然双阶段检测算法通常会更加准确,但它们的推理速度较慢,不能用于自动驾驶汽车或安全系统等实时应用。但是,在过去的几年中,单阶段检测算法的准确度与前者相当,速度也快得多。 正如性能对比结果图所示,DAMO-YOLO 是迄今为止最准确的检测器。由于检测算法准确度呈现出积极的趋势,我们对更准确和更快的检测算法有很大希望。