论文阅读 - TransNet and TransNet V2

文章目录

  • 1 概述
  • 2 模型结构简述
    • 2.1 TransNet
    • 2.2 TransNet V2
  • 3 数据集的构建
  • 4 模型效果
  • 5 参考文献

1 概述

有些时候,一段视频是由多段短视频拼接而成的。拼接可以是直接拼接(硬拼接,见图2),也可以是由一个转场过渡拼接(软拼接,见图2)。我们希望拿到其中的每个小片段作为素材,这个时候就要做视频切割了。这样的视频切割有的做法的目标是找拼接的边界,故称之为shot boundary detection,也有做法的目标是找每个小片段,也称之为scene detection。
pic1

图1 硬拼接视频

pic2

图2 软拼接视频

基于传统方法去做,就是找相邻帧之间的差异,然后设定一个阈值去判断,pyscenedetect这个库就是做这个事的。这个库可以把大部分的硬拼接切割的比较好,但是存在两个问题:

  • 对于高速运动的物体,且视频帧率不高时,相邻帧之间的差异就会很大,这就会被误判为是一个硬拼接
  • 对于软拼接,效果是单纯的不好,特别是那些比较长的转场。

于是深度学习就出场了。TransNet以及TransNet V2都是为了解决以上这两个问题而出现的,后者是前者的升级版。

2 模型结构简述

2.1 TransNet

TransNet的结构由下图所示,其官方实现可见这里,其结构可见图3。这个模型的结构非常简单,输入为长度为NNN的序列帧,且被resize为48×2748 \times 2748×27,序列帧会经过4个Dilated 3D CNN,这四个Dilated 3D CNN的dilation rates在时间维度上是不同的。作者说这么做是因为相对于标准的3D CNN,要看到同样的感受野,这样的做法会减少训练参数量。然后把这些特征concat起来,这整个block叫做一个DDCNN cell。如果再加上一个max pooling,那就是SDDCNN block,这样的cell和block会堆叠多次,可以很深。最后经过两层全连接和softmax,输出N×2N \times 2N×2的一个向量,表示输入的每帧是否是shot boundary。
pic3

图3 TranNet结构图

2.2 TransNet V2

TransNet V2是TransNet的升级版,其官方实现可见这里,其结构可见图4。它是在TransNet的基础上进行改进的,主要的改进点有如下几个:

  • 加入了batch normalization和残差网络结构。
  • 在训练时加入了噪声。
  • 将3D的k×k×kconvolutionk \times k \times k \ convolutionk×k×k convolution分解为了2D的k×kconvolutionk \times k \ convolutionk×k convolution和一个kernel size为kkk的1D temporal convolution。这个做法可以强迫模型去分别学习图像特征和时间维度的特征。
  • 把连续帧的RGB color histogram和卷积输出的特征相似性作为特征,也就是图4中的两个红色方框。
  • 增加了一个head,用于预测整个transition的frames,这个多加的head仅用于训练,不用于预测,另一个head还是和TransNet中保持一致。也就是在遇到软拼接的时候,原始的head只预测中间那一帧为shot boundary,新增加的head会预测整个transition的所有帧为shot boundary。

pic4

图3 TranNet V2结构图

3 数据集的构建

模型的结构就算不去深究它也没关系,因为说到底就是拿3D CNN去train一发,结构上的改进带来的提升也没有特别大。数据是我比较关心的一块,一个好的数据集,往往比一个好的结构有更棒的提升作用。在这个shot boudary detection的任务当中,有一个非常令人兴奋的事情就是,它的数据集几乎是零成本的。

我们只需要找到一大堆短视频,时长可以不要太长也不要太短,然后我们随意去硬拼接或者软拼接这些视频就有了我们的数据集。因为拼接是我们自己做的,因此shot boundary在哪里我们也是比谁都清楚的。唯一需要成本的就是测试集。为了检验数据的真实效果,测试集还是需要人工去标注一批的。

这里要注意的就是,我们使用的短视频需要是没有转场的镜头在里面的,不然就有脏数据了。

