文 | rainforest wang

源 | 知乎


本文主要介绍我们被NeurIPS 2020会议录用的一篇文章:
Glance and Focus: a Dynamic Approach to Reducing Spatial Redundancy in Image Classification

代码和预训练模型已经在Github上面放出:
https://link.zhihu.com/?target=https%3A//github.com/blackfeather-wang/GFNet-Pytorch

这项工作提出了一个通用于绝大多数CNN的自适应推理框架,其效果比较明显,在同等精度的条件下,将MobileNetV3的平均推理速度加快了30%,将ResNet/DenseNet加速了3倍以上,且在iPhone XS Max上的实际测速和理论结果高度吻合。此外,它的计算开销可以简单地动态在线调整,无需额外训练

(太长不看版)下面一张图可以概括我们做的事情:将图像识别建模为序列决策过程,先将缩略图输入神经网络(Glance),再不断选择最关键的图像区域进行处理(Focus,利用强化学习实现),直至网络产生一个足够可信的预测结果时停止;对于简单和困难的样本分配不同的计算资源,以提升整体效率。

图1 Glance and Focus Network \(GFNet\) 效果图

下面,我将详细介绍这一工作的具体内容。

Introduction

在基于卷积神经网络(CNN)的图像任务中,提升网络效果的一个有效方法是使用高分辨率的输入,例如,在ImageNet分类[1]任务上,近年来的最新网络(DenseNet[2], SENet[3], EfficientNet[4])往往需要使用224x224或更大的输入图片以取得最佳性能:

Model Input Size Accuracy
DenseNet-265 224x224 77.85 %
SENet-154 320x320 82.72 %
EfficientNet-B7 600x600 84.40 %

然而,这种方式会带来较大的计算开销,因为推理CNN所需的计算量(FLOPs)基本与像素数目成正比[5],即与图形的长、宽成二次关系,如下图所示:

图2 CNN计算量与图片长/宽的关系

在实际应用(例如手机APP、自动驾驶系统、图片搜索引擎)中,计算量往往正比于能耗或者时间开销,显然,无论出于成本因素还是从安全性和用户体验的角度考虑,网络的计算开销都应当尽可能小。那么,如何在保留高分辨率输入所带来的好处的同时,减小其计算开销呢?

事实上,我们可以借助神经网络的一个有趣的性质。与人类视觉相似,神经网络往往可以通过仅仅处理图像中与任务相关的一小部分区域而得到正确的结果,例如在下图中,遮挡住屋顶、飞鸟或花朵之外的部分,神经网络仍然可以得到正确的分类结果[6]:

图3 部分关键信息足以使神经网络做出可靠的判断

这便是本文所提出方法的出发点,我们的目标是,对于输入图片,自适应地找到其与任务最相关的区域,进而通过使神经网络只处理这些区域,以尽可能小的计算量得到可信的结果。具体而言,我们采用的方法是,将一张分辨率较高的图片表征为若干个包含其关键部分的“小块”(Patch),而后仅将这些小块输入神经网络。以下面的示意图为例,将一张224x224的图片分解为3个96x96的Patch进行处理所需的计算量仅为原图的55.2%。

图4 Glance and Focus Network \(GFNet\) 的基本建模方式

Method

为了实现上述目的,事实上,有两个显然的困难:

(a) 任意给定一张输入图片,如何判断其与任务最相关的区域在哪里呢?

(b) 考虑到我们的最终目的是使神经网络得到正确的预测结果,不同输入所需的计算量是不一样的,例如对于下面所示的两个输入图片,神经网络可能仅需要处理一个patch就能识别出特征非常突出的月亮,但是需要处理更多的patch才能分辨出猫咪的具体品种。

图5 对于不同输入,应分配不同大小的计算资源

为了解决这两个问题,我们设计了一个Glance and Focus的框架,将这一思路建模为了一个序列决策过程,如下图所示。

图6 Glance and Focus Network \(GFNet\) 的基本框架

其具体执行流程为:

  1. 首先,对于一张任意给定的输入图片,由于我们没有任何关于它的先验知识,我们直接将其放缩为一个patch的大小,输入网络,这一方面产生了一个初步的判断结果,另一方面也提供了原始输入图片的空间分布信息;这一阶段称为扫视(Glance)。

  2. 而后,我们再以这些基本的空间分布信息为基础,逐步从原图上取得高分辨率的patch,将其不断输入网络,以此逐步更新预测结果和空间分布信息,得到更为准确的判断,并逐步寻找神经网络尚未见到过的关键区域;这一阶段称为关注(Focus)。

值得注意的是,在上述序列过程的每一步结束之后,我们会将神经网络的预测自信度(confidence)与一个预先定义的阈值进行比较,一旦confidence超过阈值,我们便视为网络已经得到了可信的结果,这一过程立即终止。此机制称为自适应推理(Adaptive Inference)。通过这种机制,我们一方面可以使不同难易度的样本具有不同的序列长度,从而动态分配计算量、提高整体效率;另一方面可以简单地通过改变阈值调整网络的整体计算开销,而不需要重新训练网络,这使得我们的模型可以动态地以最小的计算开销达到所需的性能,或者实时最大化地利用所有可用的计算资源以提升模型表现。

