计算机系统应用教程网站

网站首页 > 技术文章 正文

手机实时人工智能之「三维动作识别」:每帧只需9ms

btikc 2024-11-13 09:41:36 技术文章 6 ℃ 0 评论

机器之心专栏

作者:Wei Niu、Mengshu Sun等

来自美国东北大学(Northeastern University)的王言治研究组、威廉与玛丽学院(William & Mary)的任彬研究组以及北卡罗来纳州立大学(North Carolina State University)的慎熙鹏研究组提出了一种用于三维卷积神经网络(3D CNN)的模型压缩和移动加速框架 RT3D。

本文提出了一种用于三维卷积神经网络(3D CNN)的模型压缩和移动加速框架 RT3D,通过结合神经网络权重剪枝和编译器代码优化技术,使模型的端到端运行时间与目前支持 3D CNN 的移动框架相比速度提升高达 29.1 倍,准确性损失仅为 1%~1.5%。当在手机上采用 C3D 或 R(2+1)D 模型时,可以在 150ms 内完成 16 帧视频的计算。该工作由 CoCoPIE 团队:美国东北大学(Northeastern University)的王言治研究组、威廉与玛丽学院(William & Mary)的任彬研究组以及北卡罗来纳州立大学(North Carolina State University)的慎熙鹏研究组共同完成,发表于第 35 届美国人工智能协会年会(AAAI 2021)。

Model 与 codes 链接:https://github.com/CoCoPIE-Pruning/CoCoPIE-ModelZoo

现在大量移动设备配备了强大的高端移动 CPU 和 GPU,因此成为深度学习任务的重要载体。如图 1 所示,最新的骁龙 690 SoC 芯片配备了一个 Adreno GPU, 一个 Hexagon DSP,以及 Kryo 多核 CPU。然而,目前的模型加速技术多应用于 2D CNN 上,很难使 3D CNN 在移动设备上实时运行且保持较高精度,因为现存的商用移动设备的计算和存储能力不能承载高度复杂的模型结构和较高的模型维度。

图 1 骁龙 690 移动 SoC 架构

神经网络的权重剪枝技术在软件层面上已被普遍应用。然而,直接将 2D CNN 权重剪枝方法泛化到 3D CNN 并不足以使移动设备上的计算同时保持高并行度和高准确度。因此,我们提出了 RT3D,通过结合软件上的权重剪枝技术和硬件上的编译器代码优化技术在移动设备上实现 3D CNN 加速。其中权重剪枝又需要解决稀疏模式和剪枝算法两个问题。

我们研究了两种结构化稀疏模式,即对移动端加速友好的朴素结构化(Vanilla)稀疏和核组结构化(Kernel Group Structured, KGS)稀疏。Vanilla 稀疏移除整组核,而 KGS 稀疏是一种更加细粒度的结构化稀疏,充分利用了设备上的并行性,同时享有更高的灵活性。在剪枝算法方面,RT3D 引入了一种重新加权的正则化剪枝算法来实现所提出的稀疏模式,并和现存的启发式及固定正则化的剪枝算法进行了比较。此外,在硬件方面,RT3D 采用了一个编译器辅助的代码生成框架,以将剪枝所带来的计算量的减少转换为移动设备上计算性能的增益。

该编译器框架是通用的,支持稠密的(尚未压缩的)和稀疏的 2D/3D 网络的高效执行。由稀疏性带来的的运行时间加速倍率接近整个模型计算量(FLOPs)的压缩率。与当前最先进的支持 3D CNN 的移动设备上框架相比,RT3D 展示了高达 29.1 倍的端到端运行时间加速,且准确率仅损失 1%~1.5%。当在手机上运行具有代表性的 C3D 和 R(2+1)D 模型时,16 帧视频的运行时间可达到 150ms 以内。如图 2 所示,这是首次在现有移动设备上实现实时运行 3D CNN(此例使用了配备高通骁龙 865 处理器的三星 Galaxy S20)。

图 2 实时 3D 行为识别

稀疏模式

