运行iDT算法代码及后续特征编码

来源:互联网 发布:网络言论自由的事例 编辑:程序博客网 时间:2024/06/11 11:59

DT&IDT算法应该算是行为识别领域中经典中的经典了,自从13年提出以来,在HMDB-51和UCF-101等若干个数据库上得到了非常好的效果,虽然DT&IDT算法做不过深度学习,但是由于其算法的有效性,现在大部分都是以“Ours+IDT”的形式呈现在论文里,并且加上了IDT后,结果的确能得到很明显的提升。
具体IDT算法的讲解可以参考博客:行为识别笔记:improved dense trajectories算法(iDT算法)
IDT算法的代码可以在作者的主页上下载,另外作者给出的代码只包括了密集采样+轨迹跟踪+特征提取三个部分,后续的特征编码部分请点击此处下载。


1. 运行IDT算法代码

下载好代码后可以仔细阅读一下Readme文件,首先需要配置好Opencv和ffmpeg两个库,具体的版本请参考Readme文件。配置好后就可以在目录下直接make,编译好的可执行文件在./release/下。
可以运行他的demo视频来看一下是否编译成功:./release/DenseTrackStab ./test_sequences/person01_boxing_d1_uncomp.avi,如果编译成功的话会在屏幕上打印出一系列的数字,这些就是轨迹特征以及HOG, HOF和MBH特征。
IDT代码只是将各个特征打印了出来,如果需要改成保存到文件的话,更改第248-251行的代码即可:

PrintDesc(iTrack->hog, hogInfo, trackInfo);PrintDesc(iTrack->hof, hofInfo, trackInfo);PrintDesc(iTrack->mbhX, mbhInfo, trackInfo);PrintDesc(iTrack->mbhY, mbhInfo, trackInfo);

另外,在做自己的数据库时,不可能一个视频一个视频的去输入,这时可以写一个vim脚本,来批量运行,可以参考如下代码:

#!/usr/bin/env bashcmd="release/DenseTrackStab"filePath="" #数据存放路径fileType=".txt"function readfile(){    for file in `ls $1`    do        if [ -d $1"/"$file ]        then            readfile $1"/"$file        else            echo $file            $cmd $1"/"$file        fi    done}readfile $filePath

2. 特征编码

后续的特征编码采用了dtfv代码运行,具体可以参考src/中的Readme.rst文件,大致步骤如下:

1. 下载vl_feat并编译

编译好vl_feat工具箱后,将vlfeats/bin/glnx64中的libvl.so文件拷贝到dtfv/src/vl文件夹中,如果拷贝glnx86中的libvl.so后编译时会报错

2. 编译

  1. 在src文件夹中输入make进行编译:
    这里写图片描述
  2. 改变路径
    在../script/extract_fv.py文件中更改一下几个变量:dtBin、fvBin、tmpDir、pID、pcaList,具体可以参考Readme文件。

  3. 运行代码
    在../data/文件夹中运行:python extract_fv.py [videoList] [outputDir] [totalCores]。之后会在tmpDir中得到resize之后的视频文件,每个视频将在outputDir文件夹中得到五个文件,分别以[Videoname].avi.[traj|hog|hof|mbhx|mbhy].fv.txt命名。


遇到的bug:
这里写图片描述
error while loading shared libraries: libvl.so: cannot open shared object file: No such file or directory
【解决方法】LD_LIBRARY_PATH=$LD_LIBRARY_PATH:dtfv-master/src/vl
LD_LIBRARY_PATH=$LD_LIBRARY_PATH: dtfv-master/src/alglib

(注意,路径要输入的是绝对路径)