项目实训—场景划分(一)

2023-05-16

1、什么是场景(Scene)

场景作为电影讲故事的关键单元,包含了演员的复杂活动及其在物理位置上的互动。识别场景的组成和语义是视觉理解复杂长视频(如电影、电视剧、娱乐节目和综艺节目)的关键一步。与传统视觉问题(如动作识别)中研究的视频相比,电影中的场景通常包含更丰富的时间结构和更复杂的语义信息。

场景变化在电影的叙事中起着重要的作用,举个例子:当我们看下面这些图中的任何一个镜头时,例如第二个镜头中的女人,我们并不能判断出当前的事件是什么。只有当我们考虑到这个场景中的所有镜头,我们才能认识到这是个什么事件:“这个女人在邀请一对情侣和乐队跳舞。”

请添加图片描述

1.1 场景的定义:
场景是一个基于情节的语义单元,其中某一活动发生在某一组角色之间。场景由单个或多个连续的镜头构成,虽然一个场景经常发生在一个固定的地方,但也有可能一个场景在多个地方之间不断穿梭,例如在电影中的打斗场景中,角色从室内移动到室外。

1.2 场景示例:
下图底部的蓝线对应于整个电影时间线,其中深蓝色和浅蓝色区域代表不同的场景。在场景10中,角色在两个不同的地方打电话,因此需要对这个场景有语义上的理解,以防止将它们分成不同的场景。在场景11中,内容变得更加复杂,因为这个直播场景涉及三个以上的地方和角色组。在这种情况下,只有视觉提示可能会无法正确划分出来,因此其他方面比如音频提示变得至关重要。
请添加图片描述

1.3 区分场景(scene)、镜头(spot)、帧(frame)
场景和镜头本质上是不同的。一个镜头是由一个不间断的运行一段时间的摄像机拍摄的,因此在视觉上是连续的;而场景是更高级别的语义单元。一个场景由一系列镜头组成,呈现故事语义连贯的部分(比如上文的第一组镜头组成了一个场景)。使用现有工具基于简单的视觉线索将电影容易地划分成镜头,但是识别构成场景的那些镜头子序列并不容易,因为它需要语义理解,以便发现语义一致但视觉上不同的那些镜头之间的关联。

总结一下:(1)帧:视频中单幅的静态图片;(2)镜头:视频中像素差异不大的连续帧集;(3)场景:视频中语义差异不大的连续帧集。

2、 LGSS:一种局部到全局的多模态电影场景分割方法(A Local-to-Global Approach to Multi-modal Movie Scene Segmentation)

LGSS采用了一种基于镜头的方法,认为场景边界必须是所有镜头边界的子集,这种方法基于这样一种理解:场景分割可以被公式化为二元分类问题,即确定镜头边界是否是场景边。因此先进行镜头切割,再通过地点,人物,动作和音频对镜头进行分类(是否为场景边界)

LGSS 框架通过三个阶段执行场景分割:
(1)从多个方面提取镜头表示(地点,人物,动作和音频)
(2)基于集成的信息进行局部预测
(3)通过解决全局优化问题来优化镜头的分组。

局部到全局的场景分割:

局部到全局的场景分割可以解决分割场景需要识别多个语义方面和使用复杂的时间信息的问题。基于镜头表示si,LGSS 设计了一个三层模型来整合不同层次的上下文信息,即剪辑级(B),、片段级(T)和电影级(G)。模型给出了一系列预测[o1,…,on-1],其中 oi∑{ 0,1} 表示第 i 个和第 (i + 1)个镜头之间的边界是否是场景边界。
请添加图片描述
下面介绍 LGSS 如何获取 si,即如何用多个语义元素表示镜头,然后说明模型的三个层次的细节,即 B、T 和 G。

总体框架如下图所示:
请添加图片描述

1、使用语义元素进行镜头表示
电影是一种典型的多模态数据,包含不同的高级语义元素。场景是一系列镜头共享一些共同元素的地方,例如地点、演员等。因此,考虑这些相关的语义元素对于场景划分是很重要的。在 LGSS 框架中,镜头由四个在场景构成中起重要作用的元素来表示:地点、演员、动作和音频。

