转发请注明出处:http://blog.youkuaiyun.com/wzmsltw/article/details/53023363
iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法。由INRIA的IEAR实验室于2013年发表于ICCV。目前基于深度学习的行为识别算法效果已经超过了iDT算法,但与iDT的结果做ensemble总还是能获得一些提升。所以这几年好多论文的最优效果都是“Our method+iDT”的形式。
此前由于项目原因,对iDT算法进行了很多研究和实验,故此处对其核心思路与一些实施的细节进行总结,方便后续回顾,也希望能够在此过程中获得一些新的启发。
介绍的内容主要包含两篇文章的内容,分别是”Dense Trajectories and Motion Boundary Descriptors for Action Recognition”和”Action Recognition with Improved Trajectories”。这两篇都是H. Wang的文章,前者要更早一些,介绍了DT(Dense Trajectories)算法。后者则在前者的基础上进行了改进(improved),主要是引入了对背景光流的消除方法,使得特征更集中于对人的运动的描述。两者的框架大致相同,本文先对DT算法进行介绍,再介绍iDT算法的改进之处。
iDT的代码可以在其个人主页上下到,也可以点击此处下载。
对iDT特征进行FV编码的代码可以在dtfv 下载。
更新了iDT算法的代码解析,见iDT算法用法与代码解析
密集轨迹算法(DT算法)
算法基本框架

如图所示即为算法的基本框架,包括密集采样特征点,特征点轨迹跟踪和基于轨迹的特征提取几个部分。后续的特征编码和分类过程则没有在图中画出。
密集采样
DT方法通过网格划分的方式在图片的多个尺度上分别密集采样特征点。在多个空间尺度上采样能保证采样的特征点覆盖了所有空间位置和尺度,通常8个空间尺度已经非常足够了,若图像很大,可以适当增加。后续的特征提取也是在各个尺度上分别进行的。特征点采样的间隔(即网格的大小)W通常取W=5。
下一步的目标即在时间序列上跟踪这些特征点,但在缺乏变化的区域(比如一块白色墙壁中间的点)中跟踪特征点是无法实现的。因此在进行跟踪前要先去除一些特征点。此处的方法是计算每个像素点自相关矩阵的特征值,并设置阈值去除低于阈值的特征点。阈值由下式决定:
式中 (λ1i,λ2i) 是图像I中像素点i的特征值。0.001为实验确定的一个比较合适的值。下图即为密集采样的一个示例效果图片。

轨迹与轨迹描述子(trajectories)
设上一步中密集采样到的某个特征点的坐标为 Pt=(xt,yt) ,则我们可以用下式来计算该特征点在下一帧图像中的位置。