DT(密集轨迹)算法和iDT(改善的密集轨迹)算法

目录

  • 1.前言
    • 1.1图像多尺度技术
    • 1.2图像金字塔
  • 2 密集轨迹算法(DT算法)
    • 算法基本框架
    • 2.1 密集采样特征点
    • 2.2 特征点轨迹跟踪
    • 2.3 基于轨迹的特征提取
      • 2.3.1轨迹与轨迹描述子(trajectories)
      • 2.3.2 运动/结构描述子(HOF,HOG,MBH)
    • 2.4 特征编码
    • 2.5 分类器分类
  • 3 提升的密集轨迹算法(iDT算法)
    • 相机运动估计
    • 特征归一化方式
    • 特征编码—Fisher Vector

1.前言

1.1图像多尺度技术

https://blog.csdn.net/qq_26570133/article/details/78846982
  多尺度图像技术也叫做多分辨率技术(MRA),指对图像采用多尺度的表达,并且在不同尺度下分别进行处理。这样做的理由是很多情况下在一种尺度中不容易看清的或者获取的特性在另外的某种尺度下就很容易发现或者是提取。所以多尺度技术在提取图像特征时更加的常用。要在多尺度情况下对图像进行处理首先要在多尺度情况下对图像进行表达,并且找到各尺度之间的相互联系。而金字塔结构就是一种图像的多尺度表达形式。为了获得多尺度表达所采用的多尺度变换技术基本上可以分为三大类,尺度空间技术,时间尺度技术,时间频率技术。

1.2图像金字塔

  对一幅N * N的图像(N=2n),如果将它在两个方向上各隔一个像素后取出一个像素,这些取出的像素将构成一幅N/2* N/2的图像,也就是说通过在两个方向上进行1:2的亚抽样,可以得到原始图像一个比较粗略的缩略图,这个过程重复进行,直到原始的图像变成一幅1 * 1的图像。通过这个过程可以得到一系列的图像,N * N,N/2 * N/2,N/22 * N/22,…,N/2n * N/2n。所得到的一系列的图像就构成一个金字塔的形状,原始图像对应的是第0层。虽然有很多图像序列,但是金字塔结构的存储空间并不是很大。对一个有N+1层的完整金字塔结构,其中单元的总数为N2(1+1/4+1/42+…+1/4n)<=(4N2)/3。

2 密集轨迹算法(DT算法)

算法基本框架

密集采样特征点
特征点轨迹跟踪
基于轨迹的特征提取
特征编码
分类器分类
DT(密集轨迹)算法和iDT(改善的密集轨迹)算法_第1张图片

2.1 密集采样特征点

DT方法通过网格划分的方式在图片的多个尺度上分别密集采样特征点。在多个空间尺度上采样能保证采样的特征点覆盖了所有空间位置和尺度,通常8个空间尺度已经非常足够了,若图像很大,可以适当增加。后续的特征提取也是在各个尺度上分别进行的。特征点采样的间隔(即网格的大小)W通常取W=5。

下一步的目标即在时间序列上跟踪这些特征点,但在缺乏变化的区域(比如一块白色墙壁中间的点)中跟踪特征点是无法实现的。因此在进行跟踪前要先去除一些特征点。此处的方法是计算每个像素点自相关矩阵的特征值,并设置阈值去除低于阈值的特征点。阈值由下式决定:
在这里插入图片描述
式中 (λ1i2i)是图像 I 中像素点 i 的特征值。0.001为实验确定的一个比较合适的值。下图即为密集采样的一个示例效果图片。
DT(密集轨迹)算法和iDT(改善的密集轨迹)算法_第2张图片
单个像素点的自相关矩阵

  • 计算每个采样点像素的3*3 领域内的自相关矩阵。
  • 计算该点x,y方向的梯度,也就是一阶偏导数(在数字图像中用一阶差分表示,作者代码里面用的是sobel算子计算的一阶中心差分),得到[Ix,Iy],进而得到2x2的梯度协方差矩阵:[Ix,Iy]^T乘[Ix,Iy],它有两个特征值λ1和λ2。这对应了Harris角点检测检测中的Harris矩阵。
  • 先计算x和y两个方向的梯度,然后对图像进行平滑滤波,得到自相关矩阵

2.2 特征点轨迹跟踪

