关注公众号,发现CV技术之美

 写在前面

深层神经网络是一种功能强大、应用广泛的模型,能够多级抽象提取任务相关信息。然而,这种成功通常是以计算成本、高内存带宽和长推理延迟为代价的,这使得它们无法部署在资源受限和时间敏感的场景中 ,如边缘推理和自动驾驶汽车。

虽然最近的高效深层神经网络方法通过减小模型体积,使其在现实世界中的部署更加可行,但它们并没有在每个实例的基础上充分利用输入属性,以最大限度地提高计算效率和任务精度。

特别是,大多数现有方法通常使用“一刀切”的方法,以相同的方式处理所有输入 。基于不同的图像需要不同的特征才能准确分类的事实,在本文中,作者提出了一种完全动态的模式,能够赋予深度卷积神经网络 动态 分层推理的能力

 1. 论文和代码地址

Fully Dynamic Inference with Deep Neural Networks

论文地址:https://arxiv.org/abs/2007.15151

代码地址:未开源

 2. Motivation

近几年来,深度神经网络(DNN)极大地加速了人工智能领域的发展。它们通过越来越抽象的特征表示层来表示数据的能力在许多应用领域中被证明是有效的,例如图像分类、语音识别、疾病诊断和神经机器翻译。

通过增加对强大计算资源和大量标记训练数据的访问(例如,ImageNet拥有来自1000个不同类别的128万张图像),DNN可以在各种任务上实现超过人类的性能。

增加DNN表达能力和准确性的一种策略依赖于添加更多层和卷积滤波器。通过这种方式,尽管精度有所提高,但这些笨重的模型不适用于边缘端推理,边缘端推理通常面临严格的延迟和显存限制。

为了解决现代DNN的部署限制,增加模型的紧致性的研究正在兴起 。一种方法是学习紧凑的结构 。例如,神经架构搜索(NAS),模型压缩方法,如剪枝。另一种方法侧重于通过权重量化减少计算开销 ,可以在不影响精度的情况下降低比特精度。

这些方法的一个共同特点是同一个模型处理不同的输入实例。鉴于不同的实例具有独特的视觉特征,自然会产生一个问题:是否每个实例都需要所有级别的嵌入和同一组特征映射才能准确分类?

直观地说,对于易于分类的图像,可能不需要更深的嵌入。因此,为了最大限度地提高计算效率,应仅为困难的输入实例保留与深层相关的额外计算。此外,由于卷积通道/滤波器捕获特定于类的特征,因此在推理过程中跳过不相关的通道可以避免不必要的计算。

动态推理是一种新兴的方法,它利用输入属性有选择地执行精确分类所需的显著计算子集。与永久移除神经元以提高模型效率的静态方法不同,动态方法仅根据输入实例暂时抑制计算。因此,动态方法可以最大限度地提高效率并保持模型的表达能力。然而,到目前为止,这些方法不能完全适应每个实例的计算需求。此外,这些方法通常使用强化学习来做出选择决策,这是计算密集型的。

在这项工作中,作者提出了一个基于每个实例的全动态推理框架。本文方法的核心是设计与主干网络平行的预测控制网络。具体地说,作者提出了两种新的辅助网络,层网络(Layer-Net,L-Net)通道网络(Channel-Net,C-Net) ,它们分别辅助动态层和通道的跳跃和缩放。

由两个控制网(称为LC Net)组成的联合拓扑,通过(1)确定在推理时执行哪些通道和块 (2)使用显著性分数缩放保留通道和块以最大化精度,以及(3)实现完全动态推理 ,从而在不中断推理流或产生延迟开销的情况下动态预测显著计算,同时提高推理效率和准确性。

 3. 方法

CNN中的特征和层的重要性因输入实例而不同。这种输入依赖性可用于为计算受限的场景设计高效网络,因为原则上可以忽略不相关的特征映射,而不会牺牲准确性。在本文中,作者提出了一种分层动态的方法,以实现动态选择性执行CNN,从而实现高效推理

