写点什么

RepNet:对视频中的重复周期进行计数

  • 2020-08-19
  • 本文字数:3052 字

    阅读完需:约 10 分钟

RepNet:对视频中的重复周期进行计数

我们将在本文中提出一种能够识别视频中重复周期元素的系统。配合 RepNet 模型,我们将发布一套数据集,对视频中的可计数对象进行基准测试,并将结果以运行在 RepNet 上的 Colab notebook 的形式发布。


重复周期是一种普遍存在的抽象概念,无论是自然周期(例如月相变化、心跳或呼吸的阶段性过程)还是人工设定(例如在生产线或交通方式中发现重复周期)中都对此有所体现。


真正让研究人员们兴奋的是,重复周期不仅具有普遍性,同时也能够帮助人们提取出诸多有价值见解。其中或许隐藏着某些事件多次发生的潜在原因,或许能够帮助我们了解场景中某些缓慢变化的具体影响。有时候,我们还能从重复周期中提取出明确的“动作单元”,即通过不断重复或变化构成复杂行动体系的基本动作单位。例如,如果视频中的某人正在切洋葱,则其表现出的切削等复杂操作,在本质上都由一个个简单的动作重复周期所构成。通过这些基本单元,我们可以在更精细的时间范围内自动分析更多动作元素,而不再需要手动进行繁琐的单元注释。考虑到以上原因,对一般性重复系统的长期观察将帮助我们更深入地理解现实世界中的运作机制。


很多人可能已经听说过RepNet,这是一套能够理解各类重复周期的模型,其识别范围涵盖体育锻炼、工具使用、动物奔跑、鸟类振翅以及各类摆动现象。这一次,我们将使用同一组动作的不同视频素材对这些重复周期进行细粒度解析。为此,我们将在本文中提出一种能够识别视频中重复周期元素的系统。配合 RepNet 模型,我们将发布一套数据集,对视频中的此类可计数对象进行基准测试,并将结果以运行在 RepNet 上的 Colab notebook 的形式发布。

RepNet

RepNet 是一套模型,能够以视频素材为输入识别其中包含的各类周期性动作(包括在训练阶段中从未见过的动作),并将发现的重复周期作为返回结果。以往,我们一直通过直接比较帧内像素强度的方式解决视频动作的重复计数问题,但现实生活中的视频素材往往受到摄像机机位移动、野外物体遮挡、比例尺快速变化以及形态变化等因素的影响,迫使相关模型必须面对大量与核心目标无关的特征噪声。


为此,我们以端到端方式训练机器学习模型,借此直接估算重复周期的持续时长。我们的这套模型由三部分组成:帧编码器、中间表示(名为时间自相似矩阵,具体细节将在后文中阐述)以及周期预测器。


首先,我们的帧编码器利用 ResNet 架构作为每帧模型,借此为视频各帧生成对应的嵌入。之所以选择 ResNet 架构,是因为其已经在众多图像及视频处理任务当中证明了自己的强大实力。在经由基于 ResNet 的编码器之后,视频中的每一帧都会产生一系列对应的嵌入。


接下来,我们将各帧的嵌入与视频中其他帧进行比较,借此计算时间自相似矩阵(TSM),并返回一个可由后续模块轻松分析以计算重复次数的矩阵。如以下动图所示,此过程会在视频帧流中凸显出自相似性,从而实现周期估算。



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


在每一帧当中,我们直接根据 TSM 中的相似性序列使用 Transformers 对重复周期及其具体周期性做出预测(即某一帧是否属于该周期性过程中的组成部分)。在明确了周期之后,我们就可以将周期内所捕捉到的所有帧数除以周期总时长,借此得出每帧计数。通过汇总之后,模型即可预测视频中特定周期的重复次数。



RepNet 模型概述

时间自相似矩阵

以上展示的昼夜循环示例,就是一类具有固定重复周期的典型场景。真实视频中的 TSM 往往能够帮助我们发现世界上种种令人着迷的结构,如以下三个示例所示。


