基于Youtube-8M的视频场景分类

简介       

      首先对于视频和图片分类的区别,我的理解就是视频分类多了一些时间信息。另一方面对于视频分类包括的场景和动作这两类视频分类中,感觉时域信息的重要性也不同。动作分类更加注重时域信息这一点。总之,为了在普通的多张空域图像信息上提取时域信息,通常处理方法有:双流卷积(普通图像的空域信息加上几张图片的光流信息)、循环神经网络RCNN(包括主流的LSTM等)、3D卷积等。无论何种方法,其最终目的都是将图像间的时域信息融合到分类之中。其中谷歌有个名为YouTube-8M dataset的数据集,其中视频数量巨大,而且每年还举办相应的分类比赛。在这里主要是结合谷歌官方给出的基础处理程序以及2017年的the kaggle Youtube-8M Large-Scale Video Understanding challenge视频分类冠军方法做分析。

YouTube-8M数据集特征提取

      对于YouTube-8M dataset的基础代码,其实主要用到了特征提取的代码。谷歌在这个数据集以及代码中给出了一篇论文专门介绍该数据集的用法。整个数据集的所占用的体积是在是太大,如果用于普通单台计算机来训练几乎是难以完成的任务。因此官方也给出了相应的视频对应的帧级特征和视频级特征提取后的数据集。那么何为帧级特征以及视频级特征呢?

      对于一张图片的特征,我们可以分为局部特征还有全局特征。一般的可以将全局特征看做是由局部特征组成的,但是如何组成却有很多种方法。对于局部特征的提取,可以采用SIFT特征提取方法,它是一种局部特征提取方法,另外还有一些经典的局部特征提取算法如SURF、ORB等。对于全局特征提取算法,比较经典的就是GIST了。那么如何看待神经网络中的特征提取呢。一般来说,经过卷积后输出的特征图,可以看成是局部特征,这种局部特征随着神经网络的层数增加,其局部特征的视野也在变大。在全连接层过后一般接具体的分类层了,因此我们可以将全连接层看成是局部特征到全局特征的融合。

      YouTube-8M dataset中的feature_extractor就是利用神经网络对视频的每一帧进行提取,即通过经典的Inception network网络,在分类层的前一层中抽取视频每一帧的特征,此时每一帧的可以看成给一个长度为2048的特征向量Xi。默认值是对视频一秒抽取一帧,每个视频最多抽取300帧。随后将Xi进行PCA降维到长度为1024,并将Xi的内的元素值量化为[-2,2]范围内。将每一个视频抽取的帧进行append,这就是帧级特征。因为视频分类也可能会涉及到音频参与,因此也可以抽取音频特征,最终形成的音频特征为每帧对应128维度,如果不需要音频信息,为了可以很好的用于有音频参与的网络,默认情况下,音频的128维向量的元素值全是0。那么视频级特征这里给出的是最基础版,让每一帧经过PCA得到的1024向量进行sum求和,然后再除以帧的数量求平均,这样得到一个长度1024维的向量就是视频级特征

       乍一看视频级特征处理的也太草率了,确实很草率。还有一点需要说明的就是,把帧级特征采用某种方法进行融合就会得到视频级特征,然后视频级特征经过全连接或者其他分类层后输出相应的预测结果。因此我们要做的就是如何将帧级特征融合的更好,从而形成更好的视频级特征,进而得到更加精确地视频分类。对于某一帧中的物体可以看成是帧级特征中的局部特征,那么帧级特征是不是可以看成是视频级特征的局部特征呢。在YouTube-8M dataset官方给出的特征融合中,有LSTM,average pooling以及DBoF。具体的可以查看该论文。另外需要提一下,在这边论文中,也提到了采用Fisher Vector(FV)和VLAD的方法进行视频级特征的表示,但是却说放在未来进行研究,而2017基于该数据集的视频分类冠军就是基于类似的方法取得的。

Kaggle Youtube 8M WILLOW approach

      这是该项目的GitHub地址,项目提供了七个模型训练方法。其中精度最高的为NetFV。我们只分析采用了NetVLAD和NetFV的方案。这两个方法都用到了VLAD和FV方法思想,而这两种方法用于图像检索具有较好的效果。具体的可以查看相关文献。该项目对应的论文中提到,LSTM并没有把帧间时序信息充分利用起来,证明方法为:即使把一个视频分解成众多帧的序列打乱在输入到LSTM,其视频分类精度没有明显变化。在这里本人感觉,对于侧重于场景分类任务的视频分类不同于动作分类,其时序信息或许没有那么重要,因此就没继续对双流或者3D卷积进行深入研究。当然这只是我个人猜测。总之,论文大致提供两个方向:一,研究时域信息的聚合方法(NetVLAD、NetFV.....等)。二,引入Context Gating机制。对于Context Gating机制,简单可以理解成这样:同样都是树木,在院子里的树木和深林里面的树木表现出来的特征强度是不一样的,可以通过这种门机制将该特征强度进行赛选,因此可以做到,在院子里的场景不会因为有树的存在而被识别成森林场景。

       对于什么是NetVLAD和NetFV,其实他是根据论文而来,该论文通过弱监督学习的方法实现了在少量标注数据的情况下实现识别精度的提高,对于netVLAD论文解读比较好的感觉就是该篇博客了。感觉一句话可以概括的就是:对了VLAD统计的是特征(或词袋中所谓单词,BOW统计的是特征之间的数量)之间的累积残差,并且被分类到某类时是根据K个聚类中心的距离最近原则,这个是一个只为0或者1的离散结果,这种写法是不可微的,因此用到了soft-assignment的算法(该算法主要思想为softMax函数)。同样,NetFV的思想也可以类似的推出。

     在经过Inception network网络输出的n * 1024的矩阵(表示着n张图片)input_feature,进入VLADMode网络。

当然,根据项目的优化或者作者根据具体任务,代码中实现过程跟流程图有所调整,代码实现或许有少许不同。并且还有轻量级的LightVLAD。首先LightVLAD的流程如下:

      代码中:1:首先经过batch_norm层,然后会有一个待优化变量矩阵cluster_weights,其shape=[feature_size, cluster_size],根据矩阵乘法,feature_size在这里为1024.cluster_size可以自定义设置。2: 再次经过batch_num层后进入soft-max接着对其进行reshape(feature_num,cluster_size)。然后进行一次activation=transpose(perm=0,2,1),这样方便跟input_feature矩阵相乘,即上图中的V(vlad)= matmul(activation(a),input_feature(x),这样维度变成了cluster_size * feature_size。3:将V进行transpose(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: False Negative, 被判定为负样本, 但事实上是正样本.
FP: False Positive, 被判定为正样本, 但事实上是负样本.
TN: True Negative, 被判定为负样本, 事实上也是负样本.
TP: True Positive, 被判定为正样本, 事实上也是证样本.

准确率Accuracy = (TP+TN) / (TP+FP+TN+FN), 即预测正确的比上全部的数据.
精确率Precision = TP / (TP+FP), 即在预测为正向的数据中, 有多少预测正确了.
召回率Recall = TP / (TP+FN), 即在所有正向的数据中, 有多少预测正确了.

比如说,图像质量分数评估有两类: 模糊, 有噪声. 将模糊设为正样本, 有噪声设置为负样本。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值