神经架构搜索在视频理解中研究进展的综述
作者 | Michael S. Ryoo 研究员与 AJ Piergiovanni 学生研究员(Google 机器人团队)
来源 | TensorFlow(ID:TensorFlow_official)
视频理解一直是项颇具挑战性的难题。视频中包含时空数据,因此要提取特征表示需要同时提取其表面信息与包含的动作信息。无论是对视频语义内容的自动理解(如网络视频分类或体育运动识别),还是对机器人的感知和学习而言(与人类一样,机器人摄像头的输入信息大多是连续的动态视频,少为单张静态的照片),这都至关重要。
深度学习模型的能力非常依赖于其神经架构。用于处理视频的卷积神经网络的常见构建方法是将现有的 2D 架构(例如 Inception 和 ResNet)手动扩展为 3D,或者精心设计融合表面信息和动作信息的双流卷积神经网络架构 (two-stream CNN architectures)。不过,我们仍在探索如何设计出可充分利用视频中时空信息的理想视频架构。虽然我们对用于图像的神经架构搜索已进行了广泛的研究(如 Zoph 等人的研究、Real 等人的研究),但用于视频的神经架构搜索仍缺乏研究,即尚未开发出机器自动优化架构的视频处理神经网络。处理视频的卷积神经网络 (Video CNNs) 的构建通常需要大量计算和内存资源,因此很难设计一种既能高效搜索又可捕获其特征的方法。
为应对这些挑战,我们对自动搜索进行了一系列研究,旨在探索更理想的神经网络架构,从而实现视频理解。下文我们将展示三种不同的神经网络架构进化算法:学习层及其模块配置 (EvaNet);学习多流连接 (AssembleNet);构建计算高效的紧凑网络 (TinyVideoNet)。我们开发的视频架构在多个公开的数据集上的性能远胜现有的人工模型,并在网络运行时实现了 10 至 100 倍的性能提升。
EvaNet:首个进化的视频架构
EvaNet 是我们在构建视频架构上的首次尝试(详情请参阅我们在 ICCV 2019 上发表的《进化用于视频的时空神经架构》(Evolving Space-Time Neural Architectures for Videos))。
EvaNet 是一种模块级架构搜索,侧重于寻找时空卷积层的类型,及其最优顺序或最优并行配置。此搜索采用带有变异算子的进化算法,以迭代更新架构群。如此一来,我们可以更高效地对搜索空间进行并行搜索,而这正是视频架构搜索在考虑各种时空层及其组合时所必需的条件。EvaNet 可演化成多个模块(在网络中的不同位置),进而生成不同架构。
实验结果证明,通过进化异构模块获得此类 Video CNN 架构具有诸多优点。该方法证明,由多个并行层组成的 Non-Trivial Modules 最高效,因为它们速度更快,展现出更胜于人工设计模块的性能。
另一个有趣的方面是,我们在进化中获得了许多性能同样出色的不同架构,无需额外计算。如果集成这些架构,我们可以进一步提升性能。由于架构的并行性质,使得即便是一个模型集合,其计算效率也要高于其他标准的视频网络(例如 (2+1)D ResNet)。我们已开放此项目的源代码。
各类 EvaNet 架构的示例图:每个着色框(不论大小)均表示一个层,框的颜色对应其类型:3D 卷积(蓝色)、(2+1)D 卷积(橙色)、iTGM(绿色)、最大池化(灰色)、平均(紫色)和 1x1 卷积(粉色)。通常通过对层进行分组来形成模块(较大框)。每个框中的数字表示过滤器大小。
AssembleNet:构建更强大、更出色的(多流)模型
在《AssembleNet:在视频架构中搜索多流神经连接》(AssembleNet: Searching for Multi-Stream Neural Connectivity in Video Architectures)中,我们研究了一种新方法,针对不同的子网络和输入模态(例如 RGB 和光流)及时间分辨率进行融合。
AssembleNet 是一种会学习的架构,因此可提供通用方法来学习不同模态特征表示输入间的“连接”,并针对目标任务进行优化。我们引入了一种综合机制,能够将多种形式的多流卷积神经网络表示为有向图并结合高效的进化算法,进而探索高层网络连接。通过视频中的表面信息和动作的视觉线索更好的学习特征表示。
不同于先前使用 Late Fusion 或 Fixed Intermediate Fusion 的双流模型,AssembleNet 在通过连接权重学习指导架构变异的同时,进化出众多过连接的、多流的、多分辨率架构。我们首次研究了带有不同中间连接的四流架构,其中有 RGB 流和视觉流这 2 种流,而每种流的时间分辨率均各不相同。
通过对随机初始多流架构池经过 50 至 150 轮的进化,我们发现了下图所示的 AssembleNet 架构示例。我们在两个非常流行的视频识别数据集(Charades 和 Moments-in-Time (MiT))上测试了 AssembleNet。该架构首次在 MiT 的性能上超过 34%。而在 Charades 的性能上更令人吃惊,平均精度 (mean Average Precision) 为 58.6%,这一数据超过了先前已知的最佳结果(42.5 和 45.2)。
使用 MiT 数据集演化的 AssembleNet 模型:每个节点对应一个时空卷积层块,而每个箭头代表卷积层的连接。箭头颜色越深,表示连接越强。AssembleNet 是一种可学习的多流架构,可针对目标任务进行优化
AssembleNet 与主流人工设计模型对比图(左侧使用 Charades 数据集,右侧使用 MiT 数据集)。AssembleNet-50 或 AssembleNet-101 与双流 ResNet-50 或 ResNet-101 拥有相同数量的参数。
Tiny Video Network:速度最快的视频理解网络
为了使 Video CNN 模型适合运行于现实环境(如机器人需要的环境)中的设备,我们必须拥有实时高效的计算。
不过,如要在处理视频理解任务时获得最佳 (state-of-the-art, SOTA) 结果,我们还需要应用许多输入帧的超大型网络,这些网络通常拥有数十到数百个卷积层。因此,这些网络经常受到运行太慢的影响,具体表现为:在现代 GPU 和 CPU 上,每运行 1 秒视频剪辑至少分别需要 500 多毫秒和 2000 多毫秒。在 Tiny Video Network 中,我们通过自动设计网络,以一小部分计算成本提供同等性能,进而解决了此问题。我们的 TinyVideoNet 可提供更高的精度,并且能更快速甚至实时地高效运行,具体表现为:在GPU 和 CPU 上,每运行约 1 秒的视频剪辑分别用时 10 毫秒和 37 至 100 毫秒,此结果比人工设计的现代模型快了数百倍。
为实现上述性能提升,我们在架构进化过程中明确考虑模型运行时间并强制算法搜索空间,同时加入空间或时间分辨率和通道大小,从而减少计算量。下图展示了通过 TinyVideoNet 发现的两种简单且十分高效的架构。有趣的是,通过学习获得的模型架构比典型的视频架构拥有更少的卷积层:Tiny Video Network 更喜欢轻量级元素,例如 2D pooling、Gating Layers和 Squeeze-and-Excitation Layers。此外,TinyVideoNet 还能够结合优化参数和运行时,从而提供用于未来网络探索的高效网络。
图:TVN-1架构(上) TVN-2架构(下)
进化后,TinyVideoNet (TVN) 架构可以在最大限度提升识别性能的时候,同时保证计算时间不超过期望限制。例如,TVN-1运行在 CPU 和 GPU 上所需的时间分别为 37 毫秒和 10 毫秒。TVN-2运行在 CPU 和 GPU 上所需的时间分别为 65 毫秒和 13 毫秒。
TinyVideoNet 模型与先前模型的 CPU 运行时对比(左图),以及 TinyVideoNet 与 (2+1)D ResNet 模型的运行时和模型精度对比(右图)。请注意,TinyVideoNet 提取的是此时间精度空间中不存在其他模型的一部分(即极速但仍精确的部分)。
结论
据我们所知,这是业界将神经架构搜索应用于视频理解的首次研究。我们在处理公共数据集时,使用全新进化算法生成的视频架构对比人工设计卷积神经网络架构有显著优势。此外,我们还可利用架构进化学习的视频模型 TinyVideoNet。这项研究不但为我们开辟了全新方向,并展示出用于视频理解的机器进化卷积神经网络的广阔前景。
本研究由 Michael S. Ryoo、AJ Piergiovanni 和 Anelia Angelova 共同完成。此外,Alex Toshev 和 Mingxing Tan 也对本研究做出了贡献。感谢 Vincent Vanhoucke、Juhana Kangaspunta、Esteban Real、Ping Yu 和 Sarah Sirajuddin 以及 Google 机器人团队积极参与讨论,并为我们提供支持。
如果您想详细了解 本文提及 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:
Inception
https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Szegedy_Rethinking_the_Inception_CVPR_2016_paper.pdfResNet
https://arxiv.org/abs/1512.03385Zoph 等人的研究
https://ai.googleblog.com/2017/05/using-machine-learning-to-explore.htmlReal 等人的研究
https://ai.googleblog.com/2018/03/using-evolutionary-automl-to-discover.htmlEvaNet
https://arxiv.org/abs/1811.10636AssembleNet
https://arxiv.org/abs/1905.13209TinyVideoNet
https://arxiv.org/abs/1910.06961ICCV 2019
http://iccv2019.thecvf.com/《进化用于视频的时空神经架构》
https://arxiv.org/abs/1811.10636进化算法
https://ai.googleblog.com/2018/03/using-evolutionary-automl-to-discover.html(2+1)D
https://arxiv.org/abs/1711.11248项目源代码
https://github.com/google-research/google-research/tree/master/evanet《AssembleNet:在视频架构中搜索多流神经连接》
https://arxiv.org/abs/1905.13209双流模型
https://arxiv.org/abs/1406.2199连接权重学习
https://arxiv.org/pdf/1905.13209.pdfCharades
https://allenai.org/plato/charades/Moments-in-Time
http://moments.csail.mit.edu/Tiny Video Network
https://arxiv.org/abs/1910.06961Squeeze-and-Excitation
https://arxiv.org/abs/1709.01507
【End】
(*本文为AI科技大本营转载文章,转载请联系作者)
◆
精彩公开课
◆
推荐阅读
2020大数据十大趋势发布!华为、阿里、滴滴、百度、京东、讯飞等顶尖专家齐聚BDTC
多模态人物识别技术及其在爱奇艺视频场景中的应用 | 公开课笔记
远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术
微软张若非:搜索引擎和广告系统,那些你所不知的AI落地技术
激辩:机器究竟能否理解常识?
Instagram个性化推荐工程中三个关键技术是什么?
从YARN迁移到k8s,滴滴机器学习平台二次开发是这样做的
华为将正式起诉美国联邦通信委员会;谷歌技术故障导致美国三大航空公司网站短暂宕机;英特尔拟20亿美元买以色列AI芯片公司……
2020年,区块链开发者还有哪些期待?
你点的每个“在看”,我都认真当成了AI
相关文章:

