写点什么

港中文林达华团队提出计算机视觉新方向:电影情节分析

  • 2018-09-13
  • 本文字数:6520 字

    阅读完需:约 21 分钟

介绍

“你要好好活下去,不管发生什么,都不要放弃希望。”这令人心碎的场景来自电影《泰坦尼克号》,是由詹姆斯卡梅隆导演的史诗级浪漫灾难电影,感动了每一位观众。

电影蕴含着巨大的价值,不仅仅是因为它的娱乐功能,更是因为它是人类文化、社会和历史的缩影。从计算机视觉研究的角度来看,他们也是宝贵的数据资源。虽然电影早已进入计算机视觉研究的视线,但是关于电影数据的一个重要问题却鲜有提及——我们可以用视觉模型来进行电影理解吗?

这篇论文的目的是研究一种电影理解方法,从低级特征表示到高级语义分析。这一问题面临两个重要挑战:计算以及标注数据所需的成本过高。首先,目前的视频分析研究主要对象是短视频,只持续几分钟甚至几秒,而电影通常要超过一个小时。对于这样大小的视频,简单的提取特征处理都需要很长时间,更不要说训练模型的时间了。另一方面,视觉模型需要大量的标注样本进行训练,但是对电影进行标注几乎是不可能的任务。

但是电影是有预告片的,导演将最重要的镜头组合起来,作为整部电影的预览。从预告片中,可以看到大量具有代表性的镜头,并且能够从中学习用于电影分析的视觉线索。并且预告片时间一般都在五分钟之内,因此从预告片中学习模型的计算量是合理的。但是,虽然预告片能够保存一部电影的重要特征,但是也失去了时序结构

受到电影预告片的启发,我们提出了一种能够高效地从电影中进行学习的框架。该框架由两个关键模块构成:一个视觉分析模块,从预告片中学习得到,和一个时序分析模块,从电影和视觉模块提取的特征中学习得到。这样设计的原因在于,视觉提取模型通常比时序模型复杂,因此让不同的模块从不同的数据中学习可以将计算成本维持在可负担的水平,同时让算法能够捕捉整部电影的时序结构。我们进一步提出了两个训练策略:(1)挖掘元数据,例如电影流派的信息,故事情节关键词,用它们作为视觉模型训练的监督信息。(2)以自监督的方式学习时序结构。即去掉一部分序列,让模型依据已知的序列来预测被舍去的部分。

图 1 我们提出了一个有效的框架来分析电影,分别通过从预告片中学习视觉模型,和从电影中重构时序结构,不仅可以预测镜头级别的标注,并且可以应用于电影分析的各种任务中,例如镜头检索,镜头预测和电影问答。

为了支持这一研究工作,以及未来对该研究方向的扩展,我们构建了一个大型电影和预告片数据集 LSMTD,并且定义了一系列方法来评价电影分析模型。实验结果显示,提出的方法减少了训练时间,并且在表现上超过了传统方法训练的模型。

论文贡献

(1) 提出一种新的电影理解模型,其中视觉分析模块和时序理解模块分别在预告片和电影上训练,分别使用元数据和自监督学习方法。

(2) 构建了一个大型电影和预告片数据库,并基于该数据库定义了一系列评价电影理解能力的任务,并且对不同的训练方法进行系统化的对比。

大型电影和预告片数据集(LSMTD)

我们构建了一个大型电影和预告片数据集(LSMTD),包含 508 部完整的电影(大约 10 亿帧,20000 万个镜头)和 34219 个预告片(大约 10 亿帧,10000 万个镜头),总计超过 2200 小时。这是目前可用于电影视觉分析的最大的数据集。

电影从亚马逊和其他商业途径购买,预告片从 YouTube 下载,电影的流派信息从 IMDB 上获得,而用户提供的情节关键词则来自 TMDB 。为了获得更有意义的关键词,我们将出现次数较少的关键词过滤掉,并且将同义词合并,将最初的 20000 个关键词缩减到 33 个具有代表性的关键词。

表 1 预告片数据库对比

图 2 LSMTD 样本展示。黑色单词为电影标题,红色为流派关键词,蓝色为情节关键词。

电影分析框架

