深度学习 视频目标跟踪

前言

最近的工作当中遇到了一个需求:视频的目标跟踪。由于需求比较紧急,当时的思路是能不能从现有的目标检测模型的基础上做视频的目标跟踪,于是搜索到一个基于Tracking by Detection策略的视频目标跟踪方案。该方案主要技术点是Yolov3,Deepsort。Yolo系列的算法在前面的博客中已经有了相关的介绍,sort算法主要涉及到匈牙利算法以及卡尔曼滤波。匈牙利算法主要针对当前帧的某个目标,判断是否与前一帧的某个目标相同。卡尔曼滤波是基于目标前一时刻的位置,来预测当前时刻的位置,并且可以比传感器更准确地估计目标的位置。Deepsort算法为了解决SORT算法中的遮挡目标的检测问题,该方法结合运动和外观信息更优的度量来替换关联度量,特别地,该方法采用一个卷积神经网络,通过集成这个网络,提高了对遗漏和遮挡目标跟踪的鲁棒性。两个算法都有个致命的缺点是你的目标检测模型一定要足够好。

在这个需求实现过程中的参考的资料以及文档都在本博客的参考部分,需要了解更多细节可以阅读相关的代码或者文献。

目标跟踪任务分类

目标跟踪可以分为以下几个任务:

  • 单目标跟踪:给定一个目标,追踪这个目标的位置
  • 多目标跟踪:追踪多个目标的位置
  • Person Re-ID:行人重识别,利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术。广泛被认为是一个图像检索的子问题
  • MTMCT:多目标多摄像头跟踪,跟踪多个摄像头拍摄的多个人
  • 姿态跟踪:追踪人的姿态

按照任务计算类型又可以分为以下两类:

  • 在线跟踪:在线跟踪需要实时处理任务,通过过去和现在帧来跟踪未来帧中物体的位置
  • 离线跟踪:离线跟踪是离线处理任务,可以通过过去、现在和未来的帧来推断物体的位置,因此准确率会比在线跟踪的高

目标跟踪困难点

  • 形态变化:姿态变化是目标跟踪中常见的干扰问题。运动目标发生姿态变化时,会导致它的特征以及外观模型发生改变,容易导致跟踪失败
  • 尺度变化:尺度的自适应也是目标跟踪中的关键问题。当目标尺度缩小时,由于跟踪框不能自适应跟踪,会将很多背景信息包含在内,导致目标模型的更新错误;当目标尺度增大时,由于跟踪框不能将目标完全包括在内,跟踪框内目标信息不全,也会导致目标模型的更新错误。因此实现尺度自适应跟踪是十分必要的
  • 遮挡与消失:目标在目标在运动过程中可能出现被遮挡或者短暂的消失情况。当这种情况发生时, 跟踪框容易将遮挡物以及背景信息包含在跟踪框内, 会导致后续帧中的跟踪目标漂移到遮挡物上面。若目标被完全遮挡时, 由于找不到目标的对应模型, 会导致跟踪失败。
  • 图像模糊:光照强度变化, 目标快速运动, 低分辨率等情况会导致图像模型, 尤其是在运动目标与背景相似的情况下更为明显。因此, 选择有效的特征对目标和背景进行区分非常必要。

目标跟踪方法

按照模式划分为两类:

  • 生成式模型:早期工作主要集中于生成式模型跟踪算法,如光流法、粒子滤波、Meanshift算法、Camshift算法等。此类方法首先建立目标模型或者提取目标特征,在后续帧中进行相似特征搜索,逐步迭代实现目标定位。但是这类方法也存在明显的缺点,就是图像的背景信息没有得到全面的利用。且目标本身的外观变化有随机性和多样性特点。因此通过单一的数学模型描述待跟踪目标具有很大的局限性。具体表现为在光照变化,运动模糊,分辨率低,目标旋转形变等情况下,模型的建立会受到巨大的影响,从而影响跟踪的准确性;模型的建立没有有效地预测机制,当出现目标遮挡情况时,不能够很好地解决。
  • 鉴别式模型:将目标模型和背景信息同时考虑在内,通过对比目标模型和背景信息的差异,将目标模型提取出来,从而得到当前帧中的目标位置。通过将背景信息引入跟踪模型, 可以很好地实现目标跟踪.因此鉴别式模型具有很大的优势。

