《Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset》概述

2024-02-06 10:40

本文主要是介绍《Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset》概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset》概述


引言:

最近阅读了本篇论文,这是一篇发表在CVPR’17年的文章,总体上的贡献在于发布了一个新的数据集以及对3D卷积+Two-Stream方法的结合形成一个新的网络架构(I3D),以下是对本篇论文的概述,如有错误,欢迎留言指正。


一、主要贡献:
  1. 公布了新的Human Action Video 数据:Kinetics,它有400个人类动作类以及每个类超过400个片段,收集自现实的、具有挑战性的YouTube视频;
  2. 作者提供了一项分析,说明当前的体系结构在此数据集的操作分类任务中进展如何,以及在进行Kinetics预训练后,在较小的基准数据集(HMDB-51 and UCF-101)上的性能改进了多少;
  3. 提出来一个新的模型结构 Two-Stream Inflated 3D ConvNet (I3D) ,就是将标准的Two-Stream中的卷积核变为3D卷积;

作者在文中提到了该领域现存在的一些问题:

  1. 现有的数据集太小,限制了视频动作识别的发展;
  2. 对于构建网络架构还不太明确:
    • 卷积核是使用2D还是3D的卷积核;
    • 网络的输入是原始RGB视频还是包括计算得到的光流信息;
    • 在2D ConvNet的情况下,又如何利用LSTM或者时间上的特征融合来做到跨帧传播信息。

二、经典的网络架构:

作者列举了几种比较经典的网络架构,并在新的数据Kinetics上进行预训练观察他们的性能如何,以及和作者提出的I3D架构进行比较,下图为作者提出的网络架构模型:

2.1 实验策略:

作者以一个普通的ImageNet预先训练的图像分类体系结构作为骨干(除了C3D),选择了带批归一化的Inception-v1,并以不同的方式对其进行变形。

2.2 模型介绍:

ConvNet+LSTM:

  • 由于ConvNet结构在图片分类中表现的效果很好,因此有很多实验将其用在了视频分类中。这种方法能够独立的从每一帧中提取特征,然后综合这些特帧得到一个视频级别的特征描述;
  • 虽然这在 实验中使用方便,但却完全忽略了时间结构的问题;
  • 因此为了解决这一问题,通常ConvNet中添加LSTM,以此来捕获各帧之间的时间信息;

模型细节:

把一个包含512个隐含节点的LSTM 层以及BN放在Inception v1的最后一个average pooling层后面(即分类器之前),最后跟的是一个用于分类的全连接层;输入帧是在25帧/s的视频流中每5帧取1帧。

3D ConvNets:

  • 它们有一个非常重要的特点:直接创建时空数据的层次表示;
  • 但是由于额外添加的维度,它们比起2D卷积有更多的参数,这就使得3D卷积很难去训练;
  • 由于使用的是三维的卷积核,无法直接用在ImageNet上预训练过的网络。

模型细节:

使用的是C3D模型的一个变种,8层卷积、5层pooling、2层全连接。与C3D的区别在于这里的卷积和全连接层后面加BN;且在第一个pooling层使用stride=2,这样使得batch_size可以更大。输入是16帧,每帧112*112。

Two-Stream Networks:

  • LSTMs可以捕获对高层变化,但可能无法捕捉精细的低层运动,这在许多情况下是至关重要的。并且训练代价很大,因为因为它需要通过多个帧展开网络以进行时间反向传播;
  • 而Two-stream从不同的角度解决了这个问题:一路是RGB帧作为输入,捕捉空间变化信息,另一路是光学作为输入,捕捉时间变化信息。这样就对时间和空间的信息提取都比较好;
  • 图(c): 取一帧图像预测的结果与光学流图像预测的结果取平均;
  • 图(d): 是在图(c)基础上的一种扩展,通过一个3D ConvNet对多帧的信息进行融合,取到两个Stream的最后一个average pooling层的输出,作为3D ConvNet部分的输入;

模型细节:

网络的输入是相隔10帧采样的5个连续RGB帧以及相应的光流片段。在Inception-V1最后一个average pooling 之前,使用512个 3x3x3 的卷积核,然后是一个 3x3x3 的max-pooling,最后是一个全连接层;

The New: Two-Stream Inflated 3D ConvNets:

3DConvNet可以直接从RGB流中学习时间模式,但通过包含光流的使用仍然可以极大地提高其性能,因此作者采用了Two-Stream+3D ConvNet的方式

  • 把2D模型转化成3D模型结构,即把所有卷积核增加一个维度,拓展为 T T Tx N N Nx N N N;
  • Bootstrapping 3D filters from 2D Filters:为了能够使用在ImageNet上预训练的权重值来初始化网络,作者通过一张图片复制 N N N次,这样就形成了一个N帧的视频,然后就可以在使用3D卷积核的网络上预训练了,最后为使得激活函数值和在2D卷积上训练单张图片保持一致,通常要将卷积计算所得的值都除以 N N N,就得到和2D卷积上一样的激活函数值了,下图来源自简书,可以参考下;
  • Pacing receptive field growth in space, time and network depth :在时间维度上的感受野要如何变化,即Conv和Pooling的stride怎么选;这两个都是影响feature receptive field的主要因素
    • 在Image模型中,对待水平和垂直两个空间维度往往是一致的,也就是两个维度上pooling核大小以及stride都一样;
    • 在时间维度上这样的对称对待未必是最优的(也就是时间维度上的pooling核大小选与空间上的一致是不可取的),因为这取决于帧率和图像大小之间的相对值
    • 因此本文在将Inceptin-V1扩充的时候,并不是简单的做对称维度,扩充后的Inception-V1模型结构如下所示:

可以看到原来的Inception-v1结构中的convolution以及pool全部都成了3D的;并且结构中大多数kernels和strides保持了对称的特征,例如第一个(7,7)变成(7,7,7),stride也由原来的(2,2)变成了(2,2,2)但是少数做了改变,比如前面的两个max-pool,并不是(2,2,2),而是(1,2,2)这样能够更好的保留时间信息;还有最后的这个avg-pool,并不是(7,7,7)而是(2,7,7)。



最后就是作者给出了一些实验细节,以及实验结果对比,感兴趣的话可以阅读原文。

参考文章:
https://blog.csdn.net/Gavinmiaoc/article/details/81208997
https://www.jianshu.com/p/196ff61d6631

这篇关于《Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset》概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684054

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)

1、MVC MVC(Model-View-Controller) 是一种常用的架构模式,用于分离应用程序的逻辑、数据和展示。它通过三个核心组件(模型、视图和控制器)将应用程序的业务逻辑与用户界面隔离,促进代码的可维护性、可扩展性和模块化。在 MVC 模式中,各组件可以与多种设计模式结合使用,以增强灵活性和可维护性。以下是 MVC 各组件与常见设计模式的关系和作用: 1. Model(模型)

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

Unable to instantiate Action, goodsTypeAction, defined for 'goodsType_findAdvanced' in namespace '/

报错: Unable to instantiate Action, goodsTypeAction,  defined for 'goodsType_findAdvanced' in namespace '/'goodsTypeAction......... Caused by: java.lang.ClassNotFoundException: goodsTypeAction.......

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储