该存储库包含在论文“ Quo Vadis,Action识别?新模型和动力学数据集”中报道的训练有素的模型。该论文于2017年5月发布在Arxiv上,并将作为CVPR 2017会议论文发表。
“ Quo Vadis”引入了一种新的架构,用于视频分类,即膨胀的3D Convnet或i3d。在这里,我们发布了在动力学数据集训练分开的培训的Inception-V1 I3D模型。
在我们的论文中,我们报告了通过微调这些模型的UCF101和HMDB51数据集上的最新结果。预先培训动力学的I3D模型也是CVPR 2017 Charades Challenge的第一名。
存储库现在还包括使用RGB输入的预训练检查点,并在Kinetics-600上从头开始训练。
新:我们使用的视频预处理现已由Google开源。要设置它,请在Google的MediaPipe Repo中检查这些说明。
免责声明:这不是官方的Google产品。
首先遵循安装十四行诗的说明。
然后,使用此存储库克隆
$ git clone https://github.com/deepmind/kinetics-i3d
使用示例代码运行
$ python evaluate_sample.py
使用默认标志,这将构建I3D两流模型,将预训练的I3D检查点加载到TensorFlow会话中,然后通过模型传递示例视频。示例视频已经进行了预处理,并提供了RGB和Flow Numpy阵列(请参见下面的更多详细信息)。
该脚本输出logits张量的规范,以及模型预测的概率和logit值的前20个动力学类。使用默认标志,输出应类似于以下的数值精度差异:
Norm of logits: 138.468643
Top classes and probabilities
1.0 41.8137 playing cricket
1.49716e-09 21.494 hurling (sport)
3.84312e-10 20.1341 catching or throwing baseball
1.54923e-10 19.2256 catching or throwing softball
1.13602e-10 18.9154 hitting baseball
8.80112e-11 18.6601 playing tennis
2.44157e-11 17.3779 playing kickball
1.15319e-11 16.6278 playing squash or racquetball
6.13194e-12 15.9962 shooting goal (soccer)
4.39177e-12 15.6624 hammer throw
2.21341e-12 14.9772 golf putting
1.63072e-12 14.6717 throwing discus
1.54564e-12 14.6181 javelin throw
7.66915e-13 13.9173 pumping fist
5.19298e-13 13.5274 shot put
4.26817e-13 13.3313 celebrating
2.72057e-13 12.8809 applauding
1.8357e-13 12.4875 throwing ball
1.61348e-13 12.3585 dodgeball
1.13884e-13 12.0101 tap dancing
可以使用测试文件运行
$ python i3d_test.py
这检查了该模型可以正确构建并产生正确的形状。
默认模型已在成像网和动力学上进行了预训练。其他标志允许加载仅在动力学上预先训练的模型,并仅选择RGB或Flow流。脚本multi_evaluate.sh
显示了如何运行所有这些组合,并在out/
Directory中生成样本输出。
目录data/checkpoints
包含训练的四个检查点。刚刚在动力学上训练的方法是使用默认的十四行诗 /张量初始化器初始化的,而在Imagenet上预先训练的方法是通过从2D Inception-V1模型中引导过滤器的3D来初始化的,如本文所述。重要的是,RGB和流动流是分别训练的,每个流都有SoftMax分类损失。在测试时间内,我们通过将逻辑添加相等的加权来组合,如evalute_sample.py
代码所示。
我们使用tf.train.SyncReplicasOptimizer
使用同步SGD训练。对于每个RGB和流动流,我们用4个备份复制品在64个复制品上汇总。在训练过程中,我们使用0.5辍学并应用batchnorm,MiniBatch尺寸为6。使用的优化器为SGD,动量值为0.9,我们使用1E-7重量衰减。 RGB和流量模型分别以115K和155K步骤进行培训,并采用以下学习率计划。
RGB:
流动:
这是因为确定流程模型在首次运行115K步骤后需要进行更多的培训。
使用动力学的训练分开对模型进行培训。在动力学测试集上,我们获得以下TOP-1 / TOP-5精度:
模型 | Imagenet +动力学 | 动力学 |
---|---|---|
RGB-I3D | 71.1 / 89.3 | 68.4 / 88.0 |
流-I3D | 63.4 / 84.9 | 61.5 / 83.4 |
两流i3d | 74.2 / 91.3 | 71.6 / 90.0 |
DeepMind Kinetics数据集的发布仅包括YouTube ID以及剪辑的开始和结束时间。对于此处的示例数据,我们使用来自UCF101数据集的视频,为此提供了所有视频。使用的视频是v_CricketShot_g04_c01.mp4
,可以从UCF101网站下载。
我们的预处理使用内部库,这些库现在已被开源检查Google的MediaPipe回购。它执行以下操作:对于这两个流,我们以每秒25帧的速度对帧进行采样。对于动力学,我们还将在提供的开始和结束时间剪辑视频。
对于RGB,调整视频的大小确定纵横比,以使最小的尺寸为256像素,并具有双线性插值。然后在-1和1之间重新缩放像素值。在训练期间,我们随机选择224x224图像作物,而在测试期间,我们从视频中选择中心224x224图像作物。因此,提供的.npy
文件具有RGB的形状(1, num_frames, 224, 224, 3)
,对应于批次大小为1。
对于流量流,在每秒25帧以25帧的方式对视频进行采样后,我们将视频转换为灰度。我们应用了TV-L1光流算法,类似于OPENCV的此代码。像素值被截断为[-20,20]范围,然后在-1和1之间重新缩放。我们仅使用前两个输出尺寸,并施加与RGB相同的裁剪。因此,提供的.npy
文件具有流量的形状(1, num_frames, 224, 224, 2)
,对应于批次大小为1。
这是GIF显示提供的.npy
文件。从RGB数据中,我们添加了1,然后除以2以在0到1之间。对于流数据,我们添加了所有0的第三个通道,然后在整个数组中添加了0.5,因此结果也在0和0和1。
有关预处理的更多详细信息,请检查此信息,请参阅我们的论文或与作者联系。
Brian Zhang,Joao Carreira,Viorica Patraucean,Diego de Las Casas,Chloe Hillier和Andrew Zisserman帮助准备了此最初版本。我们还要感谢动力学数据集背后的团队以及该体系结构和代码所基于的原始成立论文。
为了为此存储库做出贡献,您将首先需要签署condruting.md文件中提供的Google贡献者许可协议(CLA)。然后,我们将能够接受任何拉的请求,尽管目前并不是要扩展到其他受过训练的模型。
对于任何疑问,您可以联系“ Quo Vadis”论文的作者,该纸张的电子邮件已在论文中列出。