了解CV和RoboMaster视觉组(五)目标跟踪:概述与光流法

[email protected]

5.4.目标跟踪

为了简化分析和学习过程,本文所指的目标跟踪皆为单目标跟踪。其任务是在给定某图像序列初始帧中的目标位置和范围(cx,cy,h,w)的情况下,预测后续帧中该目标(cx,cy,h,w)。

5.4.1. 基本实现方法和原理

目标跟踪的pipline大致如下:

  1. 提取初始目标的特征

  2. 根据输入的初始位置与范围在之后的帧中依据运动模型和其他准则生成诸多候选框

  3. 根据某种准则由此目标的特征计算候选框的得分

  4. 选择一个得分最高的候选框或对多个候选框进行信息融合进而得到最为下一帧的预测目标

从以上的流程我们可以把目标跟踪划分为几个不同的研究领域:候选区域的提案方式(用什么运动模型?)、初始目标和候选目标的特征提取、候选目标的评分机制、模型更新(如何在运行过程中学习对象的运动模型从而优化后续的跟踪效果)、融合预测值从而获得更好的结果。在现行的几种模型中,我们常根据pipelin中1、3的不同把目标跟踪算法分为生成式判别式

  • 生成式的算法通过提取初始目标的特征构建一个表示模型用于描述目标的特征,在之后帧中用此表示模型来分析候选框,和初始目标进行对比从而得到得分。其本质上是一种模板匹配,在提取初始目标特征的时候得到一个用于匹配的模板,随后在候选区域上应用该模板进行匹配。

  • 判别式模型则是将跟踪问题看作分类/回归问题,希望习得一个判断函数(映射),将候选框投入此映射得到分类或得分。其本质上是利用初始帧的信息训练一个分类器/回归器,然后在之后的跟踪过程里不断更新分类器/回归器的参数。生成式和判别式的参数更新一般都是递归式地(熟悉的感觉有没有!递归滤波器它又回来了!实际上在早期的跟踪任务中,粒子滤波常用于生成式模型,卡尔曼滤波常用于候选框的确定)。

5.0 部分我们已经介绍了为什么要使用目标跟踪算法,其高速的特性使得我们可以降低算力消耗,甚至可以在用目标检测得到第一帧后同时运行目标跟踪和目标检测算法并对两者的结果进行融合(目标检测依赖gpu算力而目标跟踪除cnn方法外主要使用cpu,实测cpu在运行视觉算法的时候占用率大概只有20%-30%,不过这貌似和之后的CNN-Based方法有点套娃了),大大提高置信度。在实际工业应用中,目标跟踪、目标检测和重识别也常常配合使用。

目标跟踪示例,可以看到多种颜色的候选框,左上角是从开始跟踪到当前时刻经过的帧数

本节我们主要介绍几种经典的跟踪方法。


5.4.2.光流法(Optic Flow)

顾名思义,光流要追踪的就是“光的流动”,即计算或估计两帧连续图像中相同点的移动。稀疏光流将会计算视频流中数个关键点在之后帧的移动轨迹;而稠密光流则是对图像上的所有像素都计算移动距离,这将会在二维平面上得到一个向量场

稠密光流和稀疏光流的对比 -图源知乎https://zhuanlan.zhihu.com/p/74460341

  • 传统的算法包括LK(Luca-Kanade,经典的稀疏光流算法)和Farneback(稠密光流,这个算法对数学功底尤其是线性代数的要求比较高,是作者的博士论文,请参考Two-Frame Motion Estimation Based on Polynomial Expansion)以及他们的变种和改进,新兴的算法包括基于深度学习的光流估计和基于运动场能量的算法(最小作用量?)。

    两个传统算法都有一个假设:物体亮度不变。以稀疏光流为例,我们希望特征点在两帧之间的亮度不变,这样才能较好地追踪它们的运动,在当前帧和之后帧的像素点间建立联系。算法的具体流程和推导可以参考这两篇文章,已经解释的非常好了:

    1. 稀疏光流KLT

    2. 光流估计——从传统方法到深度学习

  • 而使用CNN进行光流估计的开山之作是FLowNet,它针对的场景是稠密光流。相信经过之前的学习,你应该已经很熟悉这类算法的流程了:我们希望网络的输出是一个二维向量场——那么输出的尺寸和输入相同(这似乎和分割任务完全一致!),并且每个像素位置上应该有两个值,这样就能代表一个二维向量,表示两帧之间该点的动向。那么网络的结构就呼之欲出了,我们需要一个全卷积网络或反卷积网络,形如曾经红极一时的U-Net。其实也可以看作一个Encoder-Decoder的结构。了解CV和RoboMaster视觉组(五)目标跟踪:概述与光流法_第1张图片不过,应该如何进行标注?难道要人眼逐帧辨别像素的运动?这个工作量有些太吓人了。FlowNet的作者非常有创造力,他将一些其他物体以图层的方式叠加到背景下,作为第一帧图像,随后对这些物体进行“稍稍”的仿射变换以形成轻微变形和位移并再叠加到相同的背景下,得到第二张图像:

    了解CV和RoboMaster视觉组(五)目标跟踪:概述与光流法_第2张图片

    右侧图像显示了两帧之间移动的像素点,不同颜色表示位移矢量的方向,颜色深浅表示矢量大小

    这样就可以在几乎无人工成本的情况下得到大量的label data,作者还用这种方法制作了一个数据集,就叫“flyingchairs”。

    后续FlowNet还推出了2.0版本,主要是加入了级联结构,实现光流估计的coarse2fine过程,预测得结果变得更加精确并且在速度远超传统算法的情况下精度实现了SOTA。

  • 更多关于深度光流估计的论文,可以参考这个系列文章:2019-2020基于深度学习的光流技术调研 - 知乎 (zhihu.com)

对于RoboMaster比赛来说,稠密光流没有很大的用处,我们不需要知道图像上每一个点的运动趋势,这毫无意义(当然RUMA除外,稠密光流是视觉SLAM中一种很好的建图方法)。稀疏光流对于我们来说更有价值,如果对装甲板进行跟踪,我们可以直接跟踪装甲板灯条的四个角点,在之后帧中都不需要进行后处理就可以直接进行PnP解算了。对于雷达系统,我们也可以利用光流来确定运动的物体,进而划分ROI减小识别的压力。

你可能感兴趣的:(光流法,目标跟踪,深度学习,卷积神经网络,稀疏光流)