18组-Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18组-Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset相关的知识,希望对你有一定的参考价值。

参考技术A Quo Vadis,行为识别?一个新的模型以及Kinetics数据集

摘要

在现有的的行为分类数据集(UCF-101 and HMDB-51)中,视频数据的缺乏使得确定一个好的视频结构很困难,大部分方法在小规模数据集上取得差不多的效果。这篇文章根据Kinetics人类行为动作来重新评估这些先进的结构。Kinetics有两个数量级的数据,400类人类行为,每一类有超过400剪辑,并且这些都是从现实的,有挑战性的YouTube视频中收集的。我们分析了现有的结构在这个数据集上进行行为分类任务的过程以及在Kinetics上预训练后是如何提高在小样本集上的表现。

我们引入了一个基于二维卷积膨胀网络的Two-Stream Inflated 三维卷积网络(I3D):深度图像分类卷积网络中的滤波器和pooling卷积核推广到了3D的情况,这样能够学到从视频中提取好的时空特征的能力,同时可以利用ImageNet结构的设计以及参数;我们发现在Kinetics上预训练之后,I3D模型在行为分类上提高了很多,在HMDB-51上达到了80.7%的正确率,在UCF-101上达到了98.0%的正确率。

1. 引言

从ImageNet挑战赛中获得的一个意想不到的好处就是在1000类图像(每一类有1000幅图像)训练的结果可以用到其他的任务上或者是其他的领域。一个早期的例子是用在ImageNet数据集上训练的网络,然后把训练出来的fc7特征用到PASCAL VOC分类和检测任务上。在深度网络上的改进,从AlexNet到VGG-16,在PASCAL

VOC上的表现都有相应的提升。从那之后,有大量从ImageNet上训练的网络然后充分用到其他任务上的例子,比如分割,深度预测,姿势估计,行为分类等等。

在视频领域,在一个充分大的数据集上训练一个行为分类应用到一个不同的任务上或者数据集上也会有一个相似的提高仍然是一个开放的问题。创建10000数量级的视频数据集的挑战意味着行为识别中最受欢迎的基准数据集很小。

在这篇文章中,我们用全新的Kinetics人类行为视频数据集来回答这个问题,这是一个比之前的HMDB-51和UCF-101数据集大两个数量级的数据集。Kinetics有400类人类行为,每一类有超过400个实例,并且每一类是来自一个YouTube视频。

我们的实验策略是重新实现文献中一些有代表性的神经网络,分析在Kinetics数据集上预训练每一个网络然后在HMDB-51和UCF-101数据集上微调的这种迁移行为。结果表明通过预训练后在性能上有很大的提升,但是不同类型网络上提升的程度相差很大。基于这些发现,我们提出了一种有能力利用在Kinetics数据集上预训练的优势的模型,并且能实现一个很好的性能。这个模型叫“Two-Stream

Inflated 3D ConvNets”(I3D),建立在先进的图像分类网络结构上,但是把他们的滤波器以及pooling核(参数随意)“膨胀”成了3D,成为了一个很深,时空上的分类器。I3D模型基于Inception-V1,在Kinetics上预训练之后的性能远远超过当今最先进的其他模型。

在我们的模型比较中,我们不考虑更多的比如bag-of-visual-words表示的经典方法。然而,Kinetics数据集是可以公开获得的,其他人也可以用它来做一些比较。

下一节概述已有的一些行为分类模型。第三节概述Kinetics数据集,第四节报告在之前的基准数据集和Kinetics数据集上模型的性能,第五节研究了在Kinetics上学到的特征是如何很好的迁移到其他的数据集上。文章还总结了对结果的讨论。

2. 行为分类结构

随着近些年图像表示结构的迅猛发展,仍然没有清晰的,前沿的视频分析结构。一些现有的视频结构主要不同的地方在于卷积层是2D(基于图像)的还是3D(基于视频)的,网络输入只是一个RGB的视频还是包括光流;在2D卷积网络的情况下,信息传播的框架可以用时间上的循环神经网络比如LSTM或者随时间变化的特征增强。

这篇文章中我们比较和研究跨越这个空间大部分的模型。2D卷积网络的方法中,我们考虑顶层有LSTM的卷积网络以及两种不同类型(流扩散不同)的two-stream网络。我们也考虑了一个3D的卷积网络:C3D。

