行为识别笔记:Stacked Fisher Vector基本原理
2016-07-28 11:49
357 查看
Stacked Fisher Vector是Xiaojiang Peng在“Action Recognition with
Stacked Fisher Vectors”一文中提出的用于动作识别的算法。SFV与FV结合的方法达到了当时state-of-the-art的结果。
上一篇介绍了Fisher
Vectors的基本原理。FV的码书训练与编码过程为:
1.选择GMM中K的大小
1.用训练图片集中所有的特征(或其子集)来求解GMM(可以用EM方法),得到各个参数;
2.取待编码的一张图像,求得其特征集合;
3.用GMM的先验参数以及这张图像的特征集合求得其fishervector;
4.在对训练集中所有图片进行2,3两步的处理后可以获得fishervector的训练集,然后可以用SVM或者其他分类器进行训练。
以iDT描述子为例,在iDT特征的生成过程中,是在整段视频中提取描述子的集合,再用FV进行编码获得Fisher
Vector。这样的编码对图像局部的特征有很好的表示能力,但难以描述更全局,更复杂的结构。因此作者提出了一种“deep”的结构,将两个FV编码层堆叠在一起,就得到了Stacked
Fisher Vector。其结构如下图所示:
第一层FV:
给定一个大小为W*H*L的视频V,首先先做时间-空间域上的子空间采样,如下图所示,此处各个方向上可以取几个固定的长度,比如width可以取W/2,W;height可以去H/2,H;time上取(L/3,2L/3,L)等。通过扫描可以获得大量的subvolumes。由于本文中用到的iDT特征是一种轨迹特征,因此在获取子空间后会做一个筛选,去掉轨迹数目少于一个给定阈值的子空间。
对于每个子空间,计算其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降维算法进行降维,将A中ai的维度从2*K1*d降低到p,p与第一层FV输入特征长度相近。
降维后与第一层FV相似,需要用PCA+Whitenting做解相关。之后就可以做第二层FV(size
of K2)。第二层同样用power+L2正则化。文中提到第二层的结果要在entire videos再做aggregate,此处不是很明白,因为第一层应该已经用了entire
videos的信息了。所以我的理解是第一层的视频是整段视频中的一段,第二层则将每段的结果做FV后聚合成一个完整的用来描述视频的特征。
Stacked Fisher Vectors”一文中提出的用于动作识别的算法。SFV与FV结合的方法达到了当时state-of-the-art的结果。
上一篇介绍了Fisher
Vectors的基本原理。FV的码书训练与编码过程为:
1.选择GMM中K的大小
1.用训练图片集中所有的特征(或其子集)来求解GMM(可以用EM方法),得到各个参数;
2.取待编码的一张图像,求得其特征集合;
3.用GMM的先验参数以及这张图像的特征集合求得其fishervector;
4.在对训练集中所有图片进行2,3两步的处理后可以获得fishervector的训练集,然后可以用SVM或者其他分类器进行训练。
以iDT描述子为例,在iDT特征的生成过程中,是在整段视频中提取描述子的集合,再用FV进行编码获得Fisher
Vector。这样的编码对图像局部的特征有很好的表示能力,但难以描述更全局,更复杂的结构。因此作者提出了一种“deep”的结构,将两个FV编码层堆叠在一起,就得到了Stacked
Fisher Vector。其结构如下图所示:
第一层FV:
给定一个大小为W*H*L的视频V,首先先做时间-空间域上的子空间采样,如下图所示,此处各个方向上可以取几个固定的长度,比如width可以取W/2,W;height可以去H/2,H;time上取(L/3,2L/3,L)等。通过扫描可以获得大量的subvolumes。由于本文中用到的iDT特征是一种轨迹特征,因此在获取子空间后会做一个筛选,去掉轨迹数目少于一个给定阈值的子空间。
对于每个子空间,计算其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降维算法进行降维,将A中ai的维度从2*K1*d降低到p,p与第一层FV输入特征长度相近。
降维后与第一层FV相似,需要用PCA+Whitenting做解相关。之后就可以做第二层FV(size
of K2)。第二层同样用power+L2正则化。文中提到第二层的结果要在entire videos再做aggregate,此处不是很明白,因为第一层应该已经用了entire
videos的信息了。所以我的理解是第一层的视频是整段视频中的一段,第二层则将每段的结果做FV后聚合成一个完整的用来描述视频的特征。
相关文章推荐
- php学习1-----制作PHP留言板:
- 题目25 A Famous Music Composer
- Sublime ctags 函数跳转插件安装
- Murano Weekly Meeting 2016.07.05
- Django session
- Kotlin Reference(二)-基础部分
- 【NYOJ58】最小步数
- 别猜白块滑动效果实现
- Studio中的项目接入百度地图sdk后,地图不能正常显示及出现 errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败 问题的解决方法
- 谈 UIView Animation 编程艺术
- CSS学习笔记--基础(一)
- 关于mysql的join(图)
- 70.打印所有Spring boot载入的bean【从零开始学Spring Boot】
- APP测试要点
- 【OpenJudge】c语言_计算2的幂
- 80个Python经典资料(教程+源码+工具)汇总
- mysql 的一些基本操作
- codevs1922(二分图最大独立集)
- 我是如何在GitHub上开源一个项目的(截图说明) (VS2010可以安装git插件)
- USB有时adb shell连不上设备