最近需要学习计算机视觉中的目标跟踪方面的内容,在学习前做了个调研,对该领域的主要发展做下总结。
介绍
目标跟踪是计算机视觉领域的一个重要分支,是模式识别,图像处理,计算机视觉,机器学习等学科的交叉研究,有着广泛的应用,如视频监控,虚拟现实,人机交互,图像理解,无人驾驶等。
目前的目标跟踪的通常任务是,在视频的第一帧给定一个目标的矩形框,然后后续这个矩形框紧跟着要跟踪的物体。不过,目标跟踪与计算机视觉中的图像识别,分割,检测是分不开的,通常跟踪是这些分割检测的最后一步。
研究
目标跟踪方向的论文可以关注计算机视觉的三大顶会 CVPR (Computer Vision and Pattern Recognition)、ICCV (International Conference on Computer Vision) 、ECCV (European Conference on Computer Vision),另外网站 arXiv 也值得关注。
VOT Challenge是目标跟踪领域的赛事,类似于图形识别领域中的ImageNet挑战赛。这些赛事通常都是标准数据集的来源,所以VOT数据集是一个常用的目标跟踪数据集。此外,还有吴毅老师的论文出现的OTB数据集,包括OTB50 (指2013年的数据集,50个视频序列)和 OTB100(指2015年的数据集,100个视频序列),也是目标跟踪重要的数据集。
通常目标跟踪面临几大难点:物体变形,亮度变化,快速移动,背景干扰覆盖等,通常不规则的变化都是目标跟踪的难点,这也是在工业上未得到使用而需要解决的问题。其中最主要的三个难题分别是目标背景的变化、物体本身的变化、光照强度变化。
算法
目前公认的跟踪算法按照是否需要检测过程的参与,可以将其分为两类,一类是生成式,另一类是判别式,这和机器学习算法的分类有相似之处。
生成式算法通过描述目标的表观特征,处理当前帧与下一帧的关系。主要包括稀疏编码(sparse coding)、在线密度估计(online density estimation)等。它的缺点是过于关注目标本身,忽略背景信息,容易产生漂移现象。
判别式算法区分目标和背景,表现比生成式算法更为鲁棒,目前也是更为流行的研究方向。它包括目标的检测和跟踪,常被称为tracking by detection,目标检测指对于图像而言找出目标物体的位置,而目标跟踪对于视频而言在每时每刻都能够找出物体的位置,检测是跟踪的基础,目标检测是初始化目标,目标跟踪是连续估计目标状态。常见的算法包括多示例学习方法(multiple instance learning)、结构SVM(structured SVM)等。此外,大多数深度学习的算法也属于判别式方法。
目标跟踪算法也从传统的自行设计特征和分类器,向着现在的基于深度学习的端到端(end to end)算法发展。对于一个完整的目标跟踪流程来说,算法框架通常由检测窗口的选择,分类器的设计,特征的设计这三个来逐步进化的。
对于检测窗口来说,一开始采用的是滑动窗口(即穷举法),把一张图片所有的位置都用候选框从上到下,从左到右遍历,同时还要改变图片的大小来检测不同大小的物体。这种暴力方法效果不是很好,于是衍生出了 Selective Search 和 Region Proposal Network(RPN,区域候选网络),这些方法首先去除不是目标物体的区域,减少了搜索范围,同时减少了计算的时间消耗,并且精度更高。
而对于特征设计和分类器的设计来说,传统算法使用的特征是工作人员自己设计特征提取方法。通常选用的特征提取算法包括Harris,Haar,SIFT,HOG,有时还需要组合使用。分类器则选用的是 SVM,Adaboost,决策树等算法,选用分类器的原因是把目标跟踪问题当作一个分类问题来看待的,把待检测区域分为目标或者非目标。
深度学习不需要自己设计特征,它可以自己在数据中学习到目标的特征,同时也有自己的分类器,也就是说将寻找特征和分类结合在一起。深度学习的效果也是非常的好,在最近的图像比赛中,冠军都是使用深度学习来实现的。目前的深度学习算法包括R-CNN,Fast R-CNN,Faster R-CNN等深度分类方法,也包括 YOLO(you only look once) 和 SSD(single shot multibox) 等深度回归方法。
除了通用的跟踪算法外,还有对于特定物体的跟踪,例如人脸检测,行人检测等。除了单目标跟踪外,还有多目标跟踪,对多个目标持续的进行跟踪,目前也已经有针对多目标跟踪的赛事MOT,这也使得跟踪算法正在快速发展。
上文写的是目标跟踪的主要研究方向,下文主要关注的是算法的发展历程,主要用来了解这个领域的发展现状与未来方向。在学习之前,对这个方向有一个整体的认识和发展路线,这样才不会陷于某一个细节。
目标跟踪就是在视频序列中的每幅图像中找到感兴趣的目标运动位置,目标跟踪的算法整体是从传统的特征提取加机器学习到现在的基于神经网络的深度学习。上文已经介绍过跟踪算法的分类,下文主要总结一下这些算法,主要分为经典算法,相关滤波算法,检测跟踪相结合的算法,深度学习框架等。
经典算法
经典算法主要有几类,有很多算法都是在这些经典算法的基础上改进的。但是经典算法在工业上一般只作为辅助方法来使用,毕竟深度学习算法才是当下的热门选择,但作为了解其基本原理还是很有必要的。
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版)
总结
目前,相关滤波和深度学习是目标跟踪的热点,在比赛中也一半是这两者排在前几名,当然也有相关滤波和深度学习相结合的算法。最近的论文中提出的算法也大都与相关滤波和深度学习有关,预计相关滤波和深度学习将仍然是这个领域的主角。
本文整理自微信号 计算机视觉与机器学习
原作者:Lziwen
链接:https://mp.weixin.qq.com/s/CYN23H1i7EfUHELagt574g
链接:https://mp.weixin.qq.com/s/95uvYHKxeeS8wX7qfdL5Aw