作为主要的技术上的贡献,我们引入了Two-Stream Inflated 3D卷积网络(I3D)。由于高维的参数和缺乏有标签的视频数据集,之前的3D卷积网络相对比较浅(至多8层)。我们注意到,很深的图像分类网络,比如Inception,VGG-16和ResNet,可以简单地“膨胀”成时空特征提取器并且他们预训练的权重可以提供值的初始化。我们也发现two-stream的配置也是有用的。

图2是我们评估的5种网络结构图的概述,表1种是明确的时间上接口的参数。

很多模型(除了C3D)都会把ImageNet预训练的模型作为一部分。我们的实验策略是把一个普遍的预训练的ImageNet图像分类网络作为主要部分,我们选择的是批量正则化过的Inception-v1模型,并且用不同方法把它变形。预期是把这个作为主要部分,我们来梳理能给行为分类带来好处的变化。

2.1.The Old Ⅰ :ConvNet+LSTM

图像分类网络的高性能表现使得可以把它小改一下用在视频上。当把pooling整个视频的预测时这可以单独来提取每帧的特征。这是词包图像模型方法的基础;虽然实践中很方便,但是还是有忽视了时间结构的问题(比如模型不能区分是开门还是关门)。

理论上,一个更满意的模型是增加循环层到模型中,比如LSTM,它可以用来编码状态和捕获时间顺序以及大范围的依赖关系。我们把批量正则化的LSTM层放在Inception-v1的最后一个平均pooling层后面,有512个隐藏单元。顶部是一个全连接网络层用来分类。

模型是用交叉熵损失函数来训练的。在测试阶段我们只考虑最后一帧的输出。输入视频框架是通过从每秒25帧,并且每5帧都选一帧的下采样的方法。表1中是整个细节。

2.2.The Old Ⅱ :3D ConvNets

3D卷积网络是一个自然的视频建模方法,就像标准的卷积网络,不同的是它有时空卷积。之前有过几次研究。他们有个很重要的特征:直接构建时空数据的分层表示。这些模型有个问题,由于额外核的维度使得比2D卷积网络多很多参数,并且这使得他们很难训练。他们还似乎妨碍了ImageNet预训练带来的好处,这等于他们的工作都是从头开始训练这种浅层的网络。在基准数据集上的结果虽然还不错但不能和先进的方法竞争的方法可以用来评估我们更大的数据集。

这篇文章中,我们实现了微小改变的C3D有8个卷积层,5个pooling层以及顶层有两个全连接层。模型的输入是从原始输入16帧剪辑,每帧再裁剪出112*112像素。和其他文献不同的是我们在所有的卷积层和全连接层后用了批量正则化。另一个不同之处是原始模型用的是步长为1的pooling层,我们用的是步长为2的pooling层,这样降低了内存以及允许更大的batches-这对于批量正则化很重要(尤其在全连接层之后,这里没有weight tying)。用这个步长我们可以每个GPU训练15个视频,用的是标准的K40 GPU。

2.3.The Old Ⅲ :Two-Stream Networks

很多情况下,在卷积网络最后一层的特征上,LSTM可以出模拟高级的动作变化,不能捕获重要的低级的动作。当他需要展开网络通过多帧图像用随时间变化的反向传播时很难训练。

Simonyan 和 Zisserman引入了一个不同的,很实际的方法就是在两个预训练的ImageNet卷积网络间传递之后,从一帧RGB图像以及另外10帧计算的光流中通过平均预测模拟视频短时的快照。Flow stream 有一个自适应的卷积网络,层数是flow frames输入通道数的两倍(因为flow有两个通道,水平和垂直的),并且在测试的时候,多个快照是从视频中采样的,行为预测是平均的。这可以在已有的基准数据集上有好的性能,并且训练和预测都很高效。

最近的一个模型是在最后一个卷积层后融合了spatial 和 flow streams,在HMDB上有些提升同时花更少的测试时间来增强(快照采样)。我们的方法和这篇文章差不多,用的是Inception-v1.网络的输入是从分开的10帧中选取5个连续的RGB帧以及对应的光流小片。在最后一个Inception-v1平均pooling层(5*7*7特征格子,对应时间,x和y坐标)之前,空间和动作特征通过1个3*3*3 3D有512个输出通道的卷积层传递,这个紧接着一个3*3*3 D的max-pooling层和一个全连接的卷积层。这些权重的初始值是用高斯噪声初始化的。

