目标跟踪算法综述
上篇文章写的是目标跟踪的主要研究方向,这篇文章主要关注的是算法的发展历程,主要用来了解这个领域的发展现状与未来方向。在学习之前,对这个方向有一个整体的认识和发展路线,这样才不会陷于某一个细节。
目标跟踪就是在视频序列中的每幅图像中找到感兴趣的目标运动位置,目标跟踪的算法整体是从传统的特征提取加机器学习到现在的基于神经网络的深度学习。昨天已经介绍过跟踪算法的分类,今天主要总结一下这些算法,主要分为经典算法,相关滤波算法,检测跟踪相结合的算法,深度学习框架等。
经典算法
经典算法主要有几类,有很多算法都是在这些经典算法的基础上改进的。但是经典算法在工业上一般只作为辅助方法来使用,毕竟深度学习算法才是当下的热门选择,但作为了解其基本原理还是很有必要的。
MeanShift 基于概率密度分布,沿着概率梯度上升的方向,迭代收敛到概率密度分布的局部峰值上。粒子滤波(Particle Filter)基于粒子分布统计,通过寻找一组在状态空间中传播的随机样本来近似的表示概率密度函数,用样本均值代替积分运算,进而获得系统状态的最小方差估计的过程。卡尔曼滤波(Kalman Filter)不对目标的特征进行建模,而是对目标的运动模型建模,估计目标在下一帧的位置。还有一类经典算法是基于特征点的光流跟踪算法,对目标物体提取特征点,在下一帧计算特征的光流匹配点,进行统计从而得到目标位置。
相关滤波(Corrrelation Filter,CF)
相关滤波是当前研究的一个重点,起源于信号处理领域,一个优点是引入了快速傅里叶变换(DFT)从而使得算法有很大的速度提升。
最早的可用于目标检测的CF算法是MOSSE,它的全名为Minimum Output Sum of Squared Error Filter,它作为CF的开篇算法,引出了后来更多性能更加优越的算法。
能够使得相关滤波算法能够用于实时性应用的首个算法是CSK(the Circulant Structure of Tracking-by-detection with Kernels),通过使用高斯核计算相邻两帧之间的相关性,取响应最大的点为预测的目标中心。该算法是固定目标大小的,对发生尺度变化的目标不够鲁棒。基于循环矩阵的核跟踪方法,并在数学上解决了密集采样(dense sample)的问题,能够学习到图像整个区域的图像块特征,并用傅里叶变换实现了检测过程。
在CSK算法上进行改进得到的算法是核化相关滤波器(kernelized correlation filter,KCF),这个算法的特征来源是HOG,SIFT等。后续还提出了多通道颜色特征(Color Names,CN),CN能够提取多颜色通道特征,比前面的HOG,SIFT有了更大的进步。在CN的基础上还提出了多尺度跟踪的相关滤波器(Discriminatiive Scale Space Tracker,DSST),DSST 能够处理多尺度的目标跟踪。现在还发展出SRDCF这样的算法来克服边界效应,用空间正则化惩罚相关滤波系数,使得算法的结果能够与深度学习相媲美。
检测与跟踪相结合的算法
检测与特征相结合的算法就是目标跟踪的判别式算法,前面的经典算法都是采用的生成式算法。这种算法是将要跟踪的目标作为前景,其他的部分作为背景,首先检测出目标的位置,然后再进行跟踪,并且把这跟踪问题看做了一个二分类问题,即一个区域是前景还是背景。所以,检测和跟踪相结合的算法可以分为特征提取和分类器两部分,先检测,后跟踪。
这类算法需要自己发掘目标图像的特征,然后采用机器学习算法来进行分类,常见的用来目标检测的机器学习算法有SVM,Adaboost,随机森林等。在2013年的 VOT 竞赛中,一个使用结构化的 SVM 分类器也曾经获得冠军,2014年的冠军是 DSST (相关滤波系列)算法。
而这之中也提出许多关于特征提取的设计方法,下面主要介绍几个常见的特征提取方法。
Haar 特征使用积分图来计算,将边缘特征、线性特征、中心特征和对角线特征,组合成特征模板,最早使用于人脸检测。尺度不变特征变换(Scale-invariant feature transform ,SIFT)获取图像关键点附近的梯度信息来描述运动目标,并且对图像的旋转,尺度缩放,亮度的变化不敏感。
梯度直方图特征(Histogram of oriented gradients ,HOG) 时将图像分为小的连通区域,然后采集各个区域的方向梯度直方图,再把这些直方图组合起来就得到了特征描述符。HOG能够对图像微小的几何变换和光照变化保持不变性,所以HOG特别适合处理图像中的行人检测。
可变形部件模型(Deformable Part Model,DPM)可看作HOG的拓展,是个非常成功的目标检测算法,曾连续多次获得VOC(Visual Object Class)的冠军,其发明人也被授予了“终身成就奖”。
深度学习
深度学习可以说有一统江湖的趋势,不管是图像分类还是识别,跟踪,在最近的各类竞赛中都能够拔得头筹。而深度学习的研究也是当前的一个热点,各种框架和算法层出不穷,包括Pytorch,tensorflow等。而对于计算机视觉而言,深度学习的主要应用都是基于CNN的,不需要自己定义特征,深度学习有对特征强大的描述能力,能够自己学习出所需要的特征,这效果比自己定义的特征效果要更好,正因为如此,可以使用端对端(end to end)的深度学习框架。
深度学习的用于目标跟踪的算法有两类,一类是用分类,一类是用回归,不过它们都是使用的CNN为基础。
基于分类的算法有R-CNN,Fast R-CNN,Faster R-CNN,其中他们对于检测窗口的选择有很大改进,R-CNN采用的是滑动窗口,对所有区域进行检测,而Fast R-CNN采用的是selective search,只对可能的区域进行检测,Faster R-CNN 则采用候选区域网络(Region Proposal Network,RPN),更进一步提高了精度。
基于回归的深度学习框架有 YOLO(you only look once) 和 SSD(single shot multibox),它们加快了计算的速度,使算法更加实用。此外,还有结合CNN和DPM,SVM等的方法,此处不再过多介绍。
这里贴一下具体的论文地址。
- R-CNN
论文地址:https://arxiv.org/abs/1311.2524
代码地址:https://github.com/rbgirshick/rcnn - Fast R-CNN
论文地址:https://arxiv.org/abs/1504.08083
代码地址:https://github.com/rbgirshick/fast-rcnn - Faster R-CNN
论文地址:https://arxiv.org/abs/1506.01497
代码地址:https://github.com/rbgirshick/py-faster-rcnn - R-FCN
论文地址:https://arxiv.org/abs/1605.06409
代码地址:https://github.com/Orpine/py-R-FCN (python版) - YOLO
论文地址:https://arxiv.org/abs/1506.02640
代码地址:http://pjreddie.com/darknet/yolo/ - SSD
论文地址:https://arxiv.org/abs/1512.02325
代码地址:https://github.com/weiliu89/caffe/tree/ssd (caffe版)
代码地址:https://github.com/zhreshold/mxnet-ssd (MXnet版)
总结
目前,相关滤波和深度学习是目标跟踪的热点,在比赛中也一半是这两者排在前几名,当然也有相关滤波和深度学习相结合的算法。最近的论文中提出的算法也大都与相关滤波和深度学习有关,预计相关滤波和深度学习将仍然是这个领域的主角。
欢迎大家关注公众号“计算机视觉与机器学习”
计算机视觉和机器学习