点击我爱计算机视觉标星,更快获取CVML新技术


本文作者为52CV群友彭伟,现就读奥卢大学(芬兰) 博士二年级。

Github:https://github.com/xiaoiker

知乎:https://www.zhihu.com/people/ikerpeng

本文介绍被AAAI 2020录用的论文 Learning Graph Convolutional Network for Skeleton-based Human Action Recognition by Neural Searching,第一个使用神经架构搜索(NAS)设计图卷积网络(GCN)的工作,用于基于skeleton的人体动作识别中,在当前最大的两个数据集中达到目前最高的精度。代码将开源。

动作识别(Action recognition) 是计算机视觉领域中一个非常热门的研究话题。它具有很多有价值的应用,例如 安全监控,行为分析, 以及人机交互等等。

但是,这个研究课题同时也是一个很有挑战的问题,尤其是对于背景极其复杂,或是存在遮挡的情况。

Skeleton 数据的出现,很大程度上解决了这一类的问题。Skeleton数据当中包含和运动直接相关的信息,对背景具有更好的鲁棒性,同时也能够有效的改善遮挡以及自遮挡的问题。

因此,基于skeleton数据的动作识别也是一个非常具有吸引力的研究课题。

但是对于skeleton这种不规则的具有图结构的数据,相对于image或者是video这种规整数据,使用经典的CNN 等神经网络进行特征提取就要困难很多了。

但是,从2018年起,不断出现使用图卷积(Graph Convolutional Networks,GCN)来处理这个问题的工作。 基于前面的工作,本文也是想要通过改善GCN来进一步的提升基于骨架信息的动作识别的性能。

虽然GCN极大的提高了动作识别的性能, 但是还是存在很多需要改进的地方。这里我们主要从以下的两个方面去改善现有的GCN。

首先, 在这个任务当中大多数的GCN都是提供一个固定的矩阵(Embedding Matrix, EM)来编码数据节点之间的邻接关系,并且这个矩阵从第一层到最后一层一直都用。

其次,在这个任务上,大部分的GCN都是基于ICLR2017 Max [2]他们的工作做的。也就是说这一类的GCN都是通过一阶的 切比雪夫多项式(Chebshev polynomial)进行估计的。

而我们认为,将高层的特征表示限制是底层的拓扑结构当中是不合理的一种做法。此外,一阶的多项式估计并不能很好的捕捉到高阶的邻接关系。

图1. 我们设计的8种EM生成的模块。

下面三种根据特征表示进行投影,然后通过自相关矩阵得到。上面五个表示各个阶数的切比雪夫多项式

那么如何根据各个网络层的特点提供自动的EM,以及如何提供更加高阶的EM就是本文要解决的问题了。我们一个一个问题来看。

首先, 如何提供一种自动化的EM生成机制。实际上,在CVPR2019的一篇工作[1]当中,已经提出了一种自适应生成EM的方式。 但是在此工作当中,他们对每一层都采用同样的机制来自动的构建这个矩阵,而并没有去探究不同的生成机制,也没有探讨不同的层是否应该采用相同的矩阵的生成机制。基于此,我们提出了三种动态生成此EM的方式。基本的原理就是通过求解某一层 的特征表示的自相关矩阵,归一化此矩阵用作EM矩阵。但是,在求解该矩阵之前,对该层的特征表示先进行了投影以抽取和该矩阵更加相关的一种特征表示。 而此处我们设计的三种EM的生成模块就是根据三种不同的投影方式构造的。具体如图1的下半部分当中的三个模块。

其次,我们来看如何捕捉更加高阶的图节点关系。 其实,很简单。当前的GCN不能够很好的捕捉到该信息,是因为GCN采用的乃是一阶的切比雪夫多项式进行估计的。 那么我们只需要引入高阶的切比雪夫多项式就可以捕捉到这种信息。 然而新的问题是,各层都应该采用高阶的多项式估计吗? 这显然会增加计算量,同时我们也不确定是不是每一层都要这样做。因为,我们知道通过网络的堆叠实际上是类似于增大了网络的感受野,因此也可以捕捉到高阶的节点关系。此外,多项式当中的每一项的贡献是一样的吗?可以减少吗?带着这样的疑问,我们构建了一个四阶的多项式,然后对于最高阶的输出还做一个规范化。并且我们将这总共五个部分,作为五个模块来生成不同阶数的矩阵。