原始的two-scream模型和3D融合的模型都是以一种”端到端”的方式训练的(包括原始模型中的two-scream平均过程)。

2.4.The New :Two-Stream Inflated 3DConvNets

用这个结构,我们展示了3D的卷积网络是怎样可以从ImageNet的2D卷积网络的设计以及学到的参数中得到好处的。我们也这里也采用了two-stream的配置-这会在第4节说明3D的卷积网络可以直接从RGB stream中学到时间上的模式,并且性能通过包括光流stream有很大的改进。

Inflating 2D ConvNets into 3D. 近些年来一些很成功的图像分类结构发展起来了,部分是通过小心的试验和错误。我们不是重复时空模型的过程,而是提出了将成功的图像(2D)分类模型转化为3D的卷积网络。这可以通过一个2D的结构开始,并且“膨胀”了所有的滤波器和pooling核-赋予它们一个额外的时间上的维度。滤波器一般是平面的我们只要把它变成是立体的-N*N滤波器成为N*N*N。

Bootstrapping 3D filters from 2D Filters.除了结构,可能还想从预训练的ImageNet模型中开发参数。我们观察到一幅图片通过重复的复制到一个视频序列中可以转化成一个(无聊的)视频。在那之后,3D模型可以在ImageNet上预训练,满足(把无聊的视频称作固定点):在无聊的视频中的pooled激活函数应该核原始图像输入的激活函数一样。由于线性性,这可以沿着时间维度通过重复2D滤波器的权重N次。这保证了卷积核的反应是相同的。因为对于无聊视频的卷积层输出是常数,对于2D的情况,内积非线性层以及平均和max-pooling层的输出是相同的,因此总体的网络反应关联了无聊视频的固定点。有些人研究了开发策略。

Pacing receptive field growth in space,time and network depth.无聊视频的固定点在怎样沿着时间维度“膨胀”pooling算子和怎样设定卷积/pooling时间上的步长方面给了充分的自由度-这些是体现特征感受野尺寸的初始因素。实际上所有的图像模型都是同等对待两个空间维度(水平和垂直)的-pooling核和步长也是一样的。这是很自然的并且意味着越深层的网络在两个维度上是同样被图像的位置影响的。一个对称的感受野当考虑时间的时候没必要是最优的-这应该依赖于帧率和图像维度。如果在时间上相对空间增长的太快的话,可能会合并不同物体的边缘从而破坏了早期的特征检测,然而增长的不那么快,就不能很好的捕获到场景的动态变化。

在Inception-v1中,第一个卷积层步长为2,然后有4个步长为2的max-pooling层和一个7*7的平均-pooling层后面接一个线性分类层,平行的Inception分支中还有一个max-pooling层。我们的实验中,输入的视频处理成了每秒钟25帧;我们发现在其他的max-pooling层有对称核和步长时在前两个max-pooling层(1*3*3核,时间步长是1)中的时间上的pooling操作没什么帮助。最后的平均pooling层用2*7*7核。图3中有整体的结构。我们用64帧的小片训练模型,测试的时候用整个的视频,并且平均时间上的预测。

Two 3D Streams.一个3D卷积网络应该能够从RGB输入中直接学到动作特征,但是在光流算法的一些循环中它仍然需要大量的前馈运算(比如flow

fields的迭代优化)。大概是由于循环不够,实验中我们发现two-stream的配置-图2中展示了-在RGB输入预训练过的I3D网络以及在flow输入上优化过的光滑flow信息。我们分开训练了这两个网络,并且测试的时候平均了它们的预测。

2.5. 实验细节

除了C3D,其他模型喜欢把用ImageNet预训练过的3D卷积网络作为基本网络。所有结构中除了最后一个计算类别分数的卷积层,其他卷积层后面都接着一个批量正则化层和ReLU激活函数。