拍手跳以固定的周期重复着近乎完美的周期性动作;相比之下,弹力球的运动周期则随着反复弹跳的能量损失而逐渐归零。最后则是搅拌混凝土的工人,但视频中的重复周期显然并不完整。这三种行为在 TSM 当中有着明确的区别,想正确对其做出计数,必然要求模型能够注意到场景中的种种细微变化。



拍手跳(时间周期恒定)、弹力球(时间周期逐渐归零)、搅拌混凝土(视频中呈现的重复周期并不完整)。


在 RepNet 中选择 TSM 作为中间层的一大优势,在于 transformers 的后续处理将在自相似空间(而非特征空间)内进行。以此为基础,模型能够将学习到的相似度推广到更多训练数据集内未出现过的场景中。例如,只要以相似的速度进行重复动作,那么跳高与游泳这两种不同运动所产生的 TSM 都是相似的。如此一来,我们训练出的模型将拥有更强大的用例兼容能力。

数据

要对上述模型进行训练,一种可行的方法是收集大量重复动作的视频并整理为数据集,而后人为重复计数以完成素材标记。但这种做法将带来两大核心挑战:首先,涉及过多人为操作,需要由研究人员查看视频内容以识别包含重复动作的部分。第二,研究人员还需要为每段视频添加重复动作的发生次数。虽然注释人员可以直接跳过某些帧(例如用于区分视频段落的插入帧),但整个过程仍然枯燥且痛苦。


为了克服这一挑战,我们引入了一种合成数据生成过程。该过程能够使用不包含重复动作的视频来产生具有重复周期的新素材。为了实现这个目标,该过程会随机选择一段视频并对其进行任意次数重复,具体视原始视频上下文而定。



我们的合成数据生成管道,而且生成包含任意重复段落的视频素材。


虽然这样的过程足以生成包含重复周期的自然视频,但其内容对于深度学习方法看来还是太过简单了。深度学习完全可以通过识别完全一致的重复周期来“作弊”,这并不能代表其真正掌握了重复周期的识别能力。为此,我们还得对视频内容做出修改,即模拟视频拍摄中以 2D 轨迹平滑移动的摄像机机位。



图左:利用随机视频生成 的合成重复视频示例。图右:经过摄像机运动增强处理后的视频示例,此示例的识别难度更高,因此能够更好地帮助模型掌握识别真实重复视频的能力。

评估

合成重复视频的生成工作已经完成,但接下来还需要保证由此训练出的模型能够被推广到真实重复周期视频当中。为了评估训练模型在真实视频上的性能,我们从 Kinetics 数据集中收集到约 9000 段视频并将其整理为新的数据集。这些视频涵盖多种动作类型,同时结合大量不同场景,各场景来自 YouTube 中的多样性数据。我们为这些视频添加注释,并在视频中进行重复动作计数。为了帮助更多参与者加入研究,我们发布了该数据集的计数注释,即 Countix。

实际应用

这种具有普适性的计数模型能够在多种应用场景当中发挥作用。将 RepNet 作为单一模型,我们可以对各类复杂的场景进行重复计数:



RepNet 可以计算多种场景下的重复动作,例如切洋葱(图左)、地球的昼夜变化(图中)甚至是运动中的猎豹(图右)。


即使从未在训练数据集中见到过类似的内容,RepNet 仍能够通过超声波心动图视频当中估算心跳速率:



预测心率:45 bpm(左)与 75 bpm(右)。真实心率分别为 46 – 50 bpm 以及 78 – 79 bpm。RepNet 对于不同设备上测得的心率,都做出了精度出众的准确预测。


RepNet 还可用于监控各类重复动作的速度变化。通过下图,可以看到这种速度变化完全能够在质量或流程控制领域发挥重要作用。



在此视频中,我们看到 RepNet 对激光显微镜下观察到的加速细胞振荡活动进行计数。RepNet 在之前的训练数据集内从未见过这样的内容。



左:俯卧蹬地运动。右:通过主成分分析之后,RepNet 嵌入中的一维投影,其中准确体现为人们在锻炼过程中的速度变化趋势。

发布

