推出 RepNet:计算视频中的重复片段

文 / 研究员 Debidatta Dwibedi,Google 机器人团队

我们日常生活中有很多常见的重复过程,如月相、心跳和呼吸等自然周期的循环,或是生产线或交通模式中出现的人为重复过程。

重复过程不仅普遍存在,而且引起了研究人员的兴趣,因为人们从中可以发掘出很多真知灼见。在多次重复发生的事件背后,可能还存在着一些根本性的原因;或者在重复的场景中也许隐藏着某种渐进的变化趋势,也许能帮助我们理解这个场景。有时,重复过程为我们提供了明确的“动作单元”,即构成动作的片段具有语义含义。

例如,如果一个人正在切洋葱,则动作单元就是切下洋葱片的这一重复动作。这些动作单元可能暗示更复杂的操作,也可能让我们在更精细的时间尺度上对此类操作进行自动分析,而无需人工注释。

基于上述原因,如果能构建一个可理解一般重复模式的系统,那么以长期观察和理解世界为目标的感知系统将会大幅获益。

在“时间计数:野外类不可知的视频重复计数(Counting Out Time: Class Agnostic Video Repetition Counting in the Wild) 一文中,我们提出了一种可理解多种重复过程的单一模型 RepNet,其中包括锻炼身体或使用工具的人类、动物奔跑、鸟类扇动翅膀、钟摆摆动等多种不同的重复过程。

我们 之前的研究 大都使用了周期一致性约束来分析有同一动作的不同视频,以便能在细粒度层面上理解这些动作,但在这篇论文里,我们采用了一种能识别单个视频中重复模式的系统。与该模型一起,我们还将发布一个 数据集 以对视频中的类不可知计数进行基准测试,同时发布一个 Colab 笔记本来运行 RepNet。

RepNet

RepNet 模型以视频为输入数据,视频中包含多种不同类别的周期性动作(包括在训练过程中没有见过的动作),之后会返回在其中发现的重复周期。过去在解决重复计数的问题时,我们会直接比较帧内的像素强度,但现实世界的视频可能存在相机移动、物体遮挡视野、比例尺明显差异、形状变化等各种情况,因此必须学习不受此类噪声影响的特征。为此,我们以端到端的方式训练了一个机器学习模型,以直接估计重复周期。此模型由三部分组成:帧编码器、中间表示(也称为时间自相似矩阵,见下文说明)和周期预测器。

首先,帧编码器使用 ResNet 基础架构作为每帧模型来生成视频中每一帧的嵌入向量。我们选择 ResNet 架构是因为它已成功应用于许多图像和 视频 任务中。接着,通过基于 ResNet 的编码器传递的视频每一帧会产生一系列嵌入向量。

此时,我们通过将视频中每一帧的嵌入向量与每个其他帧的嵌入向量进行比较来计算时间自相似矩阵 (TSM),并返回一个易于后续模块进行分析以计算重复次数的矩阵。如下方视频所示,此过程会将视频帧流中的自相似性显现出来,从而帮助进行周期估算。

演示:TSM 如何处理地球昼夜循环的图像

然后,对于每一帧,我们直接根据 TSM 中的相似性序列使用 Transformer 来预测重复周期和周期性(即,一个帧是否属于此周期性过程的一部分)。在确定了周期后,我们就可以用周期分段中捕获的帧数除以周期长度来获得每帧计数。汇总之后,我们就可以预测视频中的重复次数。

RepNet 模型概览

时间自相似矩阵

如上所示,昼夜周期中的 TSM 示例来自具有固定周期重复的理想场景。而真实视频中的 TSM 往往会揭示世界上令人着迷的结构体系,我们具体通过下方三个示例来说明。

image

跳跃运动(固定周期),弹跳小球(下降周期),拌制混凝土(视频中存在非周期性片段)

连续的跳跃运动具有一个固定的周期长度,是理想周期动作;而相比之下,由于动能损失,小球的弹跳高度会在弹跳的过程中逐渐下降。而搅拌混凝土的展示中,重复动作的前后伴随着一段无运动的时间。这三种行为在习得的 TSM 中有明显的差别,因此需要模型注意场景中的细微变化。

