【目标跟踪Opencv与fDsst总结(C++程序)】

虽然现有好多跟踪算法,在OTB和VOT跟踪算法评价数据集上通过种种诸如中心位置像素误差,平均重叠率等评价其好坏,但是对于一个工程实践人员来说,我只关心算法实际效果和速度如何。因此我就把自己用到的opencv里面跟踪算法API和fDsst跟踪算法进行了一个实践。跟踪目标很简单,就是1920X1080的无人机单个目标,看一下哪个实际效果速度更快。并绘制其轨迹形状。

绘制轨迹的思路很简单,就是使用一个数组存储轨迹跟踪点中心坐标,然后当跟踪点数目大于2后可采用opencv中的line绘制线函数,或者直接用circle函数绘制中心点坐标即可,然后再将其显示。

由于代码太多,所以全部代码(修改输入视频路径即可使用)

github传送门:https://github.com/TakumiWzy/trackingTarget

效果如下:

本文对Opencv中的opencv_contrib模块tracking.hpp中的几种跟踪算法API进行使用,并对比了fDsst跟踪算法的效果。

环境配置:Opencv3.4+opencv_contrib3.4模块。(3.X时代以后,opencv把一些不太完善、性能不稳定的模块,如DNN模块,xfeatures2d包含sift和surf,tracking等模块。放在里面,用户可以自行选择使用cmake编译,详情见github介绍opencv_contrib

平台:Vs2017+Win10

1.用到的对比跟踪算法:

  1. fDsst:(C++代码)
  2. MIL:(Visual Tracking with Online Multiple Instance Learning (MIL))
  3. TLD:(Tracking-Learning-Detection)
  4. MedianFlow: (中值流跟踪算法,是属于TLD跟踪算法中的Tracking部分。)
  5. KCF: (High-speed tracking with kernelized correlation filters听到最多就是这个了好多相关滤波都是根据这个改进的。)
  6. Boosting: (基于Haar cascades(AdaBoost)背后所用的机器学习算法相同)
  7. CSRT: 比KCF稍精确,但速度不如KCF。
  8. GOTURN: Generic Object Tracking Using Regression Networks(这是OpenCV中唯一深度学习为基础的目标检测器。使用caffe模型进行跟踪。 Caffe模型和原始文本文件必须存在于代码所在的目录中。 这些文件也可以从opencv_extra存储库下载)使用方法:https://www.learnopencv.com/goturn-deep-learning-based-object-tracking/

2.相关滤波算法简介。

因为opencv里面的跟踪算法都是比较老的了,fdsst算是一个比较新的而且速度效果都还不错的算法。其是基于dsst跟踪算法的一个改进版本。作者都是林雪平大学的Martin Danelljan。纵观其发表的论文,可以发现CN(color name或称颜色空间)也是其发表的。而CN又是根据CSK改进的。而CSK->KCF/DCF/CN,又是另外一个作者João F. Henriques。而CSK又是根据MOSSE改进的。而MOSSE又是David S. Bolme J.终于到发源地了,没错就是这篇2010年的CVPR《isual object tracking using adaptive correlation filters》将相关滤波引入目标跟踪算法领域后开始被后面广泛应用。这里就简单做个总结。相关滤波跟踪算法基本上就是在解决从目标框改进优化训练一个比较好的相关滤波器。

3.fDsst简介。

DSST(Accurate Scale Estimation for Robust Visual Tracking)(2014年),加入尺度信息的相关滤波器跟踪算法。跟踪主要分为两块,即两个独立滤波器的训练和测试和更新。一个位置滤波器(加入了约束项来提高鲁棒性能,计算方法和更新方法类似),一个尺度滤波器(采用的是一种快速的尺度空间跟踪方式,即在定位位置中心开始向内向外采集样本,大小是一种非线性的指数缩放关系,基于离原始大小越近越精细,越远越粗略的想法,code中用的底是1.02,采集33个。)。

fDsst(Discriminative Scale Space Tracker)(2017年)是前者一个优化版本。fDSST是对DSST的加速优化,fDSST采用了两个技巧对算法进行了大幅加速,加速后的优势就是搜索框可以更大了,所以精度上也有提升。两个技巧是:特征降维和插值。对于位置滤波器,PCA特征降维,paper用线性核。(具体细节还得需理解代码之后)

4.代码效果:

由于网上fdsst代码好多是Matlab的,或者是C++的但是都是在OTB数据集上跑的,我找了找C++代码后改了一些输入格式,然后可以直接运行,需要把头文件加到项目文件下,修改一下自己的视频或者图片集的输入路径即可。

main函数代码:(其余代码见github

1920x1080视频无人机目标跟踪FPS:

目标跟踪算法实际FPS效果
fDsst45.4545
MIL1.65489
TLD0.592768
MedianFlow3.93391
KCF58.3386
Boosting0.02333
CSRT4.43131
GOTURN

5.46648

最后一个算法需要下载:goturn.caffemodel.zip.00X四个模型文件,然后使用7zip合并四个压缩文件,再将goturn.prototxt和goturn.caffemodel两个文件到工程目录下。

(PS:不知道是不是视频太大原因,有些算法速度好慢。。。)

 

参考资料:

https://zhuanlan.zhihu.com/p/27865265

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值