为了提高模型学习效率,我们并不是用所有的帧来进行学习,而是以镜头作为单元,因为一个镜头内的帧通常相似度很高。基于镜头,提出的框架将学习任务分解为两个部分,分别是从预告片中学习视觉表示,以及从电影中学习时序结构。这一想法的原因有两个,首先预告片比电影短很多,并且包含重要的镜头,因此我们可以从中学习视觉表示,但是预告片不能保持整部电影的时序结构。因此,为了捕捉时序结构,我们使用基于 LSTM 的模型,利用视觉特征,用自监督的方式进行学习。

从预告片中学习视觉表示

视觉表示模型的目的是学习到能够表示电影镜头的视觉特征,因此可以将其视作一个镜头解码器。

图 3 从预告片中学习视觉表示

该部分模型通过两步将镜头进行解码:通过卷积网络提取每帧的特征,然后将每帧的特征结合成基于镜头的表示。这里需要解决的问题是如何快速有效的训练该模型。

基于镜头的表示

虽然预告片相比于整部电影已经很短,一帧一帧的分析依然是十分耗时的。但是预告片具有一个特殊性质,即预告片中每个镜头的帧之间通常十分相近。基于这一特性,我们可以将预告片视为镜头序列,然后从每个镜头中稀疏采样得到关键帧。

给定一个预告片,我们首先采用一个外部工具将其划分成连贯的镜头序列:S1,S2,…,Sn。从每个镜头中,我们采样 m 帧: \(I_{i1},\cdots ,I_{im}\) ,并且用特征提取器来提取帧特征,记为: \(f(I_{ij};\theta )\) ,theta 是特征提取器的参数。随后,我们就可以通过平均池化得到基于镜头的特征表示:

\(f(S_{i};\theta )=\frac{1}{m}\sum_{j=1}^{m}f(I_{ij};\theta )\)

考虑到卷积神经网络(CNN)的表达能力,我们用 CNN 作为特征提取器。我们设置 m=3,既增强了鲁棒性,也防止过多的帧带来的冗余信息。

训练视觉模型

我们用相关的流派和情节关键词来监督视觉模型的训练。值得注意的是,电影制作人通常会为预告片选择最具有代表性的镜头。因此,预告片中的镜头通常与流派和情节关键词相关。因此我们可以用一种简单的方法来学习模型。我们从预告片中采样 n 个镜头,然后通过另一级别的平均池化累积它们的特征:

\(f(T;\theta )=\frac{1}{n}\sum_{j=1}^{n}f(S_{\phi (j)};\theta )\)

随后,通过一个全连接层和一个 softmax 层,将 \(f(T;\theta )\) 转换成类别预测,然后根据真实标签对模型进行训练。

从电影中学习时序结构

除了视觉表示,时序结构也是电影的一个十分重要的方面。幸运的是,我们不用从头学习这个结构,而是可以利用从预告片中提取的视觉模型。

我们的时序结构模型基于 LSTM 网络,能够保持长范围的依赖,同时对短时间内的变化也很敏感,因此该网络很适合用于捕捉电影的时序结构。该 LSTM 网络将编码过的电影镜头作为输入,并且尝试通过隐状态捕捉语义信息。

为了训练 LSTM 模型,我们提出了一个自监督的学习方法。我们的想法来源于这样的问题:怎样才能知道模型有没有捕捉到序列结构呢?一个自然的方法是让模型基于已知观测预测后面的序列。在我们的问题中,可以通过让模型根据之前的镜头来预测第(m+1)个镜头。但是由于合成镜头过于困难,因此我们将问题转换为:从候选池中选择最好的第(m+1)个镜头。从而将该问题变成一个多选择问答问题。这种问题可以进一步改写成一个三路评分函数: \(s(q,a | C)\) 。其中 q 代表问题,a 代表候选答案,而 C 是条件。对于“镜头预测”的问题,条件 C 为之前的 m 个镜头,a 是候选镜头之一。那么回答问题的过程可以转换为找到 s 值最高的答案:

\(\widehat{i}=\underset{i\in {1\cdots n}}{argmax} s(q,a_{i}|C)\)

我们将这个评分方程表示为一个建立在 CNN 上的 LSTM 网络,如图 4 所示。

图 4 从电影中学习时序模型

在视觉模型得到的特征顶部,我们构建 LSTM 网络,每一个时间步对应电影序列中的一个镜头。在每一步,一个 LSTM 单元将之前状态和当前镜头的视觉特征都作为输入,然后产生一个 256 维的特征,表示为 u。u 将模型对所有镜头的理解进行编码。同时,每一个候选镜头用自己的 1024 维的视觉特征进行表示。

