目标检测(Object Detection)和目标跟踪(Object Tracking)的区别

04-22   1  7

在计算机视觉中,目标检测是在图像和视频(一系列的图像)中扫描和搜寻目标,概括来说就是在一个场景中对目标进行定位和识别,如下图中展示的,我们要检测图像中的车辆,这就是典型的目标检测实例。



目标跟踪就像你跟踪某个人,一直尾随着他。我们在动画图像(.gif)或者视频中跟踪一个目标是如何移动的,它要到哪里去,以及它的速度。实时锁定一个(一些)特定的移动目标。


有两种方式来“跟踪”一个目标。密集跟踪(a series detections)和稀疏跟踪(estimation+common sense)。


1.跟踪是一系列的检测。假设在交通录像中,想要检测一辆车或者一个人,我使用录像不同时刻的快照(通过暂停键)来检测我的目标,一辆车或一个人。然后通过检查我的目标是如何在录像不同的画面中移动(对录像每一帧进行目标检测,比如YOLO算法,就能知道我的目标在不同的画面里的坐标),由此实现对目标的追踪。


比如要计算目标的速度,就可以通过两帧图像中目标坐标的变化来计算目标移动距离,除以两帧画面的间隔时间。


因为我们要处理录像所有的快照(每一帧)的像素,这些算法需要密集的跟踪方法(dense method of tracking)来实现,对于每一帧画面图像,都要进行目标检测。


就拿滑窗法来举例,需要处理图像中的所有像素,所以这种方法进行目标跟踪,计算量将会非常大。


当我们只是把跟踪处理为“一系列的检测”,就会得到如下的轨迹。根据不同时间点目标的位置,把这些位置坐标由时间线串联起来得到目标轨迹。

2.第一种方法(上述的方法)更像是欺骗,我们实际上并没有“跟踪”而是在不同的时间点来“检测”它。改进以后的方法是“动态检测(detection with dynamics)”,考虑同样的场景,你想要跟踪路上的一辆车或者一个人,通过检查它在某个时刻t的位置,我们首先估计它在其他某个时刻的位置,比如t+5时刻。所以,我们要试图判断出车的轨迹。使用我们的估计和车在t+5时刻的实际图像,我们用不同的算法来跟踪它。


当我们只处理估计位置附近的像素时,就是稀疏跟踪方法。当然,它更快(处理更少的像素),我们只需要检测我们估计的位置附近的像素就行,相比于密集跟踪方法,减少了大量的计算。。使用动态检测方法,我们得到更平滑的曲线来刻画目标的移动位置(轨迹),因为我们将我们的估计(estimation)和一般的认识(common sense)应用到了跟踪中。


目标检测和目标跟踪的异同:

(1)目标检测可以在静态图像上进行,而目标跟踪就是需要基于录像(视频)。

(2)如果对每秒的画面进行目标检测,也可以实现目标跟踪。

(3)目标跟踪不需要目标识别,可以根据运动特征来进行跟踪,而无需确切知道跟踪的是什么,所以如果利用视频画面之间(帧之间)的临时关系,单纯的目标跟踪可以很高效的实现。

(4)基于目标检测的目标跟踪算法计算非常昂贵,就如之前讲的,需要对每帧画面进行检测,才能得到目标的运动轨迹。而且,只能追踪已知的目标,这个容易理解,因为目标检测算法就只能实现已知类别的定位识别。


因此,目标检测要求定位+分类。而目标跟踪,分类只是一个可选项,根据具体问题而定,我们可以完全不在乎跟踪的目标是什么,只在乎它的运动特征。实际中,目标检测可以通过目标跟踪来加速,然后再间隔一些帧进行分类(好几帧进行一次分类)。在一个慢点的线程上寻找目标并锁定,然后在快的线程上进行目标跟踪,运行更快。

评论 ( {{ comments.total }} )
{{ o.content }}
赞 {{ o.likes_count ? o.likes_count : '' }} 回复 {{ o.created_at }}
作者信息