关于这些阈值的具体整定方法,由于比较繁杂,不在这里赘述,可以参阅我们的paper~

Network Architecture

下面我们具体介绍Glance and Focus Network (GFNet) 的具体结构,如下图所示

图7 Glance and Focus Network \(GFNet\) 的网络结构

GFNet共有四个组件,分别为:

  • 全局编码器和局部编码器(Global Encoder and Local Encoder)为两个CNN,分别用于从放缩后的原图和局部patch中提取信息,之所以用两个CNN,是因为我们发现一个CNN很难同时适应缩略图和局部patch两种尺度(scale)的输入。几乎所有现有的网络结构均可以作为这两个编码器以提升其推理效率(如MobileNet-V3、EfficientNet、RegNet等)。

  • 分类器 (Classifier)为一个循环神经网络(RNN),输入为全局池化后的特征向量,用于整合过去所有输入的信息,以得到目前最优的分类结果。

  • 图像块选择网络 (Patch Proposal Network)是另一个循环神经网络(RNN),输入为全局池化前的特征图(不做池化是为了避免损失空间信息),用于整合目前为止所有的空间分布信息,并决定下一个patch的位置。值得注意的是由于取得patch的crop操作不可求导,是使用强化学习中的策略梯度方法(policy gradient)训练的。

Training

为了确保GFNet的四个组件按照我们预期的方式工作,我们提出了一个三阶段的训练策略,在这里简要概述,更多细节可以参见我们的paper~

  • 首先,我们从GFNet中移除 ,在每一步均以均匀分布随机选择patch的位置,以下面所示的损失函数训练,和,使其达到最佳的分类性能,其中 代表交叉熵损失, 和 分别代表 在第 步的预测结果和原始输入图片 对应的标签, 表示训练集, 表示序列的最大可能长度。

  • 而后,我们固定第一步得到的,和 ,在网络中插入一个随机初始化的 ,以强化学习算法(policy gradient)优化以下形式的折扣奖励函数。其中 为一个预先定义折扣因子, 为每次选择patch位置的奖励(reward),我们将其定义为所选择的patch所造成的在正确标签上的confidence的增量,换言之,我们总是希望 选择目前的网络没有处理过的、对产生正确的预测结果最有帮助的patch。

  • 最后,我们固定第二步得到的 ,再以第一步中的损失函数对 , 和 进行最终的微调(Finetune)。

Experiments

在实验中我们考虑了两种设置:

  • budgeted batch classification,测试数据伴随有一个计算开销的预算(budget),网络需要在这个计算预算内进行推理。在此设置下,我们使用前面提到的方法,确定阈值(confidence threshold)并进行自适应推理。

  • anytime prediction,网络有可能在任何时候被要求立刻输出预测结果。在此设置下,我们不使用自适应推理技术,并假设所有测试样本的序列长度固定。

下图为我们在不同网络结构上实现GFNet的实验结果,其中横轴为网络的平均理论计算开销,纵轴为准确率,(a-e)为budgeted batch classification的结果,(f)为anytime prediction的结果。可以看出,GFNet明显地提升了包括MobileNetV3、RegNet和EfficientNet在内的最新网络结构的推理效率,同等精度下,计算开销减小达30-40%以上,对于ResNet/DenseNet的增幅可达3倍甚至更高;同等计算开销下,对MobileNetV3提点2%左右,对ResNet/DenseNet达5-10%以上。

图8 GFNet基于不同CNN的实验结果(Accuracy v.s. Multiply-Adds)

GFNet的另一个显著优势是,由于其没有更改CNN的具体结构,其可以方便地在移动端或边缘设备上使用现有的工具部署,且享有和理论结果几乎等同的实际加速比。下图为我们在一台iPhone XS Max(就是我的手机)上基于TensorFlow Lite的测试结果:

图9 GFNet在一台iPhone XS Max上的实际测试结果(Accuracy v.s. Latency)

下面是GFNet的一些可视化结果,可以从中看出,对于比较简单的样本,GFNet可以仅在Glance阶段或Focus阶段的第一步以很高的confidence得到正确的结果,对于较为复杂的样本,则实现了以不断关注关键区域的形式逐步提升confidence。

图10 GFNet的可视化结果

Conclusion

最后总结一下,其实我本人是非常喜欢这项工作的,因为它非常的自然、通用、有效。一方面它很好的模拟了生物(或者说人)识别一张图片的过程,人眼对图像数据的认知事实上也是一个先扫视得出一些直觉信息、再逐渐关注关键区域的过程。另一方面GFNet的实际效果也非常显著,且能在目前最佳的一些模型上进一步提升理论计算效率,并加快实测速度。欢迎大家follow我们的工作~。

@inproceedings{NeurIPS2020_7866,title = {Glance and Focus: a Dynamic Approach to Reducing Spatial Redundancy in Image Classification},author = {Wang, Yulin and Lv, Kangchen and Huang, Rui and Song, Shiji and Yang, Le and Huang, Gao},booktitle = {Advances in Neural Information Processing Systems (NeurIPS)},year = {2020},
}

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