获得每个镜头 si 语义特征的过程:
1)使用 ResNet50 对 Places 数据集的关键帧图像进行预训练来获得位置特征
2)使用 Faster-RCNN 在CIM数据集上预训练来检测演员实例,并使用ResNet50 在 PIPA 数据集上预训练提取演员的人物特征
3)使用 TSN 在 AVA 数据集上进行预训练以获得动作特征
4)使用 NaverNet 在 AVA-ActiveSpeaker 数据集上进行预训练来分离台词和背景音,使用短时间傅里叶变换分别在16khz采样率和512个窗口信号长度的镜头中获得它们的特征,并将它们连接起来,以获得音频特征

2、剪辑级别的镜头边界表示
LGSS 提出了一个边界网络(BNet)来模拟镜头边界,BNet(记为B)以2wb 个镜头的电影剪辑作为输入,输出一个边界表示为bi 。基于直觉,边界表示应该捕捉前后镜头之间的差异和关系,BNet 由两个部分组成,即 Bd 和 Br 。Bd由两个时间卷积层建模,每个层分别嵌入边界前后的镜头,通过内积运算来计算它们的差异;Br 的目的是捕捉镜头的关系,它是通过一个遵循最大池的时间卷积层来实现。
请添加图片描述

3、段级粗预测
在得到每个镜头边界 bi 的表示后,问题变成了基于序列 [b1,···,bn−1] 预测二进制标签序列 [o1,o2,···,on−1],可以通过 sequence-to-sequence 模型来解决这个问题。然而,镜头的数量 n 通常大于1000,现有的序列模型很难存储如此长的序列。LGSS 设计了一个片段级的模型,基于一个由 wt 个镜头(wt << n)组成的电影片段来预测一个粗糙的结果。使用序列模型 T,例如Bi-LSTM,使用步幅为 wt/2 的镜头来预测一个粗评分序列[p1,···,pn−1],这里的 pi∈[0,1] 是一个镜头边界成为一个场景边界的概率。
请添加图片描述
然后通过使用阈值τ对pi进行二值化,得到一个对 (oi)'∈{0,1} 的粗预测,它表明第 i 个边界是否为场景边界
请添加图片描述

4、电影级别上的全局最优分组
片段级模型得到的分割结果是不够好的,因为它只考虑了 wt个 镜头上的局部信息,而忽略了整个电影上的全局上下文信息。为了获取到全局的构造,LGSS 提出了一个全局最优模型G来考虑电影水平的上下文。模型把镜头表示 si 和粗预测 (oi)’ 作为输入,oi 的最终结果如下:请添加图片描述

3、电影场景数据集:

为了促进场景理解,构造了数据集MovieScenes,其中包含了21K个场景,是通过对150部电影中的270K个镜头分组得出的。与其他现有的数据集相比,MovieScenes规模巨大,镜头数量多,总持续时间长,涵盖了更广泛的数据源,拥有各种场景。涵盖了种类繁多的流派,包括戏剧、惊悚片、动作片,使得数据集更加全面和通用。带注释的场景长度从10s到120s不等,提供了较大的可变性。

总结

实验结果表明 LGSS 框架比现有方法具有更好的性能,位置、演员、动作和音频都是帮助场景分割的有用信息,且基于局部预测和全局优化的模型对场景分割有很好的效果。请添加图片描述

参考文献:https://arxiv.org/pdf/2004.02678v3.pdf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