按照时间顺序,目标跟踪的方法经历了从经典算法到基于核相关滤波算法,再到基于深度学习的跟踪算法的过程。

  • 经典跟踪算法
  • 基于核相关滤波的跟踪算法
  • 基于深度学习的跟踪算法

经典跟踪算法

早期的目标跟踪算法主要是根据目标建模或者对目标特征进行跟踪

  1. 基于目标模型建模的方法,通过对目标外观模型进行建模,然后在之后的帧中找到目标。例如区域匹配、特征点跟踪、基于主动轮廓的跟踪算法、光流法等。最常用的是特征匹配法,首先提取目标特征,然后在后续的帧中找到最相似的特征进行目标定位,常用的特征有:SIFT特征、SURF特征、Harris角点等。
  2. 基于搜索的方法,随着研究的深入,基于目标模型建模的方法对整张图像进行处理,实时性差。将预测算法加入到跟踪当中,在预测值附近进行目标搜索,减少了搜索的范围。常见的一类预测算法有卡尔曼滤波、粒子滤波方法。另一种减少搜索范围的方法是内核方法:运用最速下降法的原理,向梯度下降方向对目标模板逐步迭代,直到迭代到最优位置,如Meanshift算法、Camshift算法。
光流法

光流法针对外观模型对视频序列中的像素进行操作。通过利用视频序列在相邻帧之间的像素关系,寻找像素的位移变化来判断目标的运动状态,实现对运动目标的跟踪。但是光流法适用的范围较小,需要满足三种假设:图像的光照强度保持不变;空间一致性,即每个像素在不同帧中相邻点的位置不变,这样便于求得最终的运动矢量;时间连续,光流法适用于目标运动相对于帧率是缓慢的,也就是两帧之间的目标位移不能太大。

Meanshift

Meanshift方法是一种基于概率密度分布的跟踪方法,使目标的搜索一直沿着概率梯度上升的方向,迭代收敛到概率密度分布的局部峰值上。首先Meanshift会对目标进行建模,比如利用目标的颜色分布来描述目标,然后计算目标在下一帧图像上的概率分布,从而迭代得到局部最密集的区域。Meanshift适用于目标的色彩模型和背景差异比较大的情形,早期也用于人脸跟踪。由于Meanshift方法的快速计算,它的很多改进方法也一直适用至今。

粒子滤波

粒子滤波方法是一种基于粒子分布统计的方法。以跟踪为例,首先对跟踪目标进行建模,并定义一种相似度度量确定粒子与目标的匹配程度。在目标搜索的过程中,它会按照一定的分布(均匀分布或高斯分布)撒一些粒子,统计粒子的相似度,确定目标可能的位置,在这些位置上,下一帧加入更多新的例子,确保在更大概率上跟踪上目标。卡尔曼滤波器常被用于描述目标的运动模型,它不会对目标的特征建模,而是对目标的运动模型进行建模,常用于估计目标在下一帧的位置。
因此传统的目标跟踪算法存在两个致命的缺陷:

  • 没有将背景信息考虑在内,导致目标遮挡,光照变化以及运动模型等干扰下容易出现跟踪失败
  • 跟踪算法执行速度慢,无法满足实时性的要求

基于核相关滤波的跟踪算法

人们将通信领域的相关滤波(衡量两个信号的相似程度)引入到目标跟踪中。一些基于相关滤波的跟踪算法(MOSSE,CSK,KCF,BACF,SAMF)等也随之产生,速度可以达到数百帧每秒,可以广泛地应用于实时跟踪系统中。其中不乏一些跟踪性能优良的跟踪器。

MOOSE

提出相关滤波器通过MOSSE算法实现,基本思想:越是相似的两个目标相关值越大,也就是视频帧中与初始化目标越相似,得到相应也就越大。

基于深度学习的跟踪算法