在 RepNet 中将 TSM 用作中间层的一大优点是,Transformer 的后续处理是在自相似空间中完成,而不是在特征空间中。这样能够促进模型向未曾见过的类别泛化。例如,只要动作的重复速度相似,跳跃运动和游泳等差异性很大的动作所得到的 TSM 也是相似的。这使得我们可以将模型在某些类别的动作上进行训练之后,再泛化到未曾见过的类别。

数据

训练上述模型的一种方法是收集大量捕获了重复性活动的视频数据集,并用重复计数来对其进行标记。但这种方法存在两重挑战。

首先,模型需要人力来检查大量视频以标记出其中带有重复动作的片段并计数。尽管在特定的任务中,标注者可以跳过某些帧(例如,在跳跃运动的视频中),但他们仍然需要看完整个视频才能统计出跳跃运动的执行次数。

通过引入一种合成数据生成过程,我们克服了这一挑战,此过程可以使用完全不包含重复动作的视频来生成有重复动作的视频。具体做法是随机选取一个视频片段并将其重复任意次数,然后在前后加上原始视频上下文。

image

我们的合成数据生成流水线可基于任何视频生成带有重复动作的视频

尽管这一流程可以生成带有重复过程且看起来很自然的视频,但对于深度学习方法来说还是过于简单,因为深度学习可以通过查找伪像来作弊,而不是学习识别重复动作。为解决这个问题,我们执行了极端数据增强,也称为 相机运动增强。在使用这种方法时,我们会对视频进行修改,以便在视频进行过程中使用 2D 仿射运动来模拟平滑移动的相机。

image

左侧:由随机视频生成的合成重复视频示例。右侧:使用相机运动增强的视频示例,对于模型来说难度更大,但能更好地泛化到真实的重复视频上(视频均来自 Kinetics)

评估

即使我们可以在合成的重复视频上训练模型,但生成的模型也必须要能够泛化到重复过程的真实视频。为了用真实视频评估已训练模型的性能,我们从 Kinetics 数据集收集了一个大约包含 9000 段视频的数据集。这些视频涵盖多种动作类,这些类来源于 YouTube 上的多样化场景。我们为这些视频标注了视频中动作的重复次数。为了鼓励这一领域的进一步研究,我们将公开发布此数据集的计数标注:Countix

应用

类不可知的计数模型具有许多实用的应用场景。RepNet 可作为单一模型使用,可以统计许多不同领域的重复次数:

image

RepNet 可以计算多种领域活动的重复活动次数:如切洋葱、地球昼夜周期,或者运动中的猎豹

RepNet 可用于评估来自超声波心动图视频的心率,即便它在训练期间并未见过这样的视频:

image

预测心率:45 bpm(左)和 75 bpm(右)。实际心率分别为 46-50 bpm 和 78-79 bpm。RepNet 对不同设备的心跳速率预测非常接近设备实际测得的心跳速率

RepNet 也可用于监控重复活动中的速度变化。下方展示了这样的速度变化如何用于其他质量或过程控制的设置环境下。

image

在这个视频中,我们看到 RepNet 计数了在激光显微镜下观察到的加速细胞振荡,即便在训练期间模型也未见过这样的视频(来自《自然》)

image

左侧:一个人正在进行锻炼。右侧:使用主成分分析得出的 RepNet 嵌入向量的 1D 投影,捕获了这个人在锻炼过程中改变速度的时刻

发布

我们将发布 Countix 标注数据集 支持社区处理重复计数问题。我们还将发布用于运行 RepNet 的 Colab 笔记本 。这样您可以在视频上运行 RepNet,甚至可以使用网络摄像头来检测视频中的周期性活动,并自动计算视频中的重复次数。

致谢

这项研究离不开 Yusuf Aytar、Jonathan Tompson、Pierre Sermanet 和 Andrew Zisserman 的协助。特别感谢 Tom Small 设计了 TSM 的视觉解释。此外还要感谢 Anelia Angelova、Relja Arandjelović、Sourish Chaudhuri、Aishwarya Gomatam、Meghana Thotakuri 和 Vincent Vanhoucke 为本项目提供帮助。

原文:RepNet: Counting Repetitions in Videos
中文:谷歌开发者公众号