另一个值得一提的是,粗剪的时候,设计师希望把一些虚帧也给剪掉,这也有办法,我们把这些虚帧也作为转场标进去就可以了。不过这个可能得要人工去标注了。能不能合成,还真没调研过,能合成自然是最好的。

4 模型效果

最终的结果就是对每一帧打一个分,可见下图4。预测transition第一帧的head的概率值是图中的绿色柱子,预测整个transition的是图中的蓝色柱子。可以看一下软拼接部分这两者概率的不同。可以根据实际场景去使用,但基本还是只用绿色柱子。
结果可视化图

图4 结果可视化图

数据集的构成是对模型的效果有一定影响的,在TransNet V2中,作者测试了人工标注的数据集和合成的数据集用于训练对模型最终效果的影响。real是人工标注的,cuts是合成的硬拼接,dissolves是合成的软拼接。从在三个数据集下测试的效果可以看出人工标注的训练集,并没有带来太多的提升,反而还是用合成的数据集更好。结果如下表1所示,其中的指标为f1-score。

表1 不同训练集的效果比较

pic5
不同模型的效果如下表2所示,其中的指标为f1-score。可见TransNet V2相对而言更好。

表2 不同训练集的效果比较

pic6

5 参考文献

[1] TransNet: A deep network for fast detection of common shot transitions
[2] TransNet V2: An e!ective deep network architecture for fast shot transition detection
[3] pyscenedetect

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工厂方法模式及php实现

工厂方法模式: 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共…

Chapter7-8_Deep Learning for Constituency Parsing

文章目录1 什么是Constituency Parsing2 解决方案2.1 Chart-based Approach2.2 Transition-based Approach2.3 Grammer as Foreign Language本文为李弘毅老师【Deep Learning for Constituency Parsing】的课程笔记,课程视频youtube地址,点这里&#x1f…

html插入flash代码_初学者必备Web开发APP,支持代码补全,一键插入代码,厉害了!...

新手学前端神器,HTML代码补全功能太牛了!讲过学习后端的许多优秀APP,这次来推荐一下前端用的软件。前端,包含了HTMLCSSJavaScript这一整套的流程,缺一不可。其实,市面上用来编写前端的优秀APP有很多&#x…

七、PHP框架Laravel学习笔记——资源控制器

一.资源控制器 声明:资源控制器是某个特定场景下的产物,完全理解需要 PHP 项目基础;比如开发过博客系统,留言帖子系统之类,具有类似思维,否则你懂的…;只是学习了 PHP 基础&#xf…

留言板练习

这个练习做下来发现大体的步骤怎么走怎么做基本清晰&#xff0c;能实现可是做的很糙&#xff0c;没有老师细致……好多需要判断的地方没有想到 denglu.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT…

Chapter7-9_Deep Learning for Dependency Parsing

文章目录1 什么是Dependency Parsing2 模型结构本文为李弘毅老师【Deep Learning for Dependency Parsing】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT&#xff0c;若有侵权&#xff0c;必…

八、PHP框架Laravel学习笔记——表单伪造和 CSRF 保护

一&#xff0e;表单伪造 之前一直用的 GET 请求方式&#xff0c;而表单可以实现 POST 方式&#xff0c;我们来实验下&#xff1a; 先在 TaskController 创建两个方法&#xff0c;一个表单页&#xff0c;一个接受表单数据路由&#xff1b; public function form() { return v…

高通的快充协议_高通:后续骁龙旗舰将标配100W快充

高通于昨晚正式推出了Quick Charge 5充电解决方案&#xff0c;经过3年时间的准备&#xff0c;高通这一次在Quick Charge快充的升级可谓重磅&#xff0c;在功率上实现了重大突破&#xff0c;达到了100W。官方数据显示&#xff0c;高通Quick Charge 5的性能较前代平台显著提升&am…

团队作业(六)

团队项目设计文档 1、系统框图 用户对手机进行设置&#xff0c;包括时间和解锁方式轨迹。手机对用户进行闹铃提醒&#xff0c;同时提供解锁方式。手机对数据库发送数据以保存响铃时间&#xff0c;数据库对手机提供响铃时间信息。 系统框图如下&#xff1a;2、系统结构框图 项目…