为了有效减少 3D CNN 模型的整体计算量,我们将剪枝技术主要应用于计算量较大的卷积层。图 3 给出了两种结构化稀疏模式,其中(a)为朴素结构化(Vanilla)稀疏,(b)为核组结构化(KGS)稀疏。每个 3D 卷积层共包含五个维度,其权重张量沿着输入通道和输出通道两个维度被分成多个卷积核组。图中以每个核组包含 2×2 个核为例,被移除的权重用灰色表示。Vanilla 稀疏保留或移除整个核组,KGS 稀疏法则在同一核组的每个核中移除相同位置的权重。Vanilla 稀疏将 2D CNN 的结构化稀疏模式泛化到 3D CNN 中,它可以借助编译器优化技术在设备上获得直观的运行加速,但同时会因整组核被移除导致模型准确率降低较多。而 KGS 稀疏有更高的细粒度以及灵活性,可以保证更高的准确率。

实际上,Vanilla 稀疏是 KGS 稀疏的一个特例,在相同压缩比率下,只要借助有效的剪枝算法,KGS 稀疏法就能获得比 Vanilla 稀疏法更高的模型准确率。此外,KGS 稀疏在设计上能与编译器技术匹配以达到手机上的模型加速。卷积核组与输入特征图一起被转化二维矩阵以进行矩阵乘法计算,如图 3(b)所示。KGS 稀疏法相当于在核组内部进行列剪枝,计算开销很小并可借助编译器进一步减小。对于两种稀疏模式而言,被保留的权重组成的矩阵仍然能够充分利用现有手机设备上有限的并行度,所以手机加速性能(FLOPs / 秒、帧 / 秒)能够得到同等程度的提升。在实际操作中,卷积核组的大小需要根据手机上的单指令流多数据流(SIMD)并行度以及计算开销来提前决定。

图 3 两种结构化稀疏模式

模型压缩的算法实现

近年来较为常见的剪枝算法大致可以分为两大类,一类是启发式剪枝算法,另一类是基于固定正则化的剪枝算法。前者往往会为神经网络中各部分权重分配 “重要性评分”,然后根据评分来对模型进行剪枝。贪心算法是这一类型算法中的一个代表。这类算法往往存在一个通病,它们会在压缩的早期阶段就削减掉模型中的大量权重,这会对神经网络准确度带来较大的冲击,使得压缩比率有限。

第二类剪枝算法基于固定正则化,这种算法一般会在神经网络的损失函数中添加一个固定的正则化项,通过神经网络的反向传播来实现权重矩阵的稀疏化,进而完成模型的裁剪。但基于固定正则化的剪枝算法存在局限性,在压缩训练的收敛过程中,所有权重会受到同等的惩罚,这会带来潜在的模型精度损失。

为了克服先前算法的弊病,我们提出了一种新的算法:重加权正则化剪枝算法(Reweighted Regularization Pruning Algorithm)。不同于固定正则化剪枝为所有权重带来相同的惩罚,重加权正则剪枝算法可以实现动态调节。特别是,对于那些较大且更加重要的权重,我们会减少对其的惩罚,对于那些较小且不重要的权重,我们会小幅度地增大对其的惩罚。而且这种算法以系统且渐进的方式执行,这样可以避免贪心算法在早期阶段削减大量的权重对模型造成的破坏。除此之外,我们的算法不需要手动设置模型中每层的剪枝率,各部分的压缩比率可以在训练过程中自动调节。

图 4 剪枝算法结构分组示意图,‖·‖g 表示对应压缩分组中的 L-g 范数

性能加速结果

我们在三种 3D CNN 模型(C3D,R(2+1)D 和 S3D)上测试了建议的两种结构化稀疏模式(即 Vanilla 和 KGS 稀疏模式)以及三种剪枝算法。除了提出的两种稀疏模式之外,还实现了过滤器稀疏模式来进行对比,即以过滤器作为一个整体来进行裁剪,这是对 2D CNN 过滤器剪枝的直接实现。所有模型都在 Kinetics 数据集上进行了预训练,并作为预训练模型进行迁移学习,转移到了 UCF101 和 HMDB51 数据集上。

