超越YOLOv4-tiny!YOLObile:移动设备上的实时目标检测

_AI视线算法


点击关注上方AI深度视线”,并“星标”公号
数组

技术硬文,第一时间送达!微信


YOLObile:经过压缩编译协同设计在移动设备上进行实时目标检测,在三星S20上速度可达17FPS!比YOLOv4快5倍!同时mAP和FPS均优于YOLOv4-tiny!
网络

paper:
并发

https://arxiv.org/abs/2009.05697
框架

做者单位:东北大学, 威廉与玛丽学院, 匹兹堡大学
less





1编辑器


摘要性能




目标检测技术的快速发展和普遍应用引发了对目标检测器的准确性和速度的关注。可是,当前的最新目标检测工做要么使用大型模型以准确性为导向,但致使高延迟,或者使用轻量级模型以速度为导向,但牺牲准确性。
学习

在这项工做中,咱们提出了YOLObile框架,该框架是经过压缩编译协同设计在移动设备上进行实时目标检测的。针对任何内核大小,提出了一种新颖的block-punched剪枝方案。为了提升移动设备上的计算效率,采用了GPU-CPU协做方案以及高级的编译器辅助优化。

实验结果代表,咱们的剪枝方案以49.0 mAP达到YOLOv4压缩率的14倍。在咱们的YOLObile框架下,咱们在Samsung Galaxy S20上使用GPU实现了17 FPS推理速度。经过合并咱们提出的GPU-CPU协做方案,推理速度提升到19.1 FPS,而且比原始YOLOv4高出5倍。


2


本文思路


2.1 DNN Model Pruning

  • 非结构化剪枝:

非结构化修剪容许对权值矩阵中任意位置的权值进行修剪,保证了搜索优化修剪结构的更高灵活性,如图1(a)所示。所以,一般压缩率高,精度损失小。可是,非结构化的剪枝会致使权值矩阵的不规则稀疏性,在计算过程当中须要额外的索引来定位非零权值。这使得底层系统(例如,移动平台上的gpu)提供的硬件并行性得不到充分利用。所以,非结构化修剪不适用于DNN推理加速,甚至能够观察到速度的降低。


  • 结构化剪枝

结构化剪枝对DNN权重的整个通道/过滤器进行剪枝。如图1 (b)所示,过滤器修剪删除了权值矩阵的整行,其中通道修剪删除了权值矩阵中对应通道的连续列。结构化修剪保持了降维权值矩阵的规则形状。所以,它是硬件友好的,能够利用硬件并行性来加速。然而,因为结构化剪枝的粗粒度特征,其准确性会受到很大的影响。


  • 基于模式的剪枝

基于模式的剪枝被认为是一种细粒度结构的剪枝方案。因为其适当的结构灵活性和结构规律性,同时保持了精度和硬件性能。基于模式的剪枝包括核模式剪枝和连通性剪枝两部分。核模式修剪在每一个卷积核中删除固定数量的权值,如图2所示。

2.2 Motivation

如上所述,最早进的目标检测工做要么是精度导向使用大模型大小或速度导向使用轻量级模型但牺牲精度。所以,它们都很难同时知足实际应用在移动设备上的准确性和延时要求。
所以,咱们须要一种在移动设备上既能实现高精度又能实现低延迟的解决方案。
而基于模式的修剪彷佛是一个理想的选择,由于它在执行效率和准确性之间取得了平衡。但它只适用于3×3的CONV层,不利于目标检测任务的有效性。图3给出了3×3卷积层与非3×3层的对比。咱们选择了4种有表明性的目标检测方法,并比较了它们的权重和计算方法的百分比。例如,在YOLOv4中,一个表明最早进的目标检测网络,至关多的权重和计算量(分别为17%和19%)是由非3×3 CONV层贡献的。

