Wei Niu、Mengshu Sun等作者

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

来自美国东北大学(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 将会在移动设备上以边缘计算的方式实现。这项技术不仅可以使数据隐私性得到了显着增强,还可以极大地拓宽机器学习在其他领域的应用。
理论
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

范数技术

范数(norm),是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,是一个函数,其为向量空间内的所有向量赋予非零的正长度或大小。半范数反而可以为非零的向量赋予零长度。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

边缘计算技术

边缘运算(英语:Edge computing),又译为边缘计算,是一种分散式运算的架构,将应用程序、数据资料与服务的运算,由网络中心节点,移往网络逻辑上的边缘节点来处理。边缘运算将原本完全由中心节点处理大型服务加以分解,切割成更小与更容易管理的部分,分散到边缘节点去处理。边缘节点更接近于用户终端装置,可以加快资料的处理与传送速度,减少延迟。在这种架构下,资料的分析与知识的产生,更接近于数据资料的来源,因此更适合处理大数据。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

云计算技术

云计算(英语:cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

贪心算法技术

贪心法,又称贪心算法、贪婪算法、或称贪婪法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。

推荐文章
暂无评论
暂无评论~