文章目录
- 1 概述
- 2 模型结构简述
- 2.1 TransNet
- 2.2 TransNet V2
- 3 数据集的构建
- 4 模型效果
- 5 参考文献
1 概述
有些时候,一段视频是由多段短视频拼接而成的。拼接可以是直接拼接(硬拼接,见图2),也可以是由一个转场过渡拼接(软拼接,见图2)。我们希望拿到其中的每个小片段作为素材,这个时候就要做视频切割了。这样的视频切割有的做法的目标是找拼接的边界,故称之为shot boundary detection,也有做法的目标是找每个小片段,也称之为scene detection。
基于传统方法去做,就是找相邻帧之间的差异,然后设定一个阈值去判断,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。
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。
3 数据集的构建
模型的结构就算不去深究它也没关系,因为说到底就是拿3D CNN去train一发,结构上的改进带来的提升也没有特别大。数据是我比较关心的一块,一个好的数据集,往往比一个好的结构有更棒的提升作用。在这个shot boudary detection的任务当中,有一个非常令人兴奋的事情就是,它的数据集几乎是零成本的。
我们只需要找到一大堆短视频,时长可以不要太长也不要太短,然后我们随意去硬拼接或者软拼接这些视频就有了我们的数据集。因为拼接是我们自己做的,因此shot boundary在哪里我们也是比谁都清楚的。唯一需要成本的就是测试集。为了检验数据的真实效果,测试集还是需要人工去标注一批的。
这里要注意的就是,我们使用的短视频需要是没有转场的镜头在里面的,不然就有脏数据了。
另一个值得一提的是,粗剪的时候,设计师希望把一些虚帧也给剪掉,这也有办法,我们把这些虚帧也作为转场标进去就可以了。不过这个可能得要人工去标注了。能不能合成,还真没调研过,能合成自然是最好的。
4 模型效果
最终的结果就是对每一帧打一个分,可见下图4。预测transition第一帧的head的概率值是图中的绿色柱子,预测整个transition的是图中的蓝色柱子。可以看一下软拼接部分这两者概率的不同。可以根据实际场景去使用,但基本还是只用绿色柱子。
数据集的构成是对模型的效果有一定影响的,在TransNet V2中,作者测试了人工标注的数据集和合成的数据集用于训练对模型最终效果的影响。real是人工标注的,cuts是合成的硬拼接,dissolves是合成的软拼接。从在三个数据集下测试的效果可以看出人工标注的训练集,并没有带来太多的提升,反而还是用合成的数据集更好。结果如下表1所示,其中的指标为f1-score。
不同模型的效果如下表2所示,其中的指标为f1-score。可见TransNet V2相对而言更好。
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