项目实训—场景划分(一) 的相关文章

  • rosdep init 错误解决终极方法(药到病除)

    rosdep init 错误解决方法 一 安装ROS执行以下指令时报错二 原因三 解决办法1 查询IP地址2 将IP地址添加进文件3 重新执行指令 成功解决 xff01 xff01 xff01 一 安装ROS执行以下指令时报错 sudo r
  • Intel Realsense T265 在ubuntu下的环境配置

    Intel Realsense T265 在ubuntu下的环境配置 一 T265介绍二 realsense SDK 安装配置1 注册服务器的公钥2 将服务器添加到存储库列表3 安装所需的库 xff0c 开发者和调试包5 插上T265打开
  • SLAM图优化一

    前言 SLAM问题的处理方法主要分为滤波和图优化两类 滤波的方法中常见的是扩展卡尔曼滤波 粒子滤波 信息滤波等 xff0c 熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的 实时的处理数据并矫正机器人位姿 比如基于粒子滤波的SLAM的
  • 编程实现MapReduce操作

    文章目录 一 MapReduce的WordCount应用二 Partitioner 操作三 xff0e 排序实现四 xff0e 二次排序实现五 hadoop实现六 出现的问题与解决方案 提示 xff1a 以下是本篇文章正文内容 xff0c
  • React项目中TS报错解决方案

    Umi amp amp React amp amp Vue3 amp amp TS报错解决方案总结 个人向 Redux开发工具报错window下没有某属性 解决方案 项目根目录创建global d ts文件 span class token
  • Nvidia NX 运行vins-fusion + DenseSurfelMapping

    Nvidia NX 运行vins fusion 43 DenseSurfelMapping 实现姿态估计和稠密建图 xff0c 记录自用 参考博客 xff1a 使用Realsense D435i运行VINS Fusion并建图 从零开始使用
  • UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)

    简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程 xff08 眼在手上 xff09 准备相关文件 span class token constant UR5 span git clone htt
  • 六,WiFi天猫精灵零配详解

    1 xff0c IOT设备配网方法 smartconfig手机热点配网设备热点配网路由器热点配网扫描二维码配网 2 xff0c 什么是零配 概念 xff1a 让已连网的设备告诉未配网的设备路由器的SSID和密码 xff08 天猫精灵语音寻找
  • 蓝牙Mesh

    1 蓝牙mesh介绍 蓝牙Mesh网络模型 xff1a 蓝牙Mesh提高灵活度 xff1a 代理节点 xff08 Proxy xff09 低功耗节点 xff08 Low Power xff09 转发节点 xff08 Relay xff09
  • 实践:设计SLAM系统

    实现一个双目视觉里程计在Kitti数据集中的运行效果 很有必要多看几遍的例程 这个视觉里程计由一个光流追踪的前端和一个局部BA的后端组成 双目只需单帧就可初始化 xff0c 双目存在3D观测 xff0c 实现效果比单目好 程序 xff1a
  • Pytorch 中 Embedding 类详解

    在 NLP 领域 xff0c 可以使用 Pytorch 的 torch nn Embeding 类对数据进行词嵌入预处理 关于词嵌入的解释这里就不做解释咯 xff0c 不明白的阔以先出门左拐找百度 重点说下这个 Embeding 类怎么用的
  • 工业相机测距开发(2):实战篇

    前言 本文将不再涉及原理部分 xff0c 想要了解基础知识的话 xff0c 请看上一篇的文章 xff0c 我们使用的是opencv的里面的函数 xff0c 这里面也是重点看这个函数们 xff0c 我们通过这个函数来得到外参 xff0c 在通
  • LeetCode406:根据身高重建队列

    要求 假设有打乱顺序的一群人站成一个队列 xff0c 数组 people 表示队列中一些人的属性 xff08 不一定按顺序 xff09 每个 people i 61 hi ki 表示第 i 个人的身高为 hi xff0c 前面 正好 有 k
  • LeetCode416:分割等和子集

    要求 给你一个 只包含正整数 的 非空 数组 nums 请你判断是否可以将这个数组分割成两个子集 xff0c 使得两个子集的元素和相等 思路 做一个等价转换 xff1a 是否可以从输入数组中挑选出一些正整数 xff0c 使得这些数的和 等于
  • LeetCode437:路径总和III

    要求 给定一个二叉树的根节点 root xff0c 和一个整数 targetSum xff0c 求该二叉树里节点值之和等于 targetSum 的 路径 的数目 路径 不需要从根节点开始 xff0c 也不需要在叶子节点结束 xff0c 但是
  • LeetCode438:找到字符串中所有字母异位词

    要求 给定两个字符串 s 和 p xff0c 找到 s 中所有 p 的 异位词 的子串 xff0c 返回这些子串的起始索引 不考虑答案输出的顺序 异位词 指由相同字母重排列形成的字符串 xff08 包括相同的字符串 xff09 思路 方法一
  • LeetCode448:找到所有数组中消失的数字

    要求 给你一个含 n 个整数的数组 nums xff0c 其中 nums i 在区间 1 n 内 请你找出所有在 1 n 范围内但没有出现在 nums 中的数字 xff0c 并以数组的形式返回结果 思路 可以把数组中的元素与索引建立一一对应
  • LeetCode461:汉明距离

    要求 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目 给你两个整数 x 和 y xff0c 计算并返回它们之间的汉明距离 思路 方法一 xff1a 使用内置位计数功能 大多数编程语言都内置了计算二进制表达中 1 的数
  • LeetCode494:目标和

    要求 给你一个整数数组 nums 和一个整数 target 向数组中的每个整数前添加 43 或 xff0c 然后串联起所有整数 xff0c 可以构造一个 表达式 xff1a 例如 xff0c nums 61 2 1 xff0c 可以在 2
  • Java中Integer.parseInt()方法最全解析

    介绍 是Integer类中提供的一个静态方法 用于将传入的string类型字符串根据要求转为相应进制的int值 如果没有要求进制则按10进制计算 xff0c 属于java lang包的 xff1b 使用讲解 1 parseInt Strin

