2016视觉目标跟踪总结

最近学习视觉目标跟踪算法,主要了解了几个主流的跟踪算法,kcf,stc,dsst,算法原理网上很多,这里就不再赘述,只对跟踪效果做了测试记录。

Kcf

全名Kernelized Correlation Filters

其中hog特征用的fhog(Felzenszwalb’s hog,是DPM的作者提出的一种改进的hog)

效果比较好的,题目叫KCF-DSST实际上是kcf,下载地址:

https://github.com/liliumao/KCF-DSST

测试了一下,达到100fps,经过改进后,能达到250fps,算法速度挺快,但是目标快速移动容易跟丢,适合跟踪慢速移动的目标。


Stc

时空上下文跟踪算法,是最近几年出来比较新的跟踪,基友opencv和c++编写,配置好后可以直接运行,跟踪效果理想,对于跟踪一块理解非常好

博文地址:

http://blog.csdn.net/zouxy09/article/details/16889905

文中提出stc一种简单却非常有效的视觉跟踪方法。更迷人的一点是,它速度很快,原作者实现的Matlab代码在i7的电脑上达到350fps

 

下载地址:

http://download.csdn.net/detail/qq_23274769/9531181

我自己在pc上测试了一下,opencv版,一帧需要20ms,也就是50fps,目标快速移动也容易跟丢,但是比kcf效果好一点点。

 

 dsst算法

VOT(视觉目标跟踪大赛)2014竞赛的冠军

DSST(Accurate Scale Estimation for Robust Visual Tracking)在2014年VOT上夺得了第一名,算法简洁,性能优异

源码下载地址:

windows+opencv环境:

http://download.csdn.net/detail/jaoo_f/9311931

跨平台+opencv环境:

https://github.com/klahaag/cf_tracking

这个需要opencv3.0以上版本。

测试了一下,30帧的相机,达到100fps左右。跟踪效果最好,目标快速移动不容易跟丢;跟丢了还可以找回来;目标框越大,匹配速度越快,能到115fps左右

这里重点介绍一下qt配置:

头文件需要添加内部目录:


QMAKE_CXXFLAGS += -std=c++11


INCLUDEPATH += .
INCLUDEPATH += ./main
INCLUDEPATH += ./3rdparty/tclap
INCLUDEPATH += ./3rdparty/cv_ext
INCLUDEPATH += ./3rdparty/piotr
INCLUDEPATH += ./3rdparty/piotr/src
INCLUDEPATH += ./cf_libs/common
INCLUDEPATH += ./cf_libs/dsst
INCLUDEPATH += ./cf_libs/kcf


INCLUDEPATH += /usr/local/include
INCLUDEPATH += /usr/local/include/opencv
INCLUDEPATH += /usr/local/include/opencv2
INCLUDEPATH += /usr/local/include/opencv2/core
INCLUDEPATH += /usr/local/include/opencv2/highgui
INCLUDEPATH += /usr/local/include/opencv2/imgproc
INCLUDEPATH += /usr/local/include/opencv2/imgcodecs
INCLUDEPATH += /usr/local/include/opencv2/flann
INCLUDEPATH += /usr/local/include/opencv2/photo
INCLUDEPATH += /usr/local/include/opencv2/video
INCLUDEPATH += /usr/local/include/opencv2/features2d
INCLUDEPATH += /usr/local/include/opencv2/objdetect
INCLUDEPATH += /usr/local/include/opencv2/calib3d
INCLUDEPATH += /usr/local/include/opencv2/ml
INCLUDEPATH += /usr/local/include/opencv2/contrib
#LIBS += `pkg-config opencv --cflags --libs`
#INCLUDEPATH += /usr/local/include //usr/local/include/opencv //usr/local/include/opencv2
LIBS += /usr/local/lib/libopencv_calib3d.so \
/usr/local/lib/libopencv_core.so.3.0 \
/usr/local/lib/libopencv_features2d.so \
/usr/local/lib/libopencv_flann.so \
/usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_imgcodecs.so \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_ml.so \
/usr/local/lib/libopencv_objdetect.so \
/usr/local/lib/libopencv_photo.so \
/usr/local/lib/libopencv_shape.so \
/usr/local/lib/libopencv_stitching.so \
/usr/local/lib/libopencv_superres.so \
/usr/local/lib/libopencv_videoio.so \
/usr/local/lib/libopencv_video.so \
/usr/local/lib/libopencv_videostab.so
#LIBS += -L/usr/local/lib/ -lopencv_highgui -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_objdetect


还有这个:https://github.com/gnebehay/DSST


vs版本的,可以没有sse。

https://github.com/ferzik85/dsst

python 版本的:https://github.com/ugv-tracking/dsst_tracking

备注:程序中使用到HOG特征,因此需要用到Piotr's Toolbox工具箱。

        下载地址可以参考:http://vision.ucsd.edu/~pdollar/toolbox/doc/index.html

        对于32位的机器运行KCF程序需要使用gradientMex.mexw32(作者提供的是64位的),可在这里下载到能在32位机上运行的程序。

这几个项目都用了sse汇编指令加速,如果再arm系统上,就不支持__128浮点运算了。

我们知道,在C/C++代码中,可以插入汇编代码提高性能。现在的指令集有了很多的高级指令,如果我们希望使用这些高级指令来实现一些高效的算法,就可以在代码中嵌入汇编,使用SSE等高级指令,这是可行的,但是如果对汇编不太熟悉,不愿意使用汇编的人来说,其实也是可以的,这就是Compiler Intrinsics(http://msdn.microsoft.com/zh-cn/site/26td21ds)。

MDNet算法

视觉目标跟踪VOT2015竞赛的冠军,学习多域卷积神经网络的视觉跟踪(Learning Multi-Domain Convolutional Neural Networks for Visual Tracking)。代码https://github.com/HyeonseobNam/MDNet

 

这个适合在高端pc或者服务器上跑,不适合在移动端arm上跑。

目前效果好的主要两大类吧,一种基于CNN,一种基于correlation filter,的确效果很不错,但是前者受硬件限制,也受速度限制,后者更轻量级,效果和速度也很赞。
tracking坑快一年了,大牛们速度惊人,这两年发展很迅速。

 


你可能感兴趣的:(dsst,视觉跟踪)