我们将 u 重复 n 次,然后将其与候选镜头表示连接起来,形成一个大小为 n x 1280 的矩阵。这个矩阵通过一系列 1x1 的卷积,压缩成一个长度为 n 的分数向量。最终,通过 softmax 层,这些分数能够转换成归一化的概率值,每个值代表一个选择。我们可以通过最大化正确答案的对数概率来训练网络。

实验结果

为了测试学习模型的能力,我们设置了两个 benchmark 任务,分别是标注分类和镜头预测,并且在 Movie QA benchmark 上测试我们的框架,以从多方视角来评价模型。

为了验证从预告片学习视觉模型的有效性,我们对比了不同设置下的模型。模型分别从电影和预告片的不同子集中学习。表 2 给出了用于训练的 5 种数据集合。

表 2 不同训练集的持续时间和镜头数

我们将 LSMTD 数据集中的 508 部电影分为 3 部分,361 部用于训练(“Movie 361”),41 部用于验证(“Movie 41”),以及 106 部用于测试(“Movie 106”)。对于预告片,我们首先滤除在验证集和测试集中的电影预告片,剩下的组成了“Trailer 33K”,包含大约 33000 个预告片。从这整个预告片的训练集中,我们随机采样了 2000 和 10000 个预告片,构造了两个自己“Trailer 2K”和“Trailer 10K”。我们也构造了一个特殊的子集“Trailer 361”,其中的预告片都对应了 361 部电影。

标注分类

对于每一部电影,我们让模型预测流派和情节关键词。我们分别在 5 个训练子集上训练模型,获得了 5 种不同的模型。在测试过程中,我们尝试两种方法来预测标注:(1)分数平均:将所有采样镜头的预测进行平均得到最终预测。(2)特征 +LSTM:在镜头特征表示上构建 LSTM 网络,然后训练 LSTM 网络来编码镜头序列。对输出进行平均来获得最终预测。

表 3 类别标注实验结果。

可以看出在“Trailer 33K”上训练的模型预测准确率最高。随着预告片数量增加,视觉模型的质量也随之提高。并且,对比在电影上训练的模型和预告片上训练的模型可以看出,在预告片上进行训练能够获得更有效的视觉表征。

Movie Q&A 数据集

我们也在 Movie Q&A benchmark 数据集上测试了视觉模型,来评价学习到的视觉表示与语义理解之间的关系。Movie Q&A 数据集包含关于 400 电影的 14944 个问题,每个问题从 5 个答案中选择一个正确答案。图 5 给出了我们的 Q&A 模型。

图 5 Q&A 模型整体结构。

表 4 电影问答结果

表 4 给出了在“Movie 361”和“Trailer 33K”的测试结果,并且和 SSCB 方法进行比较。可以看出,在预告片上学习到的特征的表现超越了从电影中学习到的特征。这也验证了我们的假设——在预告片上学习电影的视觉表示很有效。

镜头预测

给定 m 个镜头,我们期望时序模型能够预测第(m+1)个镜头。我们将该问题描述为一个多选择 Q&A 问题,问题是“给定 m 个镜头,哪个才是第(m+1)个镜头”。

我们基于 LSMTD 的 508 部电影构建了一个镜头预测的基准:(1)“In Movie”,干扰答案为同一部电影中的不同镜头,(2)“Cross Movie”,干扰答案为从所有 508 部电影中采样得到的镜头。

我们将我们的时序模型与一个简单的基线模型对比,该基线模型将给定镜头的特征平均,然后计算它与测试镜头的特征夹角距离。表 5 给出了实验结果。

表 5 镜头预测准确率

从表中可以看出,我们的时序模型的表现远远超过了基线模型。这表明我们的模型捕捉到了时序结构,从而提升了对下一个镜头的预测准确度。我们也发现“Cross Movie”的准确率比“In Movie”更高,这是因为在同一个电影中的镜头比其他电影中的镜头更有混淆性。

可视化

最后,我们评价视觉模型是否捕捉到了语义概念和视觉观察之间的关系。我们选择了一些电影,并且期望找到与标注响应最高的镜头。

图 6 镜头检索。左边是电影《珍珠港》中与“浪漫”和“战争”关键词对应的镜头。右边是《歌舞青春》 中与“运动”和“音乐”高度对应的镜头。

我们可以看到对检索标注响应较高的镜头之间具有较高的联系,说明视觉模型学到了视觉背后的语义信息。