表 1 在 UCF101 数据集上 3D CNN 压缩结果比较

表 1 提供了在 UCF101 数据集上使用各种剪枝算法和稀疏模式对 C3D,R(2+1)D 模型的修剪结果。对于每种剪枝算法,在相同剪枝率下比较了三种稀疏模式(FLOPs 减少是基于模型整体而言的),并比较了两种剪枝配置下的 KGS 压缩结果。从表中可以看出,KGS 稀疏模式始终优于 Vanilla 稀疏模式,这两个方案的性能均优于过滤器剪枝。重加权的正则化算法始终优于其他两个剪枝算法。如果使用加权加权正则化和 KGS 稀疏性方案,则在 2.6 倍剪枝倍率下,C3D 和 R(2+1)D 只有 1%?1.5%的精度损失。

表 2 移动 CPU 和 GPU 上的 RT3D,MNN 和 PyTorch 的运行时间比较。

接下来,我们将提出的 RT3D 与 MNN 和 PyTorch Mobile(PyTorch)的运行时间进行比较,来评估 RT3D 的实际加速效果。表 2 给出了端到端的 3D CNN 运行时间结果。RT3D(Dense)意为直接使用我们的编译器对稠密的(尚未压缩的)模型进行处理,RT3D(Sparse)意为在编译器上运行的模型经过了重加权正则化剪枝算法支持下的 KGS 稀疏结构压缩。MNN 尚不支持 R(2+1)D 和 S3D,所以这里不给出相关结果。

RT3D 在移动 CPU 和移动 GPU 上都支持稠密的(尚未压缩的)和稀疏的 3D CNN,PyTorch 仅在 CPU 上支持稠密模型,而 MNN 仅在 CPU 上支持稠密 C3D 模型。对于稀疏模型,RT3D 使用带有 KGS 稀疏性的重加权正则化剪枝算法修剪模型,修剪率分别为 C3D 3.6 倍,R(2+1)D 3.2 倍,S3D 2.1 倍(这里的剪枝率是对于模型的整体 FLOPs),准确度为 80.2%,92.0%和 90.2%。在表中,将 RT3D 的提速与 PyTorch 进行了比较。在所有情况下,RT3D 在移动 CPU 上均优于 MNN 和 PyTorch。而在移动 GPU 上 RT3D 的效果更为出色。例如,对于 C3D,完全优化的 RT3D(稀疏)在 CPU 上分别达到了 PyTorch 和 MNN 性能的 7.1 倍和 2.7 倍,在 GPU 上分别达到了 17.9 倍和 6.7 倍。值得注意的是,在移动 GPU 上,经过全面优化的 RT3D 在 C3D,R(2+1)D 和 S3D 上可以分别在 142 ms,141 ms 和 293 ms 内完成 16 帧计算,从而实现 3D CNN 在移动设备上的实时运行。

表 3 Vanilla 和 KGS 稀疏模式之间的比较(基于 UCF101 数据集)

表三给出了烧烛研究的实验结果。通过控制相同的剪枝 top-1 精度,在重加权正则加权算法下,我们还比较了 Vanilla 和 KGS 两种稀疏模式的修剪率与运行时间。由表中数据我们可以看出,由于 KGS 的高灵活性和与编译器级优化的无缝匹配,在 C3D 和 R(2+1)D 上以相同的修剪精度实现了较高的剪枝率(在 FLOPs 中)和较低的计算延迟。

更广泛的影响

RT3D 是第一个在移动设备上实时运行 3D CNN 且没有明显准确率损失的神经网络加速方案,在此之前只能通过移动设备上特定(而且更加昂贵)的硬件来实现。对于以往通过云计算的方式实现的行为检测的机器学习应用,RT3D 将会在移动设备上以边缘计算的方式实现。这项技术不仅可以使数据隐私性得到了显着增强,还可以极大地拓宽机器学习在其他领域的应用。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表