STAPLE算法 基于C++ /Opencv实现步骤以及代码详解

时间:2024-04-13 15:22:20

Staple Algorithm

C++ implementation of staple algorithm for object tracking.

由于最近在做DSST和STAPLE算法跟踪效果的比较(使用自己的数据集),所以整理一下如何使用C++环境跑STAPLE:
Step1: 这里感谢贡献C++代码的大神 xuduo35
源码地址:https://github.com/xuduo35/STAPLE
Clone源码之后,使用CMakeList创建自己的sln解决方案,我这里使用的是CMake3.14.2,source code = (where is your source code); where to build binaries = (create a new folder named: bin in your source code url)
STAPLE算法 基于C++ /Opencv实现步骤以及代码详解
然后就是加载必要的库,这里用到的肯定就是OPENCV…知道自己opencv在那里吧?…反正就是很麻烦…
然后Configure->Generate->Open Project一气呵成
Step2: 之后我们打开工程文件之后找到main.cpp,大神这里把全部的追踪以及训练等方法都写到了main里面,虽然没有DSST封装的好,但是对于初学者很友好…毕竟找东西很方便…
记得提前配置乱糟糟的opencv库什么的,这里我就不赘述了…我也述不明白
下面带大家了解一下代码里的具体结构:
STAPLE算法 基于C++ /Opencv实现步骤以及代码详解
groundtruth文件是一个包含了第一帧跟踪框坐标的txt文件,
STAPLE算法 基于C++ /Opencv实现步骤以及代码详解
其中坐标数据为float型数据,并且顺序为A->C->B->D,实际上程序中使用的仅有A点坐标和矩形的长和宽。
STAPLE算法 基于C++ /Opencv实现步骤以及代码详解

STAPLE算法 基于C++ /Opencv实现步骤以及代码详解
因为要进行两个算法效率的对比,所以需要把数据导出,方便日后的数据分析,这里我在训练循环外创建了一个csv文件用于存储相关的测试数据。
STAPLE算法 基于C++ /Opencv实现步骤以及代码详解
下面就是跟踪可视化的环节:
STAPLE算法 基于C++ /Opencv实现步骤以及代码详解
没了…
最后的跟踪效果是:
STAPLE算法 基于C++ /Opencv实现步骤以及代码详解

结论

实际上STAPLE算法考虑到相关滤波器模板类特征HOG对于形变不敏感的缺点,结合颜色直方图的特征使得STAPLE面对运动目标发生形变以及运动模糊都十分鲁棒,所以相当于是DSST算法的加强版,采用了Learning the template socre(HOG) + learning the histogram score(simple color histogram) 特征融合的方法,通过线性组合实现。通过一个跟踪框的测试,我们得到的STAPLE算法的FPS值达到60,这意味着一秒60帧的效率,还是非常可观的,但是因为测试需要多个跟踪框同时进行,在没有多线程的情况下,FPS达到15左右,实际上和控制变量情况下的DSST算法效果差不多(DSST 大约在20-30之间)。但是通过其他比赛用数据集的测试我们得出结论是STAPLE在精度上高于DSST算法,但是速度仍比较欠缺,而FCT速度更快,但精度更低。

Reference

xuduo35.(2018).C++ implementation of staple algorithm for object tracking.Retrieved from https://github.com/xuduo35/STAPLE