图 7 《泰坦尼克号》中与情节关键词的响应幅度图。这 3 幅图分别是在“Trailer 33K”上训练的视觉模型 +LSTM,在“Trailer 33K”上训练的视觉模型,以及在“Movie 361”上训练的视觉模型。从对比中可以看出,从预告片中学习视觉信息的效果比从电影中学习的效果要好,并且我们可以通过自监督的 LSTM 重构时序结构。

图 7 给出了《泰坦尼克》的镜头对两个情节关键词“爱”和“反乌托邦”的响应。我们可以观察到在“Trailer 33K”上训练的模型产生了准确的响应,而在“Movie 361”上训练的模型不能捕捉到这些语义概念。

总结

这篇文章提出了一个有效的方法从电影中学习视觉模型。该模型从预告片中学习视觉表征,利用预告片具有鲜明特征的优势。然后从电影中通过自监督方法学习时序结构。我们搜集了一个大型电影和预告片数据集,包含 34K 个预告片和 508 部电影,并且基于此定义了两个任务:标注分类和镜头预测,来评价模型对电影的理解能力。我们也在电影问答任务上测试了我们的框架。这三个实验结果均显示了所提框架的有效性。

查看论文原文:

From Trailers to Storylines: An Efficient Way to Learn from Movies

感谢蔡芳芳对本文的策划和审校。

2018-09-13 18:281581
用户头像

发布了 52 篇内容, 共 30.1 次阅读, 收获喜欢 73 次。

关注

评论

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

C++ | bool变量值在程序运行过程中自动篡改问题解决

中国好公民st

c++ 变量 10月月更

React的useLayoutEffect和useEffect执行时机有什么不同

beifeng1996

React

作为码农,如何让35岁璀璨耀眼

南极仙翁

码农 生活随想 35岁危机 35岁焦虑 10月月更

kubernetes的Controller

急需上岸的小谢

10月月更

数字货币:影响深远的创新

CECBC

Java多线程 ThreadPoolExecutor自定义线程池

Yeats_Liao

后端 Java core 10月月更

搭建一套 gocd 的环境

lihui

CI/CD pipeline gocd

来自大厂 10+ 前端面试题附答案(整理版)

loveX001

JavaScript

2022-10-17:特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等。 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。 给定一个特殊的二进制序列 S,以

福大大架构师每日一题

算法 rust 福大大

Java多线程 CompletionService和ExecutorCompletionService

Yeats_Liao

后端 多线程 Java core 10月月更

Jenkins流水线(pipeline)实战之:从部署到体验

程序员欣宸

Java jenkins 10月月更

元宇宙的当下与未来

CECBC

元宇宙,是噱头还是创新?

CECBC

2022年中国小微普惠数字化进程专题分析

易观分析

小微金融

网络安全之等保2.0测评

网络安全学海

黑客 网络安全 信息安全 渗透测试 等保测评

2022年证券行业818理财节,量变开始转向质变

易观分析

证券 理财节

JS模块化—CJS&AMD&CMD&ES6-前端面试知识点查漏补缺

loveX001

JavaScript

【一Go到底】第十八天---函数的注意事项

指剑

Go golang 10月月更

【ArchSummit】小红书缓存服务多云建设之路

小明Java问道之路

redis 架构 微服务 云原生 10月月更

Java多线程 ThreadPoolExecutor-RejectedExecutionHandler拒绝执行策略

Yeats_Liao

后端 Java core 10月月更

元宇宙持续火爆,这些问题值得思考和警惕

CECBC

Kubernetes的pod

急需上岸的小谢

10月月更

始料未及-- 元宇宙传来好消息,全球轰动

CECBC

Kubernetes的pod调度

急需上岸的小谢

10月月更

你有真正的享受过闲暇吗?

暮春零贰

成长 时间管理 10月月更

大数据入门学习框架

Lansonli

大数据 大数据学习框架 学习大数据

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

聊聊运营活动的设计与实现逻辑

Java 架构 活动运营

用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程

声网

视频 人工智能’ SDK 教程

搞一搞明白Vitepress的文档渲染基础

小鑫同学

前端 markdown vite markdown-it 10月月更

【愚公系列】2022年10月 Go教学课程 032-结构体方法继承

愚公搬代码

10月月更

港中文林达华团队提出计算机视觉新方向:电影情节分析_语言 & 开发_马卓奇_InfoQ精选文章