有顶会审稿人、大厂研究员、知乎大V和妹纸

等你来撩哦~

 

[1] http://www.image-net.org/

[2] https://arxiv.org/pdf/2001.02394.pdf

[3] https://arxiv.org/pdf/1709.01507.pdf

[4] https://arxiv.org/pdf/1905.11946.pdf

[5] https://papers.nips.cc/paper/5542-recurrent-models-of-visual-attention.pdf

[6] https://arxiv.org/pdf/1910.08485.pdf

NeurIPS 2020 | Glance and Focus: 通用、高效的神经网络自适应推理框架相关推荐

  1. NeurIPS 2020 | 清华大学提出:通用、高效的神经网络自适应推理框架

    来源:人工智能AI技术 本文约3400字,建议阅读7分钟 本文介绍我们被NeurIPS 2020会议录用的一篇文章. 本文主要介绍我们被NeurIPS 2020会议录用的一篇文章:Glance and ...

  2. ECCV 2020,一种灵活高效的权重生成网络框架

    旷视研究院提出一个灵活高效的权重生成网络框架,称为WeightNet. 论文题目: WeightNet: Revisiting the Design Space of Weight Networks ...

  3. NeurIPS 2020 | 基于“单目标域样本”的领域自适应方法

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨罗亚威@知乎(已授权) 来源丨https://zhua ...

  4. NeurIPS 2020 | AI编程:如何从复制粘贴走向推理合成(文末附论文及代码)

    编者按:AI 编程是人们对人工智能的一大期望,现在的 AI 编程技术虽然已经惠及了许多不会编程的普通用户,但还远没有达到满足人们预期的程度,一大痛点在于:现有 AI 只会进行机械地记忆与复制粘贴,难以 ...

  5. NeurIPS 2020 | 利用像素级别循环一致性解决领域自适应语义分割问题

    ©PaperWeekly · 作者|康国梁 学校|卡内基梅隆大学博士后 研究方向|深度学习.领域自适应.语义分割 论文标题: Pixel-Level Cycle Association: A New ...

  6. NeurIPS 2020 | MVGNN+:基于多视图图神经网络的分子性质预测

    原文标题:Multi-View Graph Neural Networks for Molecular Property Prediction 论文地址:https://ml4molecules.gi ...

  7. NeurIPS 2020 | 一种基于动作采样的简单高效的正则化强化学习方法

    编者按:现有的强化学习方法通常通过熵正则化的方式控制最优策略的随机性,以保证训练过程中的良好探索以及目标策略的鲁棒性.然而,熵正则化的强化学习方法通常会面临表达能力有限的策略结构和复杂低效的训练过程之 ...

  8. 一种崭新的长尾分布下分类问题的通用算法|NeurIPS 2020

    ↑ 点击蓝字 关注视学算法 作者丨汤凯华@知乎 来源丨https://zhuanlan.zhihu.com/p/259569655 编辑丨极市平台 本文主要介绍我们组今年被NeurIPS 2020接收 ...

  9. NeurIPS 2020论文接收列表公布,智源研究院35篇入围

    近日,机器学习和计算神经科学领域国际顶会NeurIPS 2020论文接收列表公布,共接收论文1899篇,包含Oral论文105篇,Spotlight论文280篇. 此次接收列表中,智源研究院共有35篇 ...

最新文章

  1. git bash打印当前文件结构_6 个方便的 Git 脚本
  2. InnerHTML、InnerText、outerHTML、outerText的区别
  3. android 电容屏(二):驱动调试之基本概念篇
  4. Linux下服务器模型 【转载】
  5. java nio 读取图片_给大忙人们看的 Java NIO 极简教程
  6. 喜大普奔!BFE 控制平面正式开源发布!
  7. Java 异常种类及处理方法
  8. 战斧湖战役之后的5rnm
  9. oracle 结果缓存,Result cache结果缓存
  10. Java二、八、十、十六进制介绍
  11. cacti批量添加脚本
  12. elk怎么读的_大数据采集和抽取怎么做?这篇文章终于说明白了!
  13. Android实现计算器布局(约束布局
  14. 三菱M70M700数控系统简明调试手册 PLC编程手册 设定手册
  15. 阿文PPT教程视频课程2019送PPT模板 我懂个P
  16. Windows DOS命令总结大全
  17. win7无法连接打印机拒绝访问_win7添加打印机提示windows无法连接到打印机怎么解决...
  18. 如何解决md打不开问题?
  19. Firefox 实用插件
  20. jzxx1099 2的100次方

热门文章

  1. 第一次ActiveX Fuzzing测试
  2. 【原创】oracle的tpc-c测试及方法
  3. 浅析调用android的content provider(一)
  4. 小白学数据分析-----数据指标 累计用户数的使用
  5. 生成简单的Makefile文件(Python实现)
  6. 长大了,也弄丢了很多东西
  7. 马上工作了,想问下要注意哪些问题?
  8. VMware 下Linux无法上网 新增支持WIFI方式 无线连接
  9. python输出进度条 tqdm_python-tqdm进度条
  10. LeetCode 1943. 描述绘画结果(差分思想)