因此,对于每一GCN层来讲,如图1所示,都有8种生成一个EM矩阵的方式可供选择。同时处在不同层级的特征表示的抽象程度不一样,因此我们认为应该提供一种layer-wise的 解决方案。显然,这将会有8的十次方(由于在这个任务当中通常会有10个GCN层)这么多种可能。通过手工的调节和寻找显然是不行的。因此,我们借助于自动网络搜索(NAS)的方式来解决这个问题。

具体来讲,我们将这里设计的8种功能模块作为NAS搜索空间当中的8种操作子,也就是将其看作是一个类似于卷积核一样的操作,然后基于这8个功能模块,构建一个搜索空间。类似于著名的NAS算法DARTS [3],我们可以将所有的功能模块放到每一层,然后给每一个功能模块赋一个权重,将该权重看作是待搜索的网络的架构。然后, 基于此交替的在训练的数据集上面训练这个超级网络,在验证集上面更新架构的参数。最终得到一个性能最优的结构就可以了。

但是DARTS这种基于梯度的算法最大的问题就是耗内存,你需要在每一个时刻把架构所有的模块放到内存当中。但是,在我们的任务当中,我们并不想像图像识别当中NAS一样,在一个小的数据集(CIFAR10)上面搜索,然后到自己的目标数据集上面去训练。这种操作有几个问题:1.会引入domain shift的问题(你怎么知道在小数据集上面好使,在大的上面就好使啊?),2. 在自己的任务上不一定存在一个合适的代理数据集(proxy dataset),类似于CIFAR10。在我们这个任务说我们想直接在目标任务数据集上搜索,而不在额外的花精力去构建一个合理的代理数据集。

如此,基于以上的搜索空间,我们想同时提出一种内存高效的搜索算法。这种算法,他不局限于一个连续的搜索空间,当你有足够的卡的时候可以全部模块都激活,当你没有的时候,只激活其中的一个。因此,我们选择了一种不是基于梯度的搜索算法,其实是一种基于采样的演化算法策略。但是,一般的演化算法效率都非常的低,因此我们使用的是一种高效采样的演化策略。

具体来讲,我们算法叫做CEIM:Cross-Entropy method with Importance-Mixing. 这种搜索算法通过一种分布(这里高斯分布)来建模待搜索架构的分布,然后通过更新这个分布来更新架构搜索的过程。于此同时,该算法通过混合当前迭代和上一次迭代的样本来提高采样的效率。具体的步骤如下图:

CEIM算法的示意图

总的来讲, 在CEIM算法当中,主要有四个步骤。

首先,对架构参数用高斯分布建模;

接下来,从架构的分布当中采样一组样本(New samples),并且和上一轮迭代当中的样本共同组成候选的样本;

然后,通过这些样本在当前分布以及在上一个迭代的分布当中的概率密度进行选择,采样一组样本(Importance-Mixing);

最后,计算每一个样本的性能表现,由此对这一组样本分配不同的权重,然后加权来更新架构的分布。

由于该算法是基于采样的一种算法,不需要对架构的参数进行求导。因此,在更新网络的过程中,完全可以通过多项式采样的方式只激活部分的架构,通过这种方式来减少内存的消耗。

具体的算法如下:

OK这就是本文的核心思想,一些具体的细节可以参考文章。

这里,我们来看一些实验结果。实验中使用的数据集是当前最大规模的两个数据集,一个是NTU-RGB D,另一个是Kinetics-Skeleton(这个是用Open Pose提的)。

首先,我们来看一下搜索的结果。这里我们保留了权重大于0.1的模块。

这里我们可以发现,的确在不同的层GCN倾向于使用不同的EM的生成方式。我们看最右边的三列,我们发现在底层的时候,由于特征还比较低层GCN更喜欢使用更多的模块来生成这个矩阵。