设上一步中密集采样到的某个特征点的坐标为Pt=(xt,yt),则我们可以用下式来计算该特征点在下一帧图像中的位置。
在这里插入图片描述
式中wt=(ut,vt)为密集光流场,是由It和It+1计算得到的,u和v分别代表光流的水平和垂直分量。而M则代表中值滤波器,尺寸为3*3。故该式子是通过计算特征点邻域内的光流中值来得到特征点的运动方向的。
某个特征点在连续的L帧图像上的位置即构成了一段轨迹(Pt,Pt+1,…,Pt+L),后续的特征提取即沿着各个轨迹进行。由于特征点的跟踪存在漂移现象,故长时间的跟踪是不可靠的,所以每L帧要重新密集采样一次特征点,重新进行跟踪。在DT/iDT算法中,选取L=15。

2.3 基于轨迹的特征提取

2.3.1轨迹与轨迹描述子(trajectories)

轨迹本身也可以构成轨迹形状特征描述子。对于一个长度为L的轨迹,其形状可以用(∆Pt,…,∆Pt+L-1)来描述,其中位移矢量∆Pt=(Pt+1 - Pt) = (xt+1 - xt,yt+1 - yt)。在进行正则化后就可以得到轨迹特征描述子了。正则化方式为:
在这里插入图片描述
故最终得到的轨迹特征为15*2=30维向量。

2.3.2 运动/结构描述子(HOF,HOG,MBH)

除了轨迹形状特征,我们还需要更有力的特征来描述光流,DT/iDT中使用了HOF,HOG和MBH三种特征。行为识别笔记:HOG,HOF与MBH特征
首先对这几种特征提取的通用部分进行介绍。沿着某个特征点的长度为L的轨迹,在每帧图像上取特征点周围的大小为N X N的区域,则构成了一个时间-空间体(volume),如算法基本框架图的右半部分所示。对于这个时间-空间体,在进行一次网格划分,空间上每个方向上分为nσ X nσ X nτ 份,时间上则均匀选取[公式]份。故在时间-空间体中共分出[公式]份区域用作特征提取。在DT/iDT中,取N=32,nσ=2,nτ=3,接下来对各个特征的提取细节进行介绍。
HOG特征:HOG特征计算的是灰度图像梯度的直方图。直方图的bin数目取为8。故HOG特征的长度为96(2238)。
HOF特征:HOF计算的是光流(包括方向和幅度信息)的直方图。直方图的bin数目取为8+1,前8个bin于HOG相同,额外的一个bin用于统计光流幅度小于某个阈值的像素。故HOF的特征长度为108(2
239)。
MBH特征:MBH计算的是光流图像梯度的直方图,也可以理解为在光流图像上计算的HOG特征。由于光流图像包括x方向和y方向,故分别计算MBHx和MBHy。MBH总的特征长度为192(2*96)。
在计算完后,还需要进行特征的归一化,DT算法中对HOG,HOF和MBH均使用L2范数归一化。

2.4 特征编码

对于一段视频,存在着大量的轨迹,每段轨迹都对应着一组特征(trajectory,HOG,HOF,MBH),因此需要对这些特征组进行编码,得到一个定长的编码特征来进行最后的视频分类。

DT算法中使用Bag of Features方法进行特征的编码,Bag of Features方法的介绍见这篇博文——Bag of Features (BOF)图像检索算法。在训练码书时,DT算法随机选取了100000组特征进行训练。码书的大小则设置为4000。

在训练完码书后,对每个视频的特征组进行编码,就可以得到视频对应的特征。

BOF算法步骤:
1、构造一个数据集

2、用sift算子对数据集中每幅图提取特征点及描述符

3、采用k-means算法对特征点进行训练生成聚类中心,得到一部视觉字典

4、计算每个视觉单词的权重生成直方图

5、对于输入的检索图像计算sift特征生成直方图

6、构造检索图像到数据库图像的倒排表,对候选图像集通过倒排表快速索引相关图像

7、根据索引结果进行直方图匹配。

2.5 分类器分类

在得到视频对应的特征后,DT算法采用SVM(RBF−χ2核)分类器进行分类,采用one-against-rest策略训练多类分类器。

3 提升的密集轨迹算法(iDT算法)