Chapter7-10_Deep Learning for Question Answering (1/2)

文章目录1 什么是Question Answering(QA)2 按答案分类2.1 答案是一个单词2.2 答案是多个选项2.3 答案是source中的一段话2.4 答案是生成的一段话3 按source分类3.1 source是网页3.2 source是图片或者视频3.3 source是语音3.4 source是视频本文为李弘毅老师【Deep Learning for …

十、PHP框架Laravel学习笔记——数据库配置入门

一&#xff0e;配置数据库 框架支持原生、查询构造器和 Eloquent ORM(关系型对象映射器)来操作数据库&#xff1b; 数据库的配置在 config/database.php&#xff0c;如果是本地可以直接配置.env 文件&#xff1b; 我们通过.env 文件配置数据库连接的相关信息&#xff0c;以提…

selenium firefox驱动_Python3+selenium配置常见报错解决方案

第一个报错问题geckodriver executable needs to be in PATH1.1如果启动浏览器过程中报如下错误&#xff1a;Traceback (most recent call last):File "", line 1, in <module>File "D:\test\python3\lib\site-packages\selenium\webdriver\firefox\webdr…

Chapter7-11_Deep Learning for Question Answering (2/2)

文章目录1 Simple Question: Match & Extract2 Complex Question: Reasoning3 Dialogue QA本文为李弘毅老师【Deep Learning for Question Answering (2/2)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自…

十一、PHP框架Laravel学习笔记——构造器的查询.分块.聚合

一&#xff0e;构造器查询 table()方法引入相应的表&#xff0c;get()方法可以查询当前表的所有数据&#xff1b; //获取全部结果 $users DB::table(users)->get(); first()方法&#xff0c;可以获取到第一条数据&#xff1b; //获取第一条数据 $users DB::table(user…

mac 批量清空文件夹文件_【XSS 聚宝瓶】文件及文件夹批量改名工具

置顶公众号&#xff0c;否则不能及时收到新文章推荐给朋友&#xff0c;让朋友也能收到免费文章在公众号发送函数或应用的关键字&#xff0c;即可免费获取对应教程一、功能说明我们在日常办公的时候&#xff0c;经常会碰到文件名不规范&#xff0c;想要整理很不方便&#xff0c;…

论文阅读 - Beat Tracking by Dynamic Programming

文章目录1 概述2 总体框架3. 计算Onset Strength Envelope4 计算全局的Tempo5 基于动态规划计算beats6 参考文献1 概述 有背景音乐的短视频拼接时&#xff0c;如果两个视频的拼接点刚好在背景音乐的某个节拍点上&#xff0c;那么合成的视频看起来&#xff0c;听起来&#xff0…

十二、PHP框架Laravel学习笔记——构造器的查询表达式

一&#xff0e;select 查询 select()方法可以制定你想要的列&#xff0c;而不是所有列&#xff1b; //设置显示的列&#xff0c;设置列别名 $users DB::table(users)->select(username as name, email)->get(); addSelect()方法&#xff0c;可以在你基础的查询构造器…

python解释器的工作原理_Python GIL全局解释器锁详解(深度剖析)

通过前面的学习&#xff0c;我们了解了 Pyton 并发编程的特性以及什么是多线程编程。其实除此之外&#xff0c;Python 多线程还有一个很重要的知识点&#xff0c;就是本节要讲的 GIL。 GIL&#xff0c;中文译为全局解释器锁。在讲解 GIL 之前&#xff0c;首先通过一个例子来直观…

Chapter7-12_Controllable Chatbot

文章目录1 Chatbot面临的问题2 控制Chatbot的输出2.1 直接Finetune2.2 输入添加控制特征2.3 只有独白3 展望本文为李弘毅老师【Controllable Chatbot】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老…

十三、PHP框架Laravel学习笔记——构造器的 where 派生查询

一&#xff0e;where 派生查询 orWhere()方法&#xff0c;可以通过连缀实现两个或以上的 or 条件查询&#xff1b; //where() orWhere 实现 or 条件查询 $users DB::table(users) ->where(price, >, 95) ->orWhere(gender, 女) ->toSql(); 通过闭包&#xff0…