1. 程式人生 > >行為識別筆記:Stacked Fisher Vector基本原理

行為識別筆記:Stacked Fisher Vector基本原理

 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。其結構如下圖所示:


第一層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降維演算法進行降維,將Aai的維度從2*K1*d降低到pp與第一層FV輸入特徵長度相近。

降維後與第一層FV相似,需要用PCA+Whitenting做解相關。之後就可以做第二層FVsize of K2)。第二層同樣用power+L2正則化。文中提到第二層的結果要在entire videos再做aggregate,此處不是很明白,因為第一層應該已經用了entire videos的資訊了。所以我的理解是第一層的視訊是整段視訊中的一段,第二層則將每段的結果做FV後聚合成一個完整的用來描述視訊的特徵。