随着深度学习方法的广泛应用, 人们开始考虑将其应用到目标跟踪中。人们开始使用深度特征并取得了很好的效果。之后,人们开始考虑用深度学习建立全新的跟踪框架, 进行目标跟踪。在大数据背景下,利用深度学习训练网络模型,得到的卷积特征输出表达能力更强。在目标跟踪上,初期的应用方式是把网络学习到的特征,直接应用到相关滤波或 Struck 的跟踪框架里面,从而得到更好的跟踪结果,比如前面提到的 DeepSRDCF 方法。本质上卷积输出得到的特征表达,更优于 HOG 或 CN 特征,这也是深度学习的优势之一,但同时也带来了计算量的增加。

Tracking by Detection

SORT算法

SORT算法的论文是《SIMPLE ONLINE AND REALTIME TRACKING》,该方法组合了一些熟悉的技术,如卡尔曼滤波器和匈牙利算法。
在这里插入图片描述

为了遵循Occam’s Razor,SORT算法在进行目标跟踪时没有使用任何被跟踪目标的外观特征,而仅仅使用了检测框的位置和大小进行目标的运动估计和数据关联,也没有进行任何的重识别的算法,所以当目标跟丢时,就找不回来,只能通过检测去重新更新ID。

预测模型

对象模型描述的是表示和用于将目标的标识传播到下一帧。每个目标的状态模型如下: X = [ μ , v , s , r , μ ˙ , v ˙ , s ˙ ] T X=[\mu, v, s, r, \dot{\mu}, \dot{v}, \dot{s}]^T X=[μ,v,s,r,μ˙,v˙,s˙]T
其中 μ \mu μ v v v分别表示目标的中心横纵坐标, s s s r r r表示目标的BBox的尺寸大小和比例。后面的三个变量表示预测的下一帧,当检测和目标关联时,检测的边界框用于更新目标状态,其中通过卡尔曼方法对速度分两进行优化求解。
在这里插入图片描述

数据关联

SORT算法的使用匈牙利算法进行帧数据之间的关联。SORT算法中的匈牙利算法使用的cost矩阵为原有目标在当前帧中的预测位置和当前帧目标检测框之间的IOU。当然小于指定IOU阈值的指派结果是无效的。发现使用IOU能够解决目标的短时被遮挡问题。这是因为目标被遮挡时,检测到了遮挡物,没有检测到原有目标,假设把遮挡物和原有目标进行了关联。那么在遮挡结束后,因为在相近大小的目标IOU往往较大,因此很快就可以恢复正确的关联。这是建立在遮挡物面积大于目标的基础上的,

Deepsort算法

SORT算法使用简单的卡尔曼滤波器处理逐帧数据的关联性以及使用匈牙利算法进行关联度衡量,这种方法有个缺点:忽略了被检测物体表面特征,SORT算法只有在物体状态估计不确定较低时才准确。为了解决这个问题,DeepSORT使用更加可靠的度量来替代关联度量,并使用CNN网络提取特征,增加网络对目标丢失和遮挡的鲁棒性。

Track Handle and State Estimation

在这里插入图片描述

Assignment Problem

在这里插入图片描述
在这里插入图片描述

匹配级联

在这里插入图片描述

总结

SORT和DeepSORT算法都依赖与目标检测效果较好的情况下才能取到较好的效果。在知乎上看到以下评论:
在这里插入图片描述

参考

相关代码

  1. https://github.com/RyanCCC/Yolov4:本博主的github,里面包括了YOLOv4training的算法以及融合了Deepsort算法做目标跟踪,如果觉得有用,请给我一个star,非常感谢。
  2. https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch(推荐)
  3. https://github.com/Qidian213/deep_sort_yolov3
  4. https://github.com/theAIGuysCode/yolov4-deepsort(推荐)
  5. https://github.com/pjl1995/CTracker

相关文章

  1. 目标跟踪初探
  2. 多目标跟踪:SORT和Deep SORT
  3. How To Train Your Deep Multi-Object Tracker
  4. POI Multiple Object Tracking with High Performance Detection and Appearance Feature
  5. SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC
  6. SIMPLE ONLINE AND REALTIME TRACKING
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值