在粗粒度级别,在推断时仅保留用于图像识别的显著层,而跳过其他层。在更细的粒度级别上,仅保留与保留层相关的显著特征图/通道。这种多级方法利用了层和通道的稀疏性,在保持高分类精度的同时显著降低了计算成本

3.1 L-Net: Dynamic Layer Skipping for Depth Flexibility

并非所有输入实例都需要所有层的计算来达到正确分类的目的,在现代DNN中,通常采用重复的块相互叠加以微调特征细节。复杂的样本可能需要较深的嵌入才能准确分类,而较容易的样本可能只需要较浅的嵌入。换句话说,较浅的推断适用于较简单的样本,而较难的情况则需要较深的推断层来保持性能

因此,作者提出了一个深度跳跃框架(depth-wise skipping framework) ,动态选择高分类性能所需的显著层。在ResNet取得显著成功后,大多数现代DNN都采用了基于block的残差设计,解决DNN精度下降的问题。因此,作者构建的方法通常适用于目前DNN中使用的任意块。

为了支持动态的块跳跃,作者在具有残差的任意块中添加一个称为L-Net 的小型网络。L-Net结构如上图所示。L-Net包含三个部分:全局平均池化层、全连接层和ReLU-1激活函数 。作者将L-Net设计为小而浅,以确保与原始主干神经网络相比,额外引入的计算和参数可以忽略不计。

第i个block的输入表示为,输出表示为,当前block的函数可以表示为:。带残差的整个block可以表示为:

其中F包含一个或多个卷积层,占网络计算的大部分。为了动态跳过不必要的块,从而降低计算成本,作者在每个块上并行添加一个L-Net。在L-Net中,首先通过一个全局平均池化层,将空间大小减少到1。接下来,输出向量被传递到一个全连接层FC,随后被一个ReLU-1激活,该激活输出一个块显著性分数,用表示,介于0和1之间。与原始block的输出相乘,如果显著性得分为零,则跳过该块。将L-Net控制块建模如下:

3.2 C-Net: Dynamic Channel Selection for Width Flexibility

DNN的大部分计算成本发生在卷积层。在这些层中,单个通道的贡献高度依赖于输入。例如,汽车的特征图对于马的分类没有用处,因为这些特征图通常在ReLU后不会被激活。

因此,可以避免这些不相关的特征映射,而不会降低分类精度。虽然L-Net通过block-level skipping提高了计算效率,但通过利用块内通道级的图像相关显著性差异 ,可以进一步降低总体计算成本。

为此,作者提出了一种L-Net的补充方法,称为C-Net ,它以输入驱动的方式动态修剪不重要的通道。

DNN的第l层卷积网络可以表示为:。C-Net的目标是预测信道显著性,并在所有卷积中仅执行重要卷积的子集。

C-Net的示意图如上图所示。与L-Net一样,C-Net是一个紧凑的网络,包含一个全局平均池化层、一个全连接层和一个ReLU-1激活函数。全连接层有个unit,以匹配输出的通道数。C-Net和第l个block共享输入。

在C-Net中,全局平均池化层处理输入并生成长度为的向量,接下来,该向量经过全连接层和ReLU-1激活函数,以产生大小为的通道显著性得分,记为。具有通道选择的动态层可以表示为:

是第k个通道的显著性得分,然后乘以第k个通道的所有元素。在推理过程中,如果相关通道的显著性得分为0,则不会执行卷积。计算具有非零分数的通道,并根据其相应的分数缩放其生成的特征图。

3.3 Joint Design: LC-Net

L-Net和C-Net是正交方法,分别支持深度和通道跳转和缩放,以实现高效的动态推理。因此,作者将这两种方法结合起来,以实现完全动态推理并最小化计算成本。以ResNet为例,作者构建了两个类型的block:基本块瓶颈块