我们已经面向社区发布 Countix 注释结果,希望帮助更多研究人员处理重复计数问题。我们还发布了适用于 RepNet 的 Colab notebook。以此为基础,大家可以在自己的视频上运行 RepNet,甚至使用网络摄像头来检测视频中的周期性活动,并自动计算视频中的重复次数。


原文链接:


https://ai.googleblog.com/2020/06/repnet-counting-repetitions-in-videos.html


2020-08-19 08:002218
用户头像
李冬梅 加V:busulishang4668

发布了 940 篇内容, 共 533.7 次阅读, 收获喜欢 1105 次。

关注

评论

发布
暂无评论
发现更多内容

Serverless Devs 新手引导

刘宇

云计算 Serverless 云原生 Serverless Devs 新手引导

一文带你熟知ForkJoin

华为云开发者联盟

jdk 并发编程 并发 forkjoin 多线程并发

Elasticsearch 查询最大时间(qbit)

qbit

sql UTC TimeZone 时区

Spring Boot 2 教程:WebFlux 快速入门实践(二)

程序员泥瓦匠

Spring Boot WebFlux

Vue中slot插槽的使用方法

Changing Lin

12月日更

多种操作模式下的工具体系

刘宇

Serverless Serverless Devs

让发布更安全的:线上异动感知

刘宇

云计算 Serverless 云原生 Serverless Devs

从云计算到 Serverless

刘宇

云计算 Serverless 云原生 Serverless Devs

Serverless 架构简介

刘宇

云计算 Serverless 云原生 Serverless Devs

Spring Boot 2 教程:WebFlux Restful CRUD 实践(三)

程序员泥瓦匠

Spring Boot WebFlux

Linux一学就会:shell脚本基础

侠盗安全

Linux linux运维 运维工程师 云计算架构师

Linux之rm命令

入门小站

Linux

Spring Boot 2 教程:WebFlux 整合 Mongodb(四)

程序员泥瓦匠

Spring Boot WebFlux

Spring Boot 2 教程:WebFlux 集成 Thymeleaf 、 Mongodb 实践(六)

程序员泥瓦匠

Spring Boot 2 教程:WebFlux 集成测试及部署(十)

程序员泥瓦匠

Spring Boot 2 教程:WebFlux 中 WebSocket 实现通信(九)

程序员泥瓦匠

鸿蒙轻内核源码分析:MMU协处理器

华为云开发者联盟

鸿蒙 MMU协处理器 ARM CP15协处理器 协处理器 MMU

工具链建设的必要性

刘宇

云计算 Serverless 云原生 工具链

重磅来袭|第一届 OpenSEC 征文活动正式开启

SphereEx

开源社区 技术分享 ShardingSphere SphereEx OpenSEC

Spring Boot 2 教程:WebFlux 系列教程大纲(一)

程序员泥瓦匠

Spring Boot WebFlux

Spring Boot 2 教程:WebFlux 整合 Redis(七)

程序员泥瓦匠

java开发之Redis分布式锁相关知识分享

@零度

Java redis

Serverless Devs 简介

刘宇

Serverless 函数计算 Serverless Devs

阿里云函数计算(FC)组件简介

刘宇

云计算 Serverless 云原生 函数计算 Serverless Devs

Spring Boot 2 教程:WebFlux 集成 Thymeleaf(五)

程序员泥瓦匠

Homebrew大神面试Google被拒,只因写不出一道算法题

博文视点Broadview

成功只有一种-OBKoro1的2021年终总结

OBKoro1

前端 年终总结

openLooKeng社区Apache Log4j2高危安全漏洞修复完成,建议用户升级

openLooKeng

大数据 安全漏洞 openLooKeng Apache Log4j2 远程代码执行

Java常用的五大算法详解

编程江湖

算法 java编程

前端开发React使用中常用的开发框架

@零度

前端 React

Spring Boot 2 教程:WebFlux 中 Redis 实现缓存(八)

程序员泥瓦匠

RepNet:对视频中的重复周期进行计数_AI&大模型_Google AI_InfoQ精选文章