编译器辅助的DNN推理加速是移动设备上低延迟DNN推理的另外一个有吸引力的选择。实验证实,借助编译器优化,能够实现图像分类任务的低延迟DNN推理。然而,这样的加速仍然不足以知足目标检测任务所需的低延迟,由于它有大量的权重,须要更复杂的计算。为此,咱们提出了两个关键的设计目标:
•目标1:咱们须要一个剪枝方案,能够:

        (i)同时实现高精度和利用底层硬件并行性

        (ii)普遍应用于不一样类型的层。
•目标2:咱们须要一种更高效的计算方法来进一步加快目标检测任务的DNN推理速度。


3


具体实现


3.1 Block-Punched Pruning

为了实现第3节中的第一个目标,咱们提出了一种新的剪枝方案——block-punched剪枝,它在保持高精度的同时实现了高硬件并行性。除了3×3 CONV层外,还能够映射到其余类型的DNN层,如1×1 CONV层和FC层。尤为适用于资源有限的移动设备上的高效DNN推理。如图4所示,将某一层的整个DNN权值划分为若干等大小的块,每一个块包含来自m个连续滤波器的n个连续信道的权值。在每一个块中,咱们在全部过滤器的相同位置上修剪一组权值,同时在全部通道的相同位置上修剪权值。换句话说,被修剪的权重将穿透一个块内全部过滤器和通道的相同位置。请注意,每一个块中通过修剪的权重的数量是灵活的,而且能够在不一样的块之间有所不一样。

从精度的角度来看,受基于模式的剪枝的启发,咱们在block-punched剪枝中采用了一种细粒度的结构化剪枝策略,以增长结构的灵活性,减小精度的损失。从硬件性能的角度来看,与粗粒度结构修剪相比,咱们的块打孔修剪方案经过利用适当的块大小和编译器级代码生成的帮助,可以实现高硬件并行性。缘由是一般DNN层中的权重数很是大。即便咱们将权重划分为块,每一个块所需的计算量仍然足以饱和硬件计算资源,并实现高度并行,特别是在资源有限的移动设备上。

此外,咱们的修剪方案能够从内存和计算两个角度更好地利用硬件并行性。首先,在卷积计算中,全部的滤波器在每一层共享相同的输入。因为在每一个块中的全部过滤器中删除了相同的位置,所以这些过滤器将跳过读取相同的输入数据,从而减轻处理这些过滤器的线程之间的内存压力。其次,限制在一个块内删除相同位置的通道,保证了全部这些通道共享相同的计算模式(索引),从而消除了处理每一个块内通道的线程之间的计算发散。
在咱们的block-punched剪枝,
块大小影响精度和硬件加速。一方面,更小的块大小提供了更高的结构灵活性,由于它的粒度更细,一般能够得到更高的精度,但代价是下降速度。另外一方面,更大的块大小能够更好地利用硬件并行性来实现更高的加速度,但也可能形成更严重的精度损失。
为了肯定适当的块大小,咱们首先经过考虑设备的计算资源来肯定每一个块中包含的通道数。例如,咱们为每一个块使用与智能手机上移动CPU/GPU中的向量寄存器长度相同的通道数来实现高并行性。若是每一个块中包含的信道数小于向量寄存器的长度,则向量寄存器和向量计算单元都将得不到充分利用。相反的,增长信道的数量并不会提升性能,反而会致使更严重的精度降低。所以,每一个块中包含的滤波器的数量应该相应地肯定,考虑到精度和硬件加速之间的权衡。

经过推理速度能够推导出硬件加速度,不须要对DNN模型进行再训练就能够获得硬件加速度,与模型精度相比更容易推导。所以,设定合理的最小推理速度要求做为须要知足的设计目标。在块大小知足推理速度目标的状况下,咱们选择在每一个块中保留最小的滤波器数量,以减小精度损失。


3.2 Reweighted Regularization Pruning Algorithm

在之前的权重修剪算法中,使用诸如组套索正则化或乘数交替方向方法(ADMM)被主要采用。可是,这会致使潜在的精度损失或须要手动压缩速率调整。

