DT算法来自论文"Dense Trajectories and Motion Boundary Descriptors for Action Recognition"
iDT算法来自论文"Action Recognition with Improved Trajectories"
密集采样特征点具体分为如下几个步骤:
下一步的目标就是在时间序列上跟踪这些特征点,从而形成轨迹。
对于一个长度为L的轨迹,其形状可以用 ( Δ P t , . . . , Δ P t + L − 1 ) (ΔP_t,...,ΔP_{t+L−1}) (ΔPt,...,ΔPt+L−1)来描述,
其中位移矢量:
Δ P t = ( P t + 1 − P t ) = ( x t + 1 − x t , y t + 1 − y t ) ΔP_t=(P_{t+1}−P_t)=(x_{t+1}−x_t,y_{t+1}−y_t) ΔPt=(Pt+1−Pt)=(xt+1−xt,yt+1−yt)
则轨迹特征描述子为:
T = ( Δ P t , . . . , Δ P t + L − 1 ) ∑ t + L − 1 j = t ∣ ∣ Δ P j ∣ ∣ T=\frac{(ΔP_{t},...,ΔP_{t+L-1})}{∑_{t+L-1}^{j=t}||ΔP_j||} T=∑t+L−1j=t∣∣ΔPj∣∣(ΔPt,...,ΔPt+L−1)
故最终得到的轨迹特征为L*2=30维。(15帧图片,每帧分别在x,y方向的位移矢量)。
沿着某个特征点的长度为L的轨迹,在每帧图像上取特征点周围的大小为N×N的区域,则构成了一个时间-空间体(volume),如算法基本框架图的右半部分所示。对于这个时间-空间体,在进行一次网格划分,空间上每个方向上分为 n σ n_σ nσ份,时间上则均匀选取 n τ n_τ nτ份。故在时间-空间体中共分出 n σ × n σ × n τ n_σ×n_σ×n_τ nσ×nσ×nτ份区域用作特征提取。在DT/iDT中,取 N = 32 , n σ = 2 , n τ = 3 N=32,n_σ=2,n_τ=3 N=32,nσ=2,nτ=3,接下来对各个特征的提取细节进行介绍。
对于一段视频,存在着大量的轨迹,每段轨迹都对应着一组特征(trajectory,HOG,HOF,MBH),因此需要对这些特征组进行编码,得到一个定长的编码特征来进行最后的视频分类。
DT算法中使用Bag of Features方法进行特征的编码,在训练码书时,DT算法随机选取了100000组特征进行训练。码书的大小则设置为4000。
在训练完码书后,对每个视频的特征组进行编码,就可以得到视频对应的特征。
在得到视频对应的特征后,DT算法采用SVM ( R B F − χ 2 核 ) (RBF−χ2核) (RBF−χ2核)分类器进行分类,采用one-against-rest策略训练多类分类器。
iDT算法的基本框架和DT算法相同,主要改进在于以下几点:
具体做法见论文原文。
从光流中消除相机运动带来的影响主要有两点好处:
DT:对于HOF,HOG和MBH特征采取L2范数归一化;
iDT: 对于HOF,HOG和MBH特征采取L1正则化后, 再对特征的每个维度开平方。
DT:特征编码采用Bag of Features方法;
iDT: 特征编码采用Fisher Vector编码。实际应用中Fisher Vector同样也是先用大量特征训练码书,再用码书对特征进行编码。
***Note:***在iDT中使用的Fisher Vector的各个参数为:
故编码后得到的特征维数为 2 K D 2KD 2KD个,即109056维。在编码后iDT同样也使用了SVM进行分类。在实际的实验中,推荐使用liblinear,速度比较快。
注:
参考博客:https://blog.csdn.net/wzmsltw/article/details/53023363