随机推荐

  • LeetCode538:把二叉搜索树转换为累加树

    要求 给出二叉 搜索 树的根节点 xff0c 该树的节点值各不相同 xff0c 请你将其转换为累加树 xff08 Greater Sum Tree xff09 xff0c 使每个节点 node 的新值等于原树中大于或等于 node val
  • python 最小堆类型: heapq

    目录 1 heapq 的常用方法 2 几个例子 a 最小堆的创建以及增删 b 如何使用 heapq 创建最大堆 c 获取第 k 大 第 k 小数据 d 列表中的元素是元组 heapq 是 python 的一个库 xff0c 用一个列表来维护
  • LeetCode543:二叉树的直径

    要求 给定一棵二叉树 xff0c 你需要计算它的直径长度 一棵二叉树的直径长度是任意两个结点路径长度中的最大值 这条路径可能穿过也可能不穿过根结点 题目解析 这里返回的是 xff1a 两结点之间的路径长度是以它们之间边的数目表示 最大的直径
  • LeetCode560:和为K的子数组

    要求 给你一个整数数组 nums 和一个整数 k xff0c 请你统计并返回 该数组中和为 k 的连续子数组的个数 思路 方法一 xff1a 暴力解 先固定左边界 xff0c 再去枚举右边 span class token keyword
  • LeetCode581:最短无序连续子数组

    要求 给你一个整数数组 nums xff0c 你需要找出一个 连续子数组 xff0c 如果对这个子数组进行升序排序 xff0c 那么整个数组都会变为升序排序 请你找出符合题意的 最短 子数组 xff0c 并输出它的长度 思路 我们可以假设把
  • LeetCoed617:合并二叉树

    要求 给你两棵二叉树 xff1a root1 和 root2 想象一下 xff0c 当你将其中一棵覆盖到另一棵之上时 xff0c 两棵树上的一些节点将会重叠 xff08 而另一些不会 xff09 你需要将这两棵树合并成一棵新二叉树 合并的规
  • LeetCode621:任务调度器

    要求 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表 其中每个字母表示一种不同种类的任务 任务可以以任意顺序执行 xff0c 并且每个任务都可以在 1 个单位时间内执行完 在任何一个单位时间 xff0c CPU 可以完成
  • LeetCode647:回文子串

    要求 给你一个字符串 s xff0c 请你统计并返回这个字符串中 回文子串 的数目 回文字符串 是正着读和倒过来读一样的字符串 子字符串 是字符串中的由连续字符组成的一个序列 具有不同开始位置或结束位置的子串 xff0c 即使是由相同的字符
  • LeetCode739:每日温度

    要求 给定一个整数数组 temperatures xff0c 表示每天的温度 xff0c 返回一个数组 answer xff0c 其中 answer i 是指对于第 i 天 xff0c 下一个更高温度出现在几天后 如果气温在这之后都不会升高
  • 八大排序算法

    介绍 排序也称排序算法 Sort Algorithm xff0c 排序是将一组数据 xff0c 依指定的顺序进行排列的过程 排序分类 1 内部排序 指将需要处理的所有数据都加载到内部存储器 内存 中进行排序 2 外部排序法 数据量过大 xf
  • 时间复杂度和空间复杂度详解及排序算法复杂度

    时间复杂度 度量一个程序 算法 执行时间的两种方法 1 事前估算法 通过分析某个算法的时间复杂度来判断哪个算法更优 2 事后统计法 这种方法可行 xff0c 但是有两个问题 xff1a 一是要想对设计的算法的运行性能进行评测 xff0c 需
  • Java反编译工具JAD的安装与简单使用

    jad介绍 jad 是一个使用非常广泛的 Java 反编译工具 可以将java编译后的class文件反编译成对应的java文件 下载地址 JAD下载地址 xff0c 点击跳转https varaneckas com jad 按照自己的需求
  • python Counter() 函数

    目录 1 以统计列表中的词频为例 2 寻找出现次数最多的 k 个数 刷 leetcode 时发现了可以很方便地统计词频的 Counter 函数 xff0c 有了这个函数就不用手动的使用 for 循环来手动统计词频啦 xff01 Counte
  • C++11 新特性简介

    1 auto auto是旧关键字 xff0c 在C 43 43 11之前 xff0c auto用来声明自动变量 xff0c 表明变量存储在栈 xff0c 很少使用 在C 43 43 11中被赋予了新的含义和作用 xff0c 用于类型推断 a
  • Java反射(Reflex)机制

    反射概述 Reflection 反射 是Java被视为动态语言的关键 xff0c 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息 xff0c 并能直接操作任意对象的内部属性及方法 加载完类之后 xff0c 在
  • 偏航角、俯仰角、滚动角

    偏航角 俯仰角 滚动角 在姿态估计中 xff0c 常常会提到三个概念 xff0c 就是偏航角 俯仰角和滚动角 姿态估计是物体在三维空间内方向的表征 通常描述物体姿态以大地作为参考系 xff08 标准坐标系 xff09 将世界坐标系 xff0
  • 定时器与计数器的区别

    曾经我在北方工业大学复试的时候 xff0c 有个老师问了我个问题 他说同学你好 xff0c 我看你前面一直都在说深度学习的问题 xff0c 请问你对单片机了解吗 xff1f xff0c 请问定时器与计数器的区别是什么 xff1f 我告诉他
  • 编译make px4_fmu-v2_default upload时,报错ERROR Board can accept larger flash images (2080768 bytes)

    编译make px4 fmu v2 default upload时 xff0c 报错ERROR Board can accept larger flash images 2080768 bytes than board config 103
  • vue中实现axios封装

    vue中实现axios封装 为什么要进行axios封装vue项目安装axios封装前的get和post请求封装后的get和post请求 为什么要进行axios封装 实际开发过程中可能有几种环境 xff0c 开发环境 xff0c 测试环境 x
  • 项目实训—场景划分(一)

    1 什么是场景 xff08 Scene xff09 场景作为电影讲故事的关键单元 xff0c 包含了演员的复杂活动及其在物理位置上的互动 识别场景的组成和语义是视觉理解复杂长视频 xff08 如电影 电视剧 娱乐节目和综艺节目 xff09