众所周知,数据增强对深度网络的性能至关重要。在训练过程中,我们用随机裁剪的方法,空间上-把视频的小边调整为256个像素,然后随机裁剪一个224*224的patch-时间上,在能够保证一个理想帧数中挑选前面的帧。对于更短的视频,我们尽可能的循环视频以满足每个模型的输入界面。训练中,我们也随机左右翻转视频。测试期间,模型是在整个视频中心裁剪224*224上卷积,预测也是被平均。我们也在256*256视频上试过空间的卷积,但是没有改进。在测试的时候考虑左右翻转视频能够获得更好的性能。在训练期间增加数据增强,比如光度测量也可以获得好的性能。我们把这个留在未来的工作。

我们用TV-L1算法计算光流。

3 、Kinetics人类动作数据集

  Kinetics数据集是专注于人类行为(而不是人类活动或事件)。动作列表包括:个人行为,比如画画、饮水、笑和拳击;双人行为,比如拥抱、亲吻和握手;以及人与物的动作,比如打开礼物,割草和洗盘子。一些动作细粒度不同,需要时间推理来区分:比如不同的游泳方式。其他动作需要更加强调对象来区分,例如演奏不同类型的乐器。

  数据集有400个人类动作类,每个类有400个或更多个剪辑,每个剪辑来自一个独特的视频。剪辑持续10秒左右,没有未剪辑的视频。测试集由每个类的100个剪辑组成。文献【16】给出了数据集的完整描述以及它是如何构建的。

  在本文中,对于大多数的实验,我们使用比完整的Kinetics更小的数据集,称为miniKinetics数据集。这是一个早期版本的数据集,它只有213个类,总共有三个分割的120个剪辑,一个用于每个类150到1000个剪辑,一个用于每个类25个剪辑,另一个用于每个类75个剪辑的测试。

       Mini’Kinetics能加快实验,并且优先于完整的Kinetics

4 、不同结构的实验结果比较

  在本节中,我们在改变测试和训练的数据集时比较第二节中描述的五种架构的性能。

  表2显示了训练和检验在UCF-101、HMDB-51或miniKinetics的分类准确率。我们对UCF-101和HMPD-51的1个测试集进行了测试,并在Kinetics的同样测试集上进行了测试。有几个值得注意的观察结果。首先,我们的新I3D模型在所有数据集中都是最好的,无论是RGB、Flow还是RGB +Flow。这非常有趣,因为它的参数非常大,并且UCF-101和HMDS-51非常小,这表明ImageNet预训练的好处可以扩展到3D ConvNETs。

  第二,在miniKinetics上所有模型的性能远低于UCF-101,这是两个数据集不同难度级别的指示。然而,它比HMPD-51更高;这可能部分是由于HMPD-51中缺少训练数据,但也因为这个数据集有目的地建立为难度系数较大:许多剪辑在完全相同的场景中有不同的动作。第三,不同架构的排名大多是一致的。第四,LSTM和3D ConvNETS模型在miniKinetics上比在更小的数据集更具竞争性;这些模型看起来相当数据饥饿。

此外,两个流架构在所有数据集上表现出优异的性能,但是RGB和flow的相对值在miniKinetics和其他数据集之间显著不同。单独的流的贡献,在UCF-101上略高于RGB,比在HMPD-51上高得多,在MiniKenitics上低得多。数据集可视化表明,MiniKenitics有更多的相机运动,这可能使工作流的运动更困难。I3D模型似乎能够比其他模型获得更多的流,但是,它可以通过更长的时间接受场(训练期间的64帧对10)和更完整的时间特征提取机制来解释。虽然RGB流有更多可辨识的信息看起来更合理,我们却经常用肉眼从Kinetics的flow中理解动作,这在RGB中是非常罕见的。这或许对于将来的研究是一个机会:整合某种运动的稳定形式于结构中。

5 、特征的实验评估

在这一节,我们研究了在Kinetics上通用网络的训练,我们考虑两种方法:第一,我们固定神经网络的权重并且使用这个神经网络产生UCF-101/HMDB-51数据集上视频(未知)的特征,我们接着训练多路Soft-max分类器用于分类UCF-101/HMDB-51(使用他们的训练数据),并且在他们的测试集上进行评估;第二,我们对用于UCF-101/HMDB-51分类的每个网络进行微调(使用UCF-101/HMDB-51的训练数据),接着再次在UCF-101/HMDB-51测试集上进行评估。

       这个结果我们在表3中给出,清晰的结果是,所有体系结构都受益于miniKinetics附加视频数据的预训练,但其中一些益处明显优于其他体系——尤其是I3D-ConvNet和3D-ConvNet(尽管后者从更低的基础开始)。仅仅在MiniKinetics(固定)预训练之后的模型最后几层进行训练也会比直接在UCF-101和HMDB-51训练I3D模型带来更好的性能。