iDT算法的基本框架和DT算法相同,主要改进在于对光流图像的优化,特征正则化方式的改进以及特征编码方式的改进。这几处改进使得算法的效果有了巨大的提升,在UCF50数据集上的准确率从84.5%提高到了91.2%,在HMDB51数据集上的准确率从46.6%提高到了57.2%。下面分别对几处改进进行进行介绍。

相机运动估计

首先是最重要的一处改进,通过估计相机运动估计来消除背景上的光流以及轨迹。首先看DT算法中在没消除背景干扰时的轨迹分布。
DT(密集轨迹)算法和iDT(改善的密集轨迹)算法_第3张图片
可以看出,由于相机在运动,所以背景上也有很多轨迹,人的轨迹也受到相机运动的很大影响。而这些信息与要识别的动作关系是不大的,属于干扰信息。因此就希望能够识别并消除这些轨迹。而实际上轨迹的运动也是通过计算光流信息进行计算的,因此需要通过估计相机运动,来消除背景区域的光流。

由于相邻两帧图像之间变化比较小,iDT算法假设相邻的两帧图像之间的关系可以用一个投影变换矩阵来描述,即后一帧图像是前一帧图像通过投影变换得到的。因此,估计相机运动的问题就变成了利用前后帧图像计算投影变换矩阵的问题。

为了准确的估计投影变换,iDT算法中采用了两种方法来获得匹配点对。分别为SURF特征以及光流特征。在获得匹配的点对后,就可以利用RANSAC算法估计投影变换矩阵了。具体操作为:记t时刻和t+1时刻的灰度图像分别为It和It+1,用两张图像计算得到投影变换矩阵H(It+1=H X It)。然后用H的逆对It+1进行变换(warp),即Iwarpt+1=H-1 X It+1。Iwarpt+1代表假设不存在相机运动时t+1时刻的图像。用It和It+1就可以计算得到优化过的光流。
此处可以注意到很大的一个问题,那就是图像中人的动作可能比较显著,人身上的匹配点对会使得投影矩阵的估计不准确。因此iDT算法中使用一个huaman detector检测人的位置框,并去除该框中的匹配点对。从而使得人的运动不影响投影矩阵的估计。iDT中使用的是当时效果最好的human detector,其文章为"Weakly supervised learning of interactions between humans and objects"。而现在物体检测领域已经完全被深度学习攻陷了,比较好的方法包括faster-rcnn,ssd等算法。其中ssd的速度很快,效果也不错,推荐使用。
DT(密集轨迹)算法和iDT(改善的密集轨迹)算法_第4张图片
综合以上的改进算法,可以得到如上效果图。图像左侧两列图是不使用human detector的效果,右边两列图是使用human detector时的效果。可以看出加入human detector对效果的提升非常巨大。最下面一行则是比较失败的情况,按照文章中的分析,原因主要包括两点:1)运动模糊;2)人物占图像比例高时相机运动估计不准。

从光流中消除相机运动带来的影响主要有两点好处:
1.运动描述子(主要指HOF和MBH)能更准确的描述动作,用单一描述子的分类准确率比起DT中有很大的提高
2.由于轨迹也是利用光流进行运算的,因此,可以通过设置阈值,消除优化后的光流中位移矢量的幅值小于阈值的轨迹。

特征归一化方式

在iDT算法中,对于HOF,HOG和MBH特征采取了与DT算法(L2范数归一化)不同的方式——L1正则化后再对特征的每个维度开平方。这样做能够给最后的分类准确率带来大概0.5%的提升。

特征编码—Fisher Vector

特征编码阶段iDT算法不再使用Bag of Features方法,而是使用效果更好的Fisher Vector编码,其具体编码方式见我之前写的博文:机器学习笔记:Fisher Vector基本原理与用法。Fisher Vector同样也是先用大量特征训练码书,再用码书对特征进行编码。在iDT中使用的Fisher Vector的各个参数为:

  • 用于训练的特征长度:trajectory+HOF+HOG+MBH=30+96+108+192=426维
  • 用于训练的特征个数:从训练集中随机采样了256000个
  • PCA降维比例:2,即维度除以2,降维后特征长度为213。先降维,后编码
  • Fisher Vector中高斯聚类的个数K:K=256
    故编码后得到的特征维数为2KD个,即109056维。在编码后iDT同样也使用了SVM进行分类。在实际的实验中,推荐使用liblinear,速度比较快。

你可能感兴趣的:(行为识别,算法,opencv,计算机视觉)