Java命令模式
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令…

关于本分类(codeforces-好题系列)
前前后后花了将近半个月,终于将吴神的十场cf的50题目补完了,看到了各种技巧和DP的好题,为了方便以后查阅,新增一个分类便于查找,当然本分类的题目其他分类一般都有,先去吃个饭,回来刷题解转载于…

Conan客户端简单使用示例
在https://blog.csdn.net/fengbingchun/article/details/118443862 中对Conan进行了简单介绍,这里调用openssl的接口,写一个简单的test来说明Conan的使用步骤: (1).首先添加一个conanfile.txt文件,内容如下:依赖项为op…

Java解释器模式
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 意图:给定一个语言&…
为什么鲜有炫富的程序员?看看中国各阶级收入统计表
网上那些口口声声随随便便就能年入百万的,听听就行。作为开发者,可以不参加双11,但是花钱最多的地方就是买电子产品和“买课”。他们的炫富就是:你根本不知道有多贵的机械键盘,为了赚钱和幸福,又买了多少大…

HQL中的Like查询需要注意的地方
public List getOrgan(String organCode, String organName) { String hsql; List list; if (organCode ! null && organCode.length() > 0) { hsql "from Ab31 where bae002 ? and aab061 like ?"; list getHibernateTemplate().find…

深度神经网络中的Batch Normalization介绍及实现
之前在经典网络DenseNet介绍_fengbingchun的博客-CSDN博客_densenet中介绍DenseNet时,网络中会有BN层,即Batch Normalization,在每个Dense Block中都会有BN参与运算,下面对BN进行介绍并给出C和PyTorch实现。 Batch Normalization即…
韬光养晦的Sony AI,凭什么与Google和Facebook平起平坐?
作者 | 藏狐来源 | 脑极体(ID:unity007)伴随着感恩节气氛的日渐浓重,面对只剩下最后一个月份额的2019,奋进的、错失的,都已尘埃落定,是时候迎来盘点得失、清理思绪的冬藏时节了。整体来看&#…

Java迭代器模式
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 意图:提供一种方法顺序访问一个聚合对象中各个元…

Linux下搭建高效的SVN
第一种安装方式:svn下载:http://archive.apache.org/dist/subversion/需要的包yum install gcc gcc-cyum install expat-develyum install openssl-develhttp://labs.renren.com/apache-mirror//httpd/httpd-2.2.22.tar.gz //最好用2.2版本http://subver…

通过Windows10上的VS Code打开远端Ubuntu上的项目操作步骤
Ubuntu版本要求是16.04及以上版本。这里以16.04为例。 在Ubuntu上安装OpenSSH server,执行:$ sudo apt-get install openssh-server 在Windows 10 1803上安装Windows OpenSSH Client(注:Windows早期版本则需要安装Git for Windows)࿱…

Java中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 意图:用一个中…
那些打着AI万金油旗号的产品欺骗大众,如何识别?
作者 | Arvind Narayanan译者 | 刘畅出品 | AI科技大本营(ID:rgznai100)如今,很多打着AI名号售出的产品都属于万金油系列,没什么实质性的功能。为什么会这样?我们应该如何识别这类AI?幻灯片上是评估性格和工…
分享一款jQuery全屏滚动页面特性案例
分享一款jQuery全屏滚动页面特性案例。我们在来往官网,或者小米官网都会看到全屏滚动页面的一些例子。可以说全屏滚动页面越来越受欢迎。它们就像是竖着的图片轮转一样。这样的页面有很多,如:iPhone 5C页面:http://www.dowebok.co…
后深度学习时代的一大研究热点?论因果关系及其构建思路
作者 | Bernhard Schlkopf译者 | Kolen编辑 | Jane出品 | AI科技大本营(ID:rgznai100)尽管机器学习在现阶段取得了很大成功,但是相比于动物所能完成的工作,机器学习在动物擅长的关键技术上表现不尽人意,比如…

Java观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 意图:定义对象间的一种一对多的依赖关系,当一…

Python3中None用法
1.None是一个空值,空值是Python里的一个特殊值,用None表示。可以将None赋值给任何变量。 var None; print(var) # None if var is None:print("var has a value of None") # print else:print("var:", var) 2.None有自己的数据类型…

try finally 中的return
2019独角兽企业重金招聘Python工程师标准>>> public class Test { public static int test1() { int x 1; try { return x; } finally { x; } } public static int test2() { int x 1; try { return x; } finally { return x; } } public st…
我用Python破解了同事的加密压缩包
作者 | 朱小五来源 | 凹凸玩数据(ID: alltodata)又是一杯奶茶。事情的经过是这样的:又是奶茶,行吧行吧。快点开工,争取李大伟回来之前搞定。李大伟说是6位数字密码那么我们可以利用python生成全部的六位数字密码#生成从…

Ubuntu上通过android toolchain交叉编译Valgrind操作步骤
关于Valgrind的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/50196189. 这里介绍下在Ubuntu 16.04上通过android toolchain如android-ndk-r14b交叉编译Valgrind源码的操作步骤: 1. 从 https://valgrind.org/ 下载最新的版本3.17.0&…

Java状态模式
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 意图:允许对象在内部…

Red Hat 5.8 CentOS 6.5 共用 输入法
pick up from http://jingyan.baidu.com/article/20b68a885a3607796cec622c.html

Python3中with用法
Python中的with语句用于用上下文管理器(context manager)定义的方法包装块的执行,它允许将常见的try…except…finally使用模式封装起来以方便重用。 在Python中,在处理非托管资源(unmanaged resources)(如文件流)时使用with关键字。它允许确保你在使用资…
作为计算机专业的你,这些点你命中了哪些?
是不是学计算机的在别人眼里就得会修电脑?是不是编代码的程序员在别人眼里就得喜欢穿格子衫?是不是从事互联网行业的人在别人眼里就喜欢背双肩包出行?1我学计算机就得会修电脑?前两天我在加班的时候,电话突然响起&…

Java空对象模式
在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。 在空对象模式中,我们…

JSON入门基础知识
2019独角兽企业重金招聘Python工程师标准>>> JSON入门基础 1、JSON定义 JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易…

Python3中raise用法
Python中raise语句支持强制触发指定的异常。 raise语法: raise [EXPRESSION [from EXPRESSION]] 如果raise后未跟表达式(expression),则raise重新引发当前作用域中活动的最后一个异常。如果当前范围内没有异常处于活动状态,则会引发RuntimeE…
精选实践 | 爱奇艺实用数据库选型树:不同场景如何快速选择数据库?
作者 | 郭磊涛 爱奇艺数据库和中间件负责人 TiDB User Group Ambassador来源 | 授权转载自AskTUG本文系 TUG 线下活动 “不同业务场景下的数据库技术选型思路” 分享实录。我是爱奇艺的数据库和中间件负责人郭磊涛,今天主要向大家分享数据库选型方面的思路ÿ…

iOS处理高并发量的数据请求和数据集合的对应关系
一、处理高并发请求的核心代码如下: // 创建信号量dispatch_semaphore_t semaphore dispatch_semaphore_create(0);// 创建全局并行dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_group_t group dispatch_gro…
Top 10 Mistakes Java Developers Make(转)
文章列出了Java开发者最常犯的是个错误。 1.将数组转换为ArrayList 为了将数组转换为ArrayList,开发者经常会这样做: ?1List<String> list Arrays.asList(arr);Arrays.asList()会返回一个ArrayList,但这个ArrayList是Arrays的私有静态…