行为识别笔记:Stacked Fisher Vector基本原理

时间:2022-05-03 16:05:05

 Stacked Fisher VectorXiaojiang Peng在“Action Recognition with Stacked Fisher Vectors”一文中提出的用于动作识别的算法。SFVFV结合的方法达到了当时state-of-the-art的结果。

   上一篇介绍了Fisher Vectors的基本原理。FV的码书训练与编码过程为:

1.选择GMMK的大小

1.用训练图片集中所有的特征(或其子集)来求解GMM(可以用EM方法),得到各个参数;

2.取待编码的一张图像,求得其特征集合;

3.GMM的先验参数以及这张图像的特征集合求得其fishervector

4.在对训练集中所有图片进行2,3两步的处理后可以获得fishervector的训练集,然后可以用SVM或者其他分类器进行训练。

   iDT描述子为例,在iDT特征的生成过程中,是在整段视频中提取描述子的集合,再用FV进行编码获得Fisher Vector。这样的编码对图像局部的特征有很好的表示能力,但难以描述更全局,更复杂的结构。因此作者提出了一种“deep”的结构,将两个FV编码层堆叠在一起,就得到了Stacked Fisher Vector。其结构如下图所示:

行为识别笔记:Stacked Fisher Vector基本原理

第一层FV

   给定一个大小为W*H*L的视频V,首先先做时间-空间域上的子空间采样,如下图所示,此处各个方向上可以取几个固定的长度,比如width可以取W/2,W;height可以去H/2,H;time上取(L/3,2L/3,L)等。通过扫描可以获得大量的subvolumes。由于本文中用到的iDT特征是一种轨迹特征,因此在获取子空间后会做一个筛选,去掉轨迹数目少于一个给定阈值的子空间。

行为识别笔记:Stacked Fisher Vector基本原理

   对于每个子空间,计算其iDT特征,定义其长度为d。在进行FV编码之前,特征要先用PCA+Whitening做解相关,以满足GMM的独立同分布假设。然后用预学习的GMM模型(size of K1)对其进行fv编码,得到一个fv,长度为2*K1*d(原版的fv长度应该是(2*D+1)*K-1,此处应该是算法做了简化),记作ai,此处每个fv编码最后的归一化步骤使用的是Power+L2归一化。将M个子空间中得到的ai做集合,则得到一个fv的集合 A={a1,a2….aM},称作local FVs。在得到A后,还要对A整体做L2归一化。最后A的大小为2*K1*D*M,可以看出其维度很高。

 

第二层FV

第一层得到的Local FVs维度过高,因此需要先做降维,本文中使用max-margin降维算法进行降维,将Aai的维度从2*K1*d降低到pp与第一层FV输入特征长度相近。

降维后与第一层FV相似,需要用PCA+Whitenting做解相关。之后就可以做第二层FVsize of K2)。第二层同样用power+L2正则化。文中提到第二层的结果要在entire videos再做aggregate,此处不是很明白,因为第一层应该已经用了entire videos的信息了。所以我的理解是第一层的视频是整段视频中的一段,第二层则将每段的结果做FV后聚合成一个完整的用来描述视频的特征。