同时我们还发现,基于空间信息的投影主要出现在较底层的GCN,而基于时间的卷积投影却出现在了每一层,甚至在高层的时候只出现了后者。然后,我们再来看高阶的估计(左边的5列),我们会发现二阶的估计在中间的几层出现。然后到了最后一层,实际上是不需要任何一种多项式估计的。同时,我们还发现,原始的(手动设计的)矩阵并没有在任何一层被选中,这个给了我们一些在设计GCN时候的新启发。

接下来我们看一下性能方面的比较。

首先是Ablation study相关的实验(Table 2)。我们想验证我们采用这种方式的有效性。这部分的实验是在 NTU-RGB D数据集上的Corss-View 测评下进行的。

我们将本文当中设计的模块,手动的加到GCN网络当中。我们发现,他们几乎都能够提升baseline的表现,这证明我们设计的模块是合理的。

同时,我们也发现,将所有的模块同时添加到GCN当中并不能保证得到最好的性能。这也证明了通过NAS进行自动设计的必要性。我们可以从最终的结果发现,使用我们的NAS算法,可以得到最好的性能,几乎都能够得到1%左右的提升。

最后, 我们在这两个数据集上面和当前的State-of-the-art 方法进行比较。结果如下Table3 4,在不同的测试协议和不同的数据库上面,我们都能够得到当前最好的性能。

结论

我们这篇文章应该是第一个尝试采用NAS来设计GCN的工作吧(据我所知)。由于GCN并没有很多的算子(operations),并且这个EM矩阵对于GCN来说更加的重要。因此,我们尝试设计一系列的EM生成模块,然后基于这些模块来构建一个NAS的搜索空间。

同时,我们也为这个搜索空间提出一种新的,基于高效的演化策略的搜索算法。最终,我们在动作识别上,通过搜索得到一个最优的架构,同时在当前最大的两个数据集上面得到最好的性能。

论文地址:

https://arxiv.org/abs/1911.04131

代码地址:

https://github.com/xiaoiker/GCN-NAS

在我爱计算机视觉公众号后台回复“GCN-NAS”,即可收到论文国内下载地址。

[1] Two-stream adaptive graph convolutional networks for skeleton-based action recognition. CVPR2019.

[2] Semi-supervised classification with graph convolutional networks. ICLR2019.

[3] Darts: Differentiable architecture search. ICLR2019.


技术交流学习群

本文中涉及的GCN、NAS、人体动作识别,52CV均已有相关的技术交流群,扫码添加CV君拉你入群,如已为CV君其他账号好友请直接私信,

(请务必注明方向:GCN、NAS 或者 动作)

喜欢在QQ交流的童鞋可以加52CV官方QQ群:805388940。

(不会时时在线,如果没能及时通过还请见谅)


长按关注我爱计算机视觉

