基于Youtube-8M的视频场景分类
简介
⾸先对于视频和图⽚分类的区别,我的理解就是视频分类多了⼀些时间信息。另⼀⽅⾯对于视频分类包括的场景和动作这两类视频分类
中,感觉时域信息的重要性也不同。动作分类更加注重时域信息这⼀点。总之,为了在普通的多张空域图像信息上提取时域信息,通常处理
⽅法有:双流卷积(普通图像的空域信息加上⼏张图⽚的光流信息)、循环神经⽹络RCNN(包括主流的LSTM等)、3D卷积等。⽆论何
种⽅法,其最终⽬的都是将图像间的时域信息融合到分类之中。其中⾕歌有个名为的数据集,其中视频数量巨⼤,⽽且每年还举办相应的分
类⽐赛。在这⾥主要是结合⾕歌官⽅给出的基础处理程序以及2017年的t视频分类冠军⽅法做分析。
YouTube-8M数据集特征提取
对于的基础代码,其实主要⽤到了特征提取的代码。⾕歌在这个数据集以及代码中给出了⼀篇论⽂专门介绍该数据集的⽤法。整个数据
集的所占⽤的体积是在是太⼤,如果⽤于普通单台计算机来训练⼏乎是难以完成的任务。因此官⽅也给出了相应的视频对应的帧级特征和视
频级特征提取后的数据集。那么何为帧级特征以及视频级特征呢?
对于⼀张图⽚的特征,我们可以分为局部特征还有全局特征。⼀般的可以将全局特征看做是由局部特征组成的,但是如何组成却有很多
种⽅法。对于局部特征的提取,可以采⽤SIFT特征提取⽅法,它是⼀种局部特征提取⽅法,另外还有⼀些经典的局部特征提取算法如
SURF、ORB等。对于全局特征提取算法,⽐较经典的就是GIST了。那么如何看待神经⽹络中的特征提取呢。⼀般来说,经过卷积后输出
的特征图,可以看成是局部特征,这种局部特征随着神经⽹络的层数增加,其局部特征的视野也在变⼤。在全连接层过后⼀般接具体的分类
层了,因此我们可以将全连接层看成是局部特征到全局特征的融合。
中的feature_extractor就是利⽤神经⽹络对视频的每⼀帧进⾏提取,即通过经典的Inceptionnetwork⽹络,在分类层的前⼀层中抽取
视频每⼀帧的特征,此时每⼀帧的可以看成给⼀个长度为2048的特征向量Xi。默认值是对视频⼀秒抽取⼀帧,每个视频最多抽取300帧。
随后将Xi进⾏PCA降维到长度为1024,并将Xi的内的元素值量化为[-2,2]范围内。将每⼀个视频抽取的帧进⾏append,这就是帧级特
征。因为视频分类也可能会涉及到⾳频参与,因此也可以抽取⾳频特征,最终形成的⾳频特征为每帧对应128维度,如果不需要⾳频信息,
为了可以很好的⽤于有⾳频参与的⽹络,默认情况下,⾳频的128维向量的元素值全是0。那么视频级特征这⾥给出的是最基础版,让每⼀
帧经过PCA得到的1024向量进⾏sum求和,然后再除以帧的数量求平均,这样得到⼀个长度1024维的向量就是视频级特征。
乍⼀看视频级特征处理的也太草率了,确实很草率。还有⼀点需要说明的就是,把帧级特征采⽤某种⽅法进⾏融合就会得到视频级特
征,然后视频级特征经过全连接或者其他分类层后输出相应的预测结果。因此我们要做的就是如何将帧级特征融合的更好,从⽽形成更好的
视频级特征,进⽽得到更加精确地视频分类。对于某⼀帧中的物体可以看成是帧级特征中的局部特征,那么帧级特征是不是可以看成是视频
级特征的局部特征呢。在官⽅给出的特征融合中,有LSTM,averagepooling以及DBoF。具体的可以查看该论⽂。另外需要提⼀下,在
这边论⽂中,也提到了采⽤FisherVector(FV)和VLAD的⽅法进⾏视频级特征的表⽰,但是却说放在未来进⾏研究,⽽2017基于该数
据集的视频分类冠军就是基于类似的⽅法取得的。
KaggleYoutube8MWILLOWapproach
这是该项⽬的GitHub,项⽬提供了七个模型训练⽅法。其中精度最⾼的为NetFV。我们只分析采⽤了NetVLAD和NetFV的⽅案。这两
个⽅法都⽤到了VLAD和FV⽅法思想,⽽这两种⽅法⽤于图像检索具有较好的效果。具体的可以查看相关⽂献。该项⽬对应的中提
到,LSTM并没有把帧间时序信息充分利⽤起来,证明⽅法为:即使把⼀个视频分解成众多帧的序列打乱在输⼊到LSTM,其视频分类精度
没有明显变化。在这⾥本⼈感觉,对于侧重于场景分类任务的视频分类不同于动作分类,其时序信息或许没有那么重要,因此就没继续对双
流或者3D卷积进⾏深⼊研究。当然这只是我个⼈猜测。总之,论⽂⼤致提供两个⽅向:⼀,研究时域信息的聚合⽅法(NetVLAD、
NetFV.....等)。⼆,引⼊ContextGating机制。对于ContextGating机制,简单可以理解成这样:同样都是树⽊,在院⼦⾥的树⽊和深林
⾥⾯的树⽊表现出来的特征强度是不⼀样的,可以通过这种门机制将该特征强度进⾏赛选,因此可以做到,在院⼦⾥的场景不会因为有树的
存在⽽被识别成森林场景。
对于什么是NetVLAD和NetFV,其实他是根据⽽来,该论⽂通过弱监督学习的⽅法实现了在少量标注数据的情况下实现识别精度的提
⾼,对于netVLAD论⽂解读⽐较好的感觉就是博客了。感觉⼀句话可以概括的就是:对了VLAD统计的是特征(或词袋中所谓单词,BOW
统计的是特征之间的数量)之间的累积残差,并且被分类到某类时是根据K个聚类中⼼的距离最近原则,这个是⼀个只为0或者1的离散结
果,这种写法是不可微的,因此⽤到了soft-assignment的算法(该算法主要思想为softMax函数)。同样,NetFV的思想也可以类似的推
出。
在经过Inceptionnetwork⽹络输出的n*1024的矩阵(表⽰着n张图⽚)input_feature,进⼊VLADMode⽹络。
当然,根据项⽬的优化或者作者根据具体任务,代码中实现过程跟流程图有所调整,代码实现或许有少许不同。并且还有轻量级的
LightVLAD。⾸先LightVLAD的流程如下:
代码中:1:⾸先经过batch_norm层,然后会有⼀个待优化变量矩阵cluster_weights,其shape=[feature_size,cluster_size],根据矩
阵乘法,feature_size在这⾥为r_size可以⾃定义设置。2:再次经过batch_num层后进⼊soft-max接着对其进⾏
reshape(feature_num,cluster_size)。然后进⾏⼀次activation=transpo(perm=0,2,1),这样⽅便跟input_feature矩阵相
乘,即上图中的V(vlad)=matmul(activation(a),input_feature(x),这样维度变成了cluster_size*feature_size。3:将V进⾏
transpo(perm=0,2,1),并进⾏L2正则化,最后reshape成(-1,K*D)的vector后再进⾏⼀次L2正则化作为NetVLAD的输出。其
实和上⾯的流程图⼏乎⼀样,主要是加了具体实施的要点。总体待优化变量为cluster_weights
⾮轻量级的NetVLAD流程如下:流程到上图中a的过程和轻量级都是⼀样的,即经过soft-max后进⾏⼀次reshape后得到activation。
然后对张量的-2⽅向(即feature_num)求均值得到a_sum,接着与有⼀个shape为[1,feature_size,cluster_size]的张量
cluster_weights2相乘,注意这⾥是相乘⽽不是矩阵乘,或许这⾥称为是系数乘,该张量的元素是变量,待优化的。得到这个有了系数的
均值a后,即与activation相减后得到上图中的V。这⾥的V即使上图中的V也是轻量级lightVLAD分析的V。总体待优化变量为
cluster_weights和cluster_weights2.
其实,在该项⽬中存在了轻量级的NetVLAD,就介绍了⼀下lightNetVLAD,真正利⽤VLAD思想的是⾮轻量级的⽹络。并且在真实
训练过后的模型,在推理过程利⽤轻量级lightNetVLAD的推理⽹络,加载NetVLAD训练出来的模型,其精度仅仅略有下降。在⽐赛过程中
或许仅仅百分之零点⼏的精度就有可能领先,但是在⼯程化⾓度讲,这样速度上的降低可能得不偿失
对于netFV过程,如果有时间在补充张流程图,从代码上看是相对于VLAD复杂的。感兴趣的可以阅读代码。
评价指标
有时,我们平常所说的准确率并不⼀定能详细代表模型判断结果的好坏。特别是⽬标检测中,召回率的指标⼏乎不可缺少。这个指标有
点‘漏⽹之鱼’量的多少的意思。因为我们需要统计的是⽹住的鱼以及漏⽹之鱼的量,⾄于⾥⾯有虾的数量的影响就不在考虑。
FN:FalNegative,被判定为负样本,但事实上是正样本.
FP:FalPositive,被判定为正样本,但事实上是负样本.
TN:TrueNegative,被判定为负样本,事实上也是负样本.
TP:TruePositive,被判定为正样本,事实上也是证样本.
准确率Accuracy=(TP+TN)/(TP+FP+TN+FN),即预测正确的⽐上全部的数据.
精确率Precision=TP/(TP+FP),即在预测为正向的数据中,有多少预测正确了.
召回率Recall=TP/(TP+FN),即在所有正向的数据中,有多少预测正确了.
⽐如说,图像质量分数评估有两类:模糊,有噪声.将模糊设为正样本,有噪声设置为负样本。
本文发布于:2022-11-25 15:41:24,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/19363.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |