目标检测与追踪关系
目标检测与追踪是计算机视觉中密切相关的技术,检测为追踪提供基础,追踪则在检测基础上实现动态定位。
核心区别
- 目标检测(Object Detection):静态任务,定位单帧图像中目标的位置(如YOLO算法),不涉及时间序列信息 。在图像和视频(一系列的图像)中扫描和搜寻目标,概括来说就是在一个场景中对目标进行定位和识别。
- 目标追踪(Object Tracking):动态任务,基于检测结果在连续帧中匹配目标位置,需处理遮挡、消失等复杂情况 。就像你跟踪某个人,一直尾随着他。我们在动画图像(.gif)或者视频中跟踪一个目标是如何移动的,它要到哪里去,以及它的速度。实时锁定一个(一些)特定的移动目标。
- 目标检测一般利用模型中的特征信息或先验知识在单帧图像中找到感兴趣的区域,而目标跟踪是根据已有的目标的位置信息,在后续的跟踪过程中匹配最佳位置,重点在于目标的匹配过程。
- 目标追踪比目标检测略复杂一些,目标检测一般为静态的检测,而目标追踪通常为动态定位。
- 目标检测可以在静态图像上进行,而目标追踪就是需要基于录像(视频)。
- 目标追踪不需要目标识别,可以根据运动特征来进行追踪,而无需确切知道追踪的是什么,所以如果利用视频画面之间(帧之间)的临时关系,单纯的目标追踪可以很高效的实现。
- 基于目标检测的目标追踪算法计算非常昂贵,就如之前讲的,需要对每帧画面进行检测,才能得到目标的运动轨迹。而且,只能追踪已知的目标,这个容易理解,因为目标检测算法就只能实现已知类别的定位识别。
技术关联
1.依赖关系
- 追踪需先通过检测获取目标初始位置,后续帧中通过匹配算法(如卡尔曼滤波)预测位置 。
- 检测可作为追踪的输入,但追踪算法(如动态检测)能减少重复检测计算量 。
2.实现方式
- 密集追踪(dense method of tracking):对每帧图像进行检测,串联位置形成轨迹(计算量大) 。
- 稀疏追踪:当我们只处理估计位置附近的像素时,就是稀疏跟踪方法。它更快(处理更少的像素),我们只需要检测我们估计的位置附近的像素就行,相比于密集跟踪方法,减少了大量的计算。使用动态检测方法,我们得到更平滑的曲线来刻画目标的移动位置(轨迹),因为我们将我们的估计(estimation)和一般的认识(common sense)应用到了跟踪中。基于动态估计(如速度预测)缩小检测范围,提升效率 。
应用场景
检测:静态图像分析(如道路裂缝检测) 。
追踪:视频监控(如交通流量分析)、自动驾驶等动态场景。在医学领域,目标追踪可以用于追踪医学图像中的病灶、器官等,帮助医生更准确地进行诊断。
目标追踪算法
主要步骤:
-
初始化(Initialization)
初始化是目标追踪的第一步。在序列的初始帧中,目标的位置和特征需要被明确。这一步骤可以通过目标检测技术或者手动标定来实现。
-
检测(Detection)
检测阶段涉及在后续的帧中定位目标的位置。这可能包括使用传统图像处理技术,也可能采用基于深度学习的目标检测模型,例如使用卷积神经网络(CNN)。
-
跟踪(Tracking)
一旦目标被检测到,跟踪阶段开始发挥作用。这需要利用先前帧的信息来预测目标在当前帧中的位置。常见的方法包括运动模型和外观模型。
-
更新(Update)
由于目标可能随着时间变化,更新阶段是保持跟踪准确性的关键。系统需要不断更新目标模型以适应目标的形状、外观等变化。
难点与挑战
目标遮挡、目标消失、运动模糊、目标和环境的剧烈变化、目标的高速运动、相机的抖动、光照变化、背景杂波、低分辨率等。
算法分类
参考链接:https://blog.csdn.net/DeepLearning_/article/details/127760091
1 常规分类
-
生成式模型:反映同类别相似度。此类方法首先建立目标模型或者提取目标特征, 在后续帧中进行相似特 征搜索。逐步迭代实现目标定位。缺点:在光照变化, 运动模 糊, 分辨率低, 目标旋转形变等情况下,目标跟踪准确性不高。常用算法:光流法、粒子滤波、Meanshift 算法 、Camshift算法、KCF、SRDCF、SRDCFdecon、stable、EBT。
-
判别式模型(track by detection):反映不同类别的差异。通过对比目标模型和背景信息的差异, 将目标模型提取出来, 从而得到当前帧中的目标位置。目前主要采用的模型。常用算法:MIL,OAB,struck,MEEM,TLD、支持向量机。
2 时间分类
-
早期跟踪模型:大部分是生成式模型。细分主要包括:
(1)基于目标模型建模:基于区域匹配、基于特征点跟踪、基于主动轮廓的跟踪算法、光流法等。
(2)基于搜索的方法:为了减少搜索范围,一种方式通过预测减少搜索范围,如:Kalman滤波、粒子滤波等。另一种为内核算法,运用最速下降法的原理, 向梯度下降方向对目标模板逐步迭代, 直到迭 代到最优位置。如:Meanshift、Camshift。
-
相关滤波模型:属于判别式模型,相关滤波之前,所有的跟踪都是在时域上进行,涉及复杂的矩阵求逆计算,速度慢。相关滤波在频域上进行,利用 循环矩阵可以在频域对角化的性质,减少了运算量。常用算法:MOSSE、CSK、KCF、 BACF、SAMF。
-
深度学习模型:基于相关滤波,使用深度学习对特征提取、特征搜索等方向进行改进。
目标追踪常用算法
-
均值漂移(Mean Shift)算法:这是一种基于密度的非参数迭代方法,用于寻找数据中的密集区域。在目标跟踪中,它可以通过迭代更新目标位置,实现对目标的持续跟踪。
-
卡尔曼滤波(Kalman Filter)算法:卡尔曼滤波是一种递归算法,用于在存在噪声的情况下,从一系列不完全或不准确的测量数据中估计动态系统的状态。在目标跟踪中,它可以预测目标下一时刻的位置和速度,并更新目标的状态估计。
-
粒子滤波(Particle Filter)算法:粒子滤波是一种基于蒙特卡洛模拟的递归贝叶斯滤波方法。它通过一组带权重的粒子来表示目标状态的概率分布,并根据观测数据更新粒子的权重和位置,从而实现对目标的跟踪。
- 步骤:
(1)初始化阶段---提取目标特征:手动选取目标,并提取目标区域的特征,即目标颜色直方图。
(2)初始化粒子:a)将粒子均匀撒在整个图像上。b)在上一帧目标附近按高斯分布散布粒子。
(3)搜索阶段:统计每个粒子的颜色直方图,与目标模型颜色直方图对比,根据巴氏距离计算权值,再对权值进行归一化处理,使得所有粒子的权值相加为1。
(4)粒子重采样:在相似度较低的地方放少量的粒子,相似度高的地方放多放粒子。(抛弃权重低的粒子)
(5)状态转移:根据计算下一时刻粒子的位置。
(6)观测阶段:计算各个粒子与目标特征的相似度,更新粒子的权重。(7)决策阶段:计算坐标与相似度的加权平均值,得到跟踪目标下一帧的位置。
(8)根据预测出的位置,重复 (3) , (4) , (5) , (6) , (7) 。 计算下一时刻粒子的位置。
- 步骤:
-
光流法(Optical Flow):光流法用于计算图像序列中像素的瞬时速度,即光流场。在目标跟踪中,可以利用光流场信息来跟踪目标的运动轨迹。
- 光流的三个假设条件
(1)前后两点的位移较小(可以泰勒展开的条件)
(2)移动前后光强保持恒定
(3)空间相关性,每个点的运动和他们的邻居相似(连续函数,泰勒展开)
- 光流的三个假设条件
-
相关滤波(Correlation Filter)算法:相关滤波算法通过训练一个滤波器,使得滤波器与目标模板的响应最大,从而实现对目标的跟踪。这种方法具有计算效率高、鲁棒性强的优点。
- 算法步骤:
(1)获取当前帧图像,初始化目标位置。并利用循环矩阵生成样本,训练回归器。
(2)获取下一帧图像,在上一帧目标位置附近利用循环矩阵采样,并用(1)中训练的回归器计算各个窗口的响应。
(3)响应最大的位置即为下一帧目标的位置。
(4)重复(1),(2),(3)
- 算法步骤:
-
深度学习算法:近年来,深度学习在目标跟踪领域取得了显著进展。例如,基于卷积神经网络(CNN)的目标跟踪算法可以通过学习目标的特征表示来提高跟踪的准确性和鲁棒性。此外,还有一些结合循环神经网络(RNN)、生成对抗网络(GAN)等深度学习技术的目标跟踪算法。
- 深度学习的特点在于其特征提取能力,可以通过大量的数据训练,提取比传统方法更好的能够代表目标的特征。基于深度学习的跟踪可以分为:
(1)对相关滤波算法改进:C-COT、ECO。
(2)利用辅助图片数据预训练深度模型,在线跟踪时微调:DLT、SO-DLT。
(3)利用现有大规模分类数据集预训练的CNN分类网络提取特征:FCNT。
(4)利用跟踪序列预训练,在线跟踪时微调:MDNet
(5)运用递归神经网络进行目标跟踪的新思路:RTT、DeepTracking
- 深度学习的特点在于其特征提取能力,可以通过大量的数据训练,提取比传统方法更好的能够代表目标的特征。基于深度学习的跟踪可以分为: