听了场关于“从判别式目标跟踪到视频目标分割”的报告,有一点想法。大体是关于:如何利用跟踪算法对现有目标检测系统进行补充,可能是运行速度方面也有可能是从准确率的角度去考虑。
一、目标检测和目标跟踪的异同
基本转载至:目标检测(Object Detection)和目标跟踪(Object Tracking)的区别 - 知乎,请点赞原博客,谢谢。
密集跟踪与稀疏跟踪角度论述
目标跟踪就像你跟踪某个人,一直尾随着他。我们在动画图像(.gif)或者视频中跟踪一个目标是如何移动的,它要到哪里去,以及它的速度。实时锁定一个(一些)特定的移动目标。
有两种方式来“跟踪”一个目标。密集跟踪(a series detections)和稀疏跟踪(estimation+common sense)。
1.密集跟踪是一系列的检测(a series detections)。假设在交通录像中,想要检测一辆车或者一个人,我使用录像不同时刻的快照(通过暂停键)来检测我的目标,一辆车或一个人。然后通过检查我的目标是如何在录像不同的画面中移动(对录像每一帧进行目标检测,比如YOLO算法,就能知道我的目标在不同的画面里的坐标),由此实现对目标的追踪。比如要计算目标的速度,就可以通过两帧图像中目标坐标的变化来计算目标移动距离,除以两帧画面的间隔时间。
因为我们要处理录像所有的快照(每一帧)的像素,这些算法需要密集的跟踪方法(dense method of tracking)来实现,对于每一帧画面图像,都要进行目标检测,就拿滑窗法来举例,需要处理图像中的所有像素,所以这种方法进行目标跟踪,计算量将会非常大。
当我们只是把跟踪处理为“一系列的检测”,就会得到如下的轨迹。根据不同时间点目标的位置,把这些位置坐标由时间线串联起来得到目标轨迹。
2.第一种方法(上述的方法)更像是欺骗,我们实际上并没有“跟踪”而是在不同的时间点来“检测”它。改进以后的方法是“动态检测(detection with dynamics)”,考虑同样的场景,你想要跟踪路上的一辆车或者一个人,通过检查它在某个时刻t的位置,我们首先估计它在其他某个时刻的位置,比如t+5时刻。所以,我们要试图判断出车的轨迹。使用我们的估计和车在t+5时刻的实际图像,我们用不同的算法来跟踪它。
当我们只处理估计位置附近的像素时,就是稀疏跟踪方法。当然,它更快(处理更少的像素),我们只需要检测我们估计的位置附近的像素就行,相比于密集跟踪方法,减少了大量的计算。。使用动态检测方法,我们得到更平滑的曲线来刻画目标的移动位置(轨迹),因为我们将我们的估计(estimation)和一般的认识(common sense)应用到了跟踪中。
3.总之,上面论述了这样一个观点:广义的跟踪算法属于稀疏跟踪算法,基于目标检测的跟踪方式属于密集跟踪。区别是稀疏跟踪算法将我们的估计(estimation)和常识(common sense,通常是图片)应用在系统中,已达到处理更少的像素,减少大量的运算的效果。
另外,从直观上来看,广义的跟踪算法所产生的轨迹似乎比基于目标检测的跟踪算法更“平滑”了些,这是为什么?很简单,因为只要有“估计(estimation)”在,理论上就能产生连续的信号输出,而基于目标检测算法的跟踪需要服从目标检测算法部分的运行速度限制,自然在位置的判断上是“割裂”的,表现在轨迹上就是“不平滑”的。
自己抬杠:轨迹的平滑问题我经常遇到,通常可以用滤波或者插值的方式解决,轨迹的平滑应该不能算是广义跟踪的一个优点。
自我回答:目标检测算法和跟踪算法都有它们各自的“不可替代”的应用场景,此外跟踪算法体现的主要是在计算速度上的优势。至于轨迹部分,平滑只是它的一种感官上的表现形式,实际上平滑隐藏着运动轨迹的“绝对准确”,滤波和插值都是一种基于“低级”模型的直接估计,对两个离散点之间的准确运动形式无法做出准确判断。再具体些可以理解为“运动控制特性”较差。
任务发生角度论述
(1)目标检测可以在静态图像上进行,而目标跟踪就是需要基于录像(视频)。
(2)如果对每秒的画面进行目标检测,也可以实现目标跟踪。注意:如果基于目标检测算法来实现跟踪算法,那么跟踪算法应在检测算法之后。
(3)目标跟踪不需要目标识别,可以根据运动特征来进行跟踪,而无需确切知道跟踪的是什么,所以如果利用视频画面之间(帧之间)的临时关系,单纯的目标跟踪可以很高效的实现。
(4)基于目标检测的目标跟踪算法计算非常昂贵,就如之前讲的,需要对每帧画面进行检测,才能得到目标的运动轨迹。而且,只能追踪已知的目标,这个容易理解,因为目标检测算法就只能实现已知类别的定位识别。
二、跟踪算法对于目标检测系统的补充
因此,目标检测要求定位+分类。而目标跟踪,分类只是一个可选项,根据具体问题而定,我们可以完全不在乎跟踪的目标是什么,只在乎它的运动特征。实际中,目标检测可以通过目标跟踪来加速,然后再间隔一些帧进行分类(好几帧进行一次分类)。在一个慢点的线程上寻找目标并锁定,然后在快的线程上进行目标跟踪,运行更快。
跟踪算法也分很多种类(有机会另写一篇博客介绍下),可以根据实际需要选择一种对现有目标检测系统进行升级,因为两者几乎是独立的,方便进行“即插即用”操作
光照强度变化、目标快速运动、低分辨率等情况会导致图像模糊,尤其是在运动目标与背景相似的情况下更为明显。这种模糊是不是能作为目标跟踪任务相对于目标检测任务的优势。简单说就是运动模糊问题目标检测任务无法解决,使用目标跟踪任务进行一种“插值式”的位置信息获取。