对I3D模型特征可转换性的显著提升一个解释是它们的高时间分辨率——它们在每秒25帧的64帧视频片段上训练,并在测试时处理所有视频帧,这使得它们可以捕捉运动时细微的时间结构。换一种说法,稀疏视频输入的方法可能不如在大视频数据集的训练,因为从他们的角度来看,视频与ImageNet中的图像没有太大差别。 其他类似C3D的模型的可以通过我们的I3D模型更深入的解释,而我们的参数少得多,通过利用ImageNet热启动,通过对4倍以上的长视频进行训练以及对2倍以上的空间分辨率视频进行操作。

5.1 、与最先进的技术进行比较

       我们在UCF-101和HMDB-51上比较了I3D模型和以前最先进方法的性能,见表4。 我们的结果包含了在MiniKinetics和在全Kinetics数据集上的预训练。图4中显示了训练模型的第一层的卷积滤波。

       许多方法得到了相似的结果,但是目前这些数据集上表现最好的方法是Feichtenhofer及其同事[7],它使用RGB和光流的ResNet-50模型,在与密集轨迹模型结合[30]之后,在UCF-101与HMDB-51上分别取得了94.6%与70.3%的结果。我们使用三种标准训练/测试分组的平均准确度对我们的方法进行了基准测试。我们的RGB-I3D模型或RGB-Flow模型中的任何一个,当在Kinetics上进行预训练后,表现均优于先前发布任何模型或模型组合。我们的组合式双流体系结构与之前的模型相比显著提高了性能,使UCF-101的整体性能达到98.0,在HMDB-51的整体性能达到了80.7%,将其分别与以前最优的模型进行比较相当于减少了57%和33%错误分类率。

       在Kinetics上预训练的I3D模型与之前的3D ConvNets(C3D)之间的区别甚至更大,尽管C3D在更多视频中训练,来自与 Sports-1M加上一个内部数据集的1M例子,甚至整体化和与IDT结合。这可以通过Kinetics的质量更好来解释,但也因为I3D只是一个更好的体系结构。

       另一个值得注意的效果是从miniKinetics到Kinetics预训练时,HMDB-5上的I3D RGB流的提高,这表明3D ConvNets可能需要大量数据来学习稳健的运动特征。在Kinetics预训练之后,双流得到类似的表现,但仍然是互补的:它们的平均预测结果在74.8%到80.7%之间。

6 、讨论

我们回到引言中提出的问题,“从视频中迁移学习有没有好处?”。 很明显,在(大量视频数据集)Kinetics的预训练中有相当大的好处,就像在ImageNet上ConvNets进行预训练一样有很多好处。 这表明将一个数据集(Kinetics)转移到另一个数据集(UCF-101 / HMDB-51)进行类似任务的迁移学习(尽管对于不同的动作类)。 但是,如果将Kinetics预训练用于其他视频任务,如语义视频分割,视频对象检测或光流计算是否有好处,还有待观察。 我们计划公开发布在官方Kinetics数据集上训练的I3D模型,以促进该领域的研究。

当然,我们并没有对体系结构进行全面的探索——例如我们没有采用行动管[11,17]或关注机理[20]来关注人类行为。最近的工作提出了想象性的方法,通过在时间上加入链接的物体检测来确定双流体系结构中运动者的空间和时间范围(检测)[22,24]。时空之间的关系是神秘的。最近几篇非常有创意的论文试图捕捉这种关系,例如通过学习帧排序函数来进行运动分类并将这些函数用作表示[9],通过在动作和变换之间进行类比[33],或者通过创建帧序列的2D视觉快照[2]——这个想法与[3]的经典运动历史工作有关。在我们的比较中,包含这些模型是非常有价值的,但由于缺乏时间和空间,我们无法做到这一点。

在未来的工作中,我们计划使用Kinetics代替miniKinetics重复所有实验,不论是否使用ImageNet预培训,并探索其他现有的2DConvNets。

感想:

本文针对视频运动分类中存在的问题提出了自己的方法,即利用迁移学习的方法解决,具体的操作先利用imageNet数据集进行网络的训练,然后利用Kinetics数据集对网络参数进行微调,并以此种方法得到了模型,文中作者将其与其他最先进的方法进行了比较,得到了利用迁移学习的效果要优于目前所有已有的模型或模型组合的结论。从文中看,采用迁移学习的确显著提高了模型的性能。

这个模型的主要思想就是迁移学习,还有就是将卷积核进行了拓展,由二维到三维,并在不同规模数据集上进行训练,得到了在大数据集下鲁棒性较好的结论。本文给读者提供了使用迁移学习的办法提高性能的想法,这种想法可以借鉴到其他领域。

本文也存在着一些缺点,首先,没有提出新的模型,仅仅是利用了迁移学习,而且在体系结构上没有深入的介绍,也没有将迁移学习应用到其他领域,来验证迁移学习的有效性,需要后期继续进行实验和修正。

为啥rec.area 和rec.perimeter 总是0?

【中文标题】为啥rec.area 和rec.perimeter 总是0?【英文标题】:why rec.area and rec.perimeter are always 0?为什么rec.area 和rec.perimeter 总是0? 【发布时间】:2020-07-07 23:17:22 【问题描述】:

我不明白为什么rec.area 和rec.perimeter 只打印0

矩形

class Rectangles 

        int weight;
        int height;
        int area;
        int perimeter;

        int area (int weight, int height) 
            return  weight * height;
        

        int perimeter (int weight, int height) 
            return  2 * (weight + height);
        
    

矩形测试

class RectanglesTest 
    public static void main(String[] args)  

        Rectangles rec = new Rectangles();

        rec.weight = 10; 
        rec.height = 15; 

        System.out.println(rec.weight);
        System.out.println(rec.height);
        System.out.println(rec.area);
        System.out.println(rec.perimeter);
    

【问题讨论】:

因为您在任何地方都没有为areaperimeter 赋值。 您不应该将方法命名为与字段相同的名称,这会产生误导(如您的示例所示)。如果您实际调用该方法,您将得到您期望的结果。喜欢rec.area() 【参考方案1】:

因为areaperimeter 的值没有改变,在你的方法中你必须将它们设为void 并将计算的值分配给请求的属性

class Rectangles 

        int weight;
        int height;
        int area;
        int perimeter;

        void area () 
            area = weight * height;
        

        void perimeter () 
            perimeter = 2 * (weight + height);
        

并且在您的main 方法中,您必须先调用这些方法

public static void main(String[] args) 

  Rectangles rec = new Rectangles();

  rec.weight = 10; 
  rec.height = 15; 
  rec.area();
  rec.perimeter();
  System.out.println(rec.weight);
  System.out.println(rec.height);
  System.out.println(rec.area);
  System.out.println(rec.perimeter);

【讨论】:

那么你必须另外调用方法来分配这些值。【参考方案2】:

您将字段名称与方法名称混淆了 - 最好使它们不同,但无论如何要使用您的代码

public static void main(String[] args) 

  Rectangles rec = new Rectangles();

  rec.weight = 10; 
  rec.height = 15; 

  System.out.println(rec.weight);
  System.out.println(rec.height);
  System.out.println(rec.area ());
  System.out.println(rec.perimeter ());

由于你使用的是字段,所以不需要向这些方法传递其他参数,所以将它们更改为

int area ()  ....
int perimeter ()  ....

更好的命名方法是动词,例如计算面积

其实你不用

int area;
int perimeter;

所以你可以删除它们

【讨论】:

可能还需要指出area()perimeter()方法也需要正确实现... @RobbyCornelissen 谢谢,我没有看到这个。在家办公? 不,每周都要传真一个请求

以上是关于18组-Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset的主要内容,如果未能解决你的问题,请参考以下文章

form 表单中action是用来干啥的

Blazor - 无法从“方法组”转换为“EventCallback”

18. java面向对象 - 递归

如何使用 Intent 打开显示“组”选项卡的联系人?

在 PrestoSQL 中将行组合成一个列表

PLSQL 异常中的回滚