基本块由两个3x3卷积层组成,“瓶颈”块由1x1、3x3和1x1卷积层序列组成。两种类型模块的联合设计结构如上图所示。L-Net和C-Net都是与任一构建块并行添加的,并采用相同的输入。

由于L-Net和C-Net都使用全局平均池化过程,可以通过在两者之间共享一个全局平均池化层来减少计算开销。除了共享池化层之外,作者还提出了两种设计,以鼓励训练收敛,并允许动态运行,同时将延迟开销降至最低。

3.3.1 ReLU-1

在L-Net和C-Net中,作者通过ReLU-1激活函数获得了介于0和1之间的显著性分数,如上图所示,公式如下:

在训练过程中,作者选用了Leaky ReLU-1。与同样产生0到1之间结果的sigmoid激活函数不同,该ReLU-1激活函数在训练期间不会出现消失梯度,并且能够在推理时产生0到1之间的严格值范围。此外,与标准ReLU相比,Leaky ReLU-1不太容易发生正输入值的爆炸性的激活。由于ReLU-1函数是可微的,与基于强化学习的策略控制器不同,LC Net和主干模型可以以端到端的方式联合训练。这提高了训练效率。

3.3.2 Parallelism

作者将L-Net和C-Net设计为与构建块并行,以便控制网络和主干网络可以同时执行。与主构建块中的第一个卷积层相比,L-Net和C-Net的计算量更少。因此,这两个网络可以在第一个卷积层完成执行之前生成显著性分数。

 4.实验

4.1 Main Results

4.1.1. CIFAR-10

上表结果展示了,在CIFAR-10上,本文的方法在精度和FLOPs方面优于所有现有技术。

上图展示了本文方法和其他方法的FLOPs和准确率的对比

4.1.2. ImageNet

上表展示了本文方法在ImageNet上的实验结果,可以看出,本文的方法对更大、更复杂的数据集(如ImageNet)的可扩展性。

4.2 Qualitative Analysis

4.2.1 Relationship between instance complexity and FLOPs

上图展示了高FLOPs和低FLOPs的图片。这两组之间的视觉差异很明显。一般来说,低FLOPs图像组中的对象很容易识别,但高FLOPs图像组中的图像更难分类。

4.2.2 Dynamic Selection

上图展示了ResNet-18主干网络上通道选择的可视化。每列显示了跨图像类的特定通道的百分比。图中位置(i,j)处的色块表示第i个类中激活第j个通道的图像实例的百分比。

 5. 总结

在本文中,作者提出了一个新的端到端训练框架,该框架实现了基于实例的全动态推理,以自动优化DNN中的计算路径。两个浅层网络,L-Net和C-Net,分别有助于动态层和通道的跳跃和缩放。作者用CIFAR-10和ImageNet进行的实验表明,本文的选择性执行方法大大减少了FLOPs,并且比其他方法的动态推理方法具有更高的准确性。

▊ 作者简介

研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。

知乎/公众号:FightingCV

END

欢迎加入「模型部署交流群