所以,咱们采用从新加权的方法。基本思想是系统地动态调整处罚。更具体地说,重加权方法减小了对较大量级的权重的惩罚(多是更关键的权重),并增长了对较小量级的权重的惩罚。
设W i∈R_M×N×K_h×K_w表示CNN的第i个CONV层的4-D权重张量,其中M是滤波器的数量;N是输入通道数;K_w和K_h是第i层的宽度和高度核心。通常的加权加权修剪问题表示为:

在咱们的分块修剪中,每一个W i分为K个块,所以,正则项为:

修剪过程始于预训练的DNN模型。经过使用从新加权的正则化修剪算法进行另外一个训练过程,能够得到具备咱们的block-punched约束的修剪模型。


3.3 Mobile Acceleration with a Mobile GPU-CPU Collaborative Scheme

在咱们的框架中,咱们结合了咱们的GPU-CPU协同计算方案来优化DNNs中的两种分支结构,即:

1)具备CONV层的分支结构

2)具备非CONV操做的分支结构。

这两种分支结构的示例如图5 (a)和(b)所示。咱们根据部署前的速度进行脱机设备选择。

咱们知道,GPU适合高并行性计算,好比卷积计算,在速度上明显优于CPU。所以,对于具备CONV层的分支结构,如YOLOv4中的Cross Stage Partial (CSP)块,如图5(a),选择GPU来计算最耗时的分支,剩下的问题是肯定其余分支是使用CPU并发计算仍是仍然使用GPU顺序计算。
在图5(a)中,咱们将分支1和分支2的GPU计算时间命名为t_g一、t_g2, CPU计算时间命名为t_c一、t_c2,数据复制时间命名为咱们在GPU中执行最耗时的分支1,而后对分支2进行决策。
当使用CPU进行并行计算时,咱们也能够须要添加数据复制时间。指望的GPU-CPU并行计算时间T_par取决于分支1和分支2的最大时间开销:

仅gpu串行计算时间T_ser为两个支路计算时间T_g1 + T_g2的总和:

以YOLOv4中最终输出的三个YOLO头结构为例,如图5(b)所示,在每一个分支中对最后一个CONV层的输出进行转置和从新排列后,咱们仍然须要进行屡次非CONV操做才能获得最终的输出。咱们测量每一个分支中非conv操做的GPU和CPU总执行时间,分别表示为t_g0, t_g1, t g2和t_c0, t_c1, t_c2。T_total表示全部三个分支的总计算时间。
对于这三个分支,如今咱们有8种可能的设备选择组合。例如,若是前两个分支使用CPU,第三个分支使用GPU,总的计算时间将是

请注意,最终输出早晚必须移至CPU,所以咱们不将数据复制时间计入总计算时间。结果,咱们选择总计算时间最少的组合做为所需的计算方案。综上所述,咱们提出的GPU-CPU协做方案能够有效提升硬件利用率并提升DNN推理速度。


3.4 Compiler-assisted Acceleration

YOLObile依靠几种先进的编译器辅助优化,这些优化由咱们新设计的块打孔修剪启用,以进一步提升推理性能。因为篇幅所限,咱们在这里简要总结一下。

首先,YOLObile经过利用修剪信息来紧凑地存储模型权重,与众所周知的“压缩稀疏行”格式相比,修剪信息能够进一步压缩索引数组。

其次,YOLObile对块进行从新排序以提升内存和计算规则性,并消除没必要要的内存访问。
此外,YOLObile采用高度并行的自动调整模型来查找最佳执行配置参数。

YOLObile为每一层生成CPU和GPU代码,并在实际推理过程当中根据咱们的GPU-CPU协做方案调用正确的代码。


4


代码实操


4.1 Ablation Study

4.2 Evaluation of YOLObile framework




潮水自会来去,但心志得坚若磐石。即使成不了那根定海神针,也至少不是那随意被拍上岸的野鬼游魂。 

长按关注 "AI深度视线"
最新人工智能、深度学习、SLAM干货奉上!








本文分享自微信公众号 - AI深度学习视线(AI_DeepSight)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索