AAAI 2020 | 首个使用 NAS 设计的 GCN,达到动作识别SOTA,代码将开源相关推荐

  1. ECCV 2020 | 空间-角度信息交互的光场图像超分辨,性能优异代码已开源

    光场相机可以记录当前场景不同视角的图像,每个视角图像的上下文信息(空间信息)与不同视角之间的互补信息(角度信息)都有助于提升图像超分辨的性能. 近日,来自国防科技大学.上海科技大学等单位的学者提出了新 ...

  2. DualVD:借鉴认知双向编码理论,提出视觉对话新框架 | AAAI 2020

    2019-12-28 05:44:24 作者 | 蒋萧泽 责编 | Camel 论文标题:DualVD: An Adaptive Dual Encoding Model for Deep Visual ...

  3. AAAI 2020 | NAS+目标检测:AI设计的目标检测模型长啥样?

    ©PaperWeekly 原创 · 作者|刘畅 学校|上海交通大学博士生 研究方向|计算机视觉 太长不看版 论文标题:SM-NAS: Structural-to-Modular Neural Arch ...

  4. 【AAAI 2020】NAS+目标检测:SM-NAS 论文解读

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 最近冒出来很多 Neural Network Search (NAS) + 目标检 ...

  5. 多任务学习,如何设计一个更好的参数共享机制?| AAAI 2020

    2019-12-26 05:44:43 作者 | 孙天祥 编辑 | 刘萍 原文标题:稀疏共享:当多任务学习遇见彩票假设 本文介绍了复旦大学邱锡鹏团队在AAAI 2020 上录用的一篇关于多任务学习的工 ...

  6. 时间可以是二维的?基于二维时间图的视频内容片段检测 | AAAI 2020

    作者 | 彭厚文.傅建龙 来源 | 微软研究院AI头条(ID: MSRAsia) 编者按:当时间从一维走向二维,时序信息处理问题中一种全新的建模思路由此产生.根据这种新思路及其产生的二维时间图概念,微 ...

  7. 清华姚班“斩获”AAAI 2020最佳学生论文:首届弟子贝小辉携手本科在读李子豪,攻坚算法博弈研究...

    本文经AI新媒体量子位(公众号ID:qbitai)授权转载,转载请联系出处 本文约1700字,建议阅读5分钟 江湖英雄辈出,又是姚班少年郎. 江湖英雄辈出,又是姚班少年郎. 第34届美国人工智能协会年 ...

  8. 清华华为发布“万词王”反向词典系统,入选AAAI 2020

    本文部分内容源自清华大学计算机系在读博士岂凡超在AI科技评论发布的:话到嘴边却忘了?这个模型能帮你 | AAAI 2020.会议之眼参考论文对模型框架.背景知识以及数据来源.评测部分进行了补充. 岂凡 ...

  9. AAAI 2020论文解读:商汤科技提出新弱监督目标检测框架

    来源 | Object Instance Mining for WeaklySupervised Object Detection 编辑 | Carol 出品 | AI科技大本营(ID:rgznai1 ...

最新文章

  1. 实践教程|如何用YOLOX训练自己的数据集?
  2. Spring Boot——基于spring-boot-starter-mail发送邮件的 Service 服务类DEMO
  3. html控制图的宽,用JointJS做一个简单的功能控制图
  4. linux 内核裁剪的具体过程和方法,Linux内核裁剪的具体过程和方法
  5. 求100~200间的所有素数
  6. 转帖一则——从医学角度论成熟
  7. C++网络编程实例2(socket)
  8. 计算机硬件检测与维修理论试题,计算机硬件检测与维修理论试卷(A卷)
  9. 云原生时代,分布式系统设计必备知识图谱(内含22个知识点)
  10. Gut Microbes:南医大刘星吟组-孤独症的基因变异与肠道微生物群、代谢物和细胞因子的改变有关...
  11. python做生物信息学分析_Python从零开始第五章生物信息学⑤生存分析(log-rank)
  12. PDF添加图片(图片透明)
  13. Cocos2dx中Lua游戏性能优化指南
  14. flac转mp3教程flac怎么转mp3才能减小音质的丢失
  15. GLSL 参考GIMP源码实现色彩平衡调节
  16. Java面向对象笔记 • 【第10章 Swing编程初级应用】
  17. 00 C++ UML类图详解
  18. 微信上的文件怎样用计算机打出来,微信上的文件传到电脑上怎么打印出来
  19. 【HTML 教程系列第 11 篇】HTML 中常用的文本格式化标签
  20. python-比较两个文件交集、并集、差集

热门文章

  1. 简单的字谜游戏--可扩展--2015年7月25日14:58:00V1.1版
  2. 【mac】vmware tools 在菜单上显示灰色无法安装的问题
  3. [gtest][001] A quick introduction to the Google C++ Testing Framework
  4. 查询工资最低的3名员工的职工工号、姓名和收入_工资条6个常识必须掌握,事关你的权益!...
  5. wsl用户帐户没有必要的权限_Windows的Linux子系统(WSL)即将带来图形化应用
  6. c语言递归求塔移动次数,c语言递归调用汉诺塔
  7. 华为matebook14会不会用鸿蒙,2020年用什么笔记本上网课?浅析华为MateBook 14 2020款...
  8. python中的zip是什么意思_python中zip是什么函数
  9. php识别字符编码,PHP自动识别字符集编码并完成转码_PHP教程
  10. windows2019迁移FSMO