普林斯顿大学英伟达Facebook提出基于深度神经网络的全动态推理,助力轻量级网络!...相关推荐

  1. LatentFusion:华盛顿大学与英伟达联合提出6D姿态估计新方法

    作者 | Keunhong Park.Arsalan Mousavian.Yu Xiang.Dieter Fox 译者 | 刘畅 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100 ...

  2. 英伟达RTX 3080值不值得抢?在TensorFlow上训练了卷积网络

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  3. 英伟达的STEAL AI让神经网络拥有更好的计算机视觉

    http://vr.sina.cn/news/2019-06-18/detail-ihxvchpr4245066.d.html 来自英伟达(Nvidia).多伦多大学(University of To ...

  4. 没有Nvidia(英伟达)显卡对深度学习计算的影响

    有很多电脑使用的都是集成显卡,而进行深度学习大都需要英伟达的显卡,那么没有Nvidia的显卡会有什么影响呢? cuda 提到深度学习cuda是一个绕不开的概念,CUDA(Compute Unified ...

  5. 蒙纳士大学 英伟达发布 2021 年医疗视觉问答

    论文:Medical Visual Question Answering: A Survey 作者:Zhihong Lin,Donghao Zhang,Qingyi Tac,Danli Shi,Gho ...

  6. 挑战 Intel 和英伟达,高通发布 Cloud AI 100 边缘推理芯片

    雷锋网注:[ 图片来源:VB  所有者:Qualcomm ] 昨天,高通在旧金山召开了年度人工智能日(AI Day)大会.在本次会议上,该公司揭开了三款芯片的神秘面纱,而这三款芯片可以用于智能手机.平 ...

  7. 谁敢动英伟达的奶酪?AI芯片领域,这12家创业公司值得关注

    唐旭 编译整理 量子位 出品 | 公众号 QbitAI 还有谁? 还有谁家的AI产品背后的服务器上用的不是英伟达的芯片?还有谁家的芯片敢来老黄的地盘送死? 还有谁还敢做AI芯片? 英伟达的股价一年就翻 ...

  8. 软硬件解耦太难!英伟达竟“越来越像Mobileye”

    尽管Mobileye已经愿意推行"软硬件解耦",但由于车企自己目前还没有能力搞定算法,Mobileye便"不得不"又回到软硬一体化的老路上. 随着软件能力越来越 ...

  9. 神经网络其实并不需要那么深!普林斯顿大学英特尔提出ParNet,12层的网络就能达到80%以上的准确率!...

    关注公众号,发现CV技术之美 本文分享论文『Non-deep Networks』,由普林斯顿大学&英特尔联合提出<ParNet>,表示深度神经网络其实并不需要那么深!12层的网络就 ...

最新文章

  1. python信号与槽_Python信号和插槽(1),python,与,一
  2. elasticsearch 查看索引_ELK技术栈之ElasticSearch(一)
  3. 用Anko和Kotlin实现Android上的对话框和警告提示(KAD 24)
  4. POJ1734(floyd求最小环的路径)
  5. 隐藏帐户与隐藏权限的添加
  6. 图学java基础篇之IO
  7. php查询排序,php如何对查询结果集进行排序
  8. STM32使用PWM输入模式测试频率和占空比
  9. mybatis驼峰映射
  10. 视频教程-Dubbo入门视频课程-Java
  11. C#条形码图像生成库
  12. 学区摇号软件设计_小升初:多校划片与单校划片,2020年小摇号最全解析!
  13. open wrt 跟换主题_openwrt 更改默认主题
  14. 让人无语的交通拥挤费
  15. 《农民的终结》读书笔记优秀范文2700字
  16. 韦东山第1期-学习笔记-2
  17. 解读GDPR | 你应该知道的那些事儿
  18. 阜阳睿趣机器人编程_编程教育中心怎么样睿趣疯狂机器人_睿诚教育蒸蒸日上...
  19. vue遇到ie兼容问题如何处理_vue IE兼容性问题汇总
  20. 采集到博客数据的10个经典方法

热门文章

  1. Selenium不打开浏览器采爬取数据 Java
  2. 【OpenCV图像处理】一、图像相加、相减、相乘与相除的实现【转载】
  3. Hibernate框架 配置文件基本架构
  4. 使用pytorch查看中间层特征矩阵以及卷积核参数
  5. QT 的基础调试技巧 -- 未完 -- 更新中
  6. 2021年河南高考成绩排名查询一分一段表,2021年河南高考文科一分一段表,河南一分一段表文科位次排名查询...
  7. 蒙特卡洛方法_程序媛转TA之理论篇十三:蒙特卡洛方法
  8. 外卖和快递行业数据_外卖和快递骑手管理“上轨道”
  9. html body最小高度,CSS网页布局中的最小高度问题的解决方法
  10. python人脸识别系统下载_简单的Python人脸识别系统