TLD

TLD

是什么

  • 将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被跟踪过程中发生的形变、部分遮挡等问题。
  • 通过一种改进的在线学习机制不断更新跟踪模块的“显著特征点”和检测模块的目标模型及相关参数,从而使得跟踪效果更加稳定、鲁棒、可靠。

要解决的问题

  • 长时间跟踪的关键问题

    • 目标重新出现在相机视野中, 系统能检测到它,并开始重新跟踪
    • 难点

      • 过程中目标发生形状变化, 光照,尺度, 遮挡

原有方法

  • 原有跟踪方法, 当检测模块检测到被跟踪目标后, 开始进入跟踪模块
  • 步骤

    • 检测模块检测目标
    • 当检测到被跟踪目标后, 进入跟踪模块
    • 此后检测模块不会介入到跟踪过程
    • 缺陷

      • 被跟踪目标发生形变遮挡时, 跟踪容易失败

我的理解思路

  • 所以需要找到一种方法可以识别出目标的形变(目标尽管发生形变,但依然存在的相似性)
  • 如果要训练各种形变的情况, 样本量是非常小的, 而且对于从来没有出现过的目标, 根本就没有训练样本

TLD主要框架

  • tracking

    • 利用当前帧和下一帧
    • 作用

      • 跟踪连续帧间的运动, 当物体始终可见时跟踪器才会有效
    • 预测下一帧目标

      • 利用金字塔光流法,和norm cross correlation预测
      • 根据物体在前一帧已知的位置估计在当前帧的位置, 这样就会产生仪表物体运动的轨迹, 从这条轨迹可以为学习模块产生正样本
    • 步骤

      • 1、先从当前帧目标均匀取10*10个点,记为n1。
      • 2、利用这些点用光流法预测取下一帧对应的点n2
      • 3、再用这些对应的点用光流法返回预测当前帧所在的点n3,n1和n3的距离就是误差(FB_error)
      • 4、ncc利用n1的每个点和n2每个点为中心提取10*10的像素矩阵
      • 5、对上一步中得到的像素矩阵, 使用亚像素精度, 两者进行计算互相关归一化模板匹配, 得到相似值
      • 6、取大于ncc相似值中值和小于FB_error的n2点和对应的n1点, 基于这些点计算原目标缩放和位移
    • 追踪算法

      • Median-Flow追踪算法

        • 采用的是Lucas-Kanade追踪器,也就是常说的光流法追踪器
        • 只需要知道给定若干追踪点,追踪器会根据像素的运动情况确定这些追踪点在下一帧的位置。
      • TLD原作认为一个好的追踪算法

        • 具有正反向连续性

          • 无论是按照时间上的正序追踪还是反序追踪, 产生的轨迹应该是一样的。
          • 根据这个性质规定了FB误差FB_error

            • 从时间t的初始位置x(t)开始追踪产生时间t+p的位置x(t+p),再从位置x(t+p)反向追踪产生时间t的预测位置x`(t),初始位置和预测位置之间的欧氏距离就作为追踪器在t时间的FB误差。
      • 追踪点的选择

        • 首先在上一帧t的物体包围框里均匀地产生一些点,然后用Lucas-Kanade追踪器正向追踪这些点到t+1帧,再反向追踪到t帧,计算FB误差,筛选出FB误差最小的一半点作为最佳追踪点。
        • 最后根据这些点的坐标变化和距离的变化计算t+1帧包围框的位置和大小(平移的尺度取中值,缩放的尺度取中值。
  • learning

    • 利用第一帧,和框定目标,训练,初始化在线模型
    • 用预测到的下一帧目标, 来学习修正Randofern在线模型, 和最近邻在线模型
    • 根据追踪器和检测器产生的正负样本, 迭代训练分类器, 改善检测器的精度
    • P-N学习

      • 半监督机器学习算法
      • 针对检测器对样本分类时产生的两种错误, 提供两种“专家”进行纠正
      • 两个专家

        • P专家

          • 检出漏检的正样本(正样本被分为负样本)
        • N专家

          • 改正误检的正样本(负样本误分为正样本)
      • 样本产生

        • 使用扫描框对图像逐行扫描,确定的区域成为图像元patch, 成为一个样本
        • 扫描产生的样本是未标签样本, 需要用分类器分类,确定它的标签
        • 如果算法言确定物体在t+1帧的位置

          • 从检测器产生的包围框中, 筛选出十个与物体位置距离最近的包围框

            • 两个包围框的交面积/并面积>0.7
          • 对每个包围框做微小的仿射变化, 产生20个图像元,这样就产生了200个正样本

          • 在选出若干记录较远的包围框,产生负样本

            • 交的面积/并的面积<0.2
        • 这样产生的样本是已标签的样本, 把这些样本放入训练集, 用于更新分类器的参数

      • 算法的结果应该具有“结构性”

        • 每一针图像内,物体最多只出现在一个位置
        • 相邻帧物体间的运动是连续的, 连续帧的位置可以构成一条较平滑的轨迹
        • 整个追踪过程中, 轨迹可能是分段的, 因为物体有可能中途消失, 之后再度出现
        • P专家的作用

          • 寻找数据在时间上的结构性
          • 利用追踪器的结果预测物体在t+1帧的位置
          • 如果这个位置(包围框)被检测器分类为负,P专家就把这个位置改为正。
          • P专家要保证物体在连续帧上出现的位置可以构成连续的轨迹
        • N专家的作用

          • 寻找数据在空间上的结构性
          • 检测器产生的和P专家产生的所有正样本进行比较,
          • 选择出一个最可信的位置,保证物体最多只出现在一个位置上,
          • 把这个位置作为TLD算法的追踪结果。同时这个位置也用来重新初始化追踪器。
  • detection

    • 通过learing学习到的在线模型进行目标预测

      • 对每一帧图像都做全面的扫描
      • 找到与目标物体相似的所有外观的位置
      • 从检测产生的结果中,产生正样本, 和负样本, 交给学习模块
      • 从所有正样本和负样本中选出一个最可信的位置,作为这一帧TLD的输出结果
      • 然后用这个结果更新追踪器的起始位置
    • 作用

      • 估计跟踪器的误差, 如果误差很大就改正追踪器的结果
    • 根据目标大小,把一帧图像分割为很多不同尺寸的图像片

    • 三层级联分类器:把不适合的图像片去掉,剩余的就是可能是目标的图像片

      • 方差分类器

        • 若图像片的方差小于【方差在线模型】的一半, 则认为这些是背景,丢弃。
      • RandomFern分类器

        • 利用【RandomFern在线模型】计算每个图像片的后验概率

          • 训练时, 把图像片与在线模型重叠度>0.6的分为 好的box,<0.2为坏的box。
          • 每个图像片会产生13个点对,利用这些点对产生13位二进制码,上二进制码记为1
          • 最后,用好的box产生的每个二进制码的出现次数/(好box+坏box的出现次数),便得出每个不同二进制码的概率
        • 若小于阈值,就可以丢弃

      • 最近邻分类器

        • 利用【最近邻在线模型】计算出图像片与在线模型的相关相似度
        • 若相关相似度大于阈值, 才能通过分类器, 否则被丢弃
    • 其他参考文章

  • 根据跟踪器和检测器预测下一帧目标所在位置

    • 1、跟踪器:跟踪到目标图像片t1

      • 如果跟踪不到目标, 但检测目标聚类只有一种, 就用该聚类结果预测目标位置
    • 2、检测器:检测到目标

    • 3、检测器:将检测到的图像片聚类

      • 若只有一个结果与检测结果差距较远, 且检测器的conf较大, 用检测器结果纠正跟踪器
      • 若能检测不能跟踪,就用检测结果纠正跟踪器
    • 4、检测器:找出聚类后、与跟踪器找到的图像片,重叠度小于0.5,且相似相关度大的图像片, d1

    • 利用t1和d1进行加权平均
    • 预测到下一帧目标所在位置

工作流程

  • 1、检测器由一系列包围框产生样本, 经过三层级联分类器产生正样本, 放入样本集。
  • 2、追踪器:估计出物体的新位置
  • 3、P专家:根据追踪器估计的新位置产生正样本
  • 4、N专家:从这些正样本里选出一个最可信的,同时将其他正样本标记为负
  • 5、最后用正样本更新检测器的分类器参数, 并确定下一帧物体包围框的位置

程序运行框架

XMind: ZEN - Trial Version