通过视频着色进行自监督跟踪

LiveVideoStack 2020年10月15日

方法的实现可以访问链接了解:

https://github.com/hyperparameters/tracking_via_colorization

原文:https://towardsdatascience.com/self-supervised-tracking-via-video-colorization-7b2b066359d5

目标跟踪概述

简单地说,它可以理解为在整个视频序列中识别唯一的对象。要跟踪的对象通常称为目标对象,跟踪可以通过边界框或实例分割来完成,有两种类型的公共对象跟踪挑战。

1. 单目标跟踪:在整个视频序列中跟踪感兴趣的目标,例如VOT挑战

2. 多目标跟踪:在整个视频序列中跟踪多个感兴趣的目标。例如:MOT挑战

研究趋势

一些著名的经典的用于解决目标跟踪CV算法的是:

1. Mean shift

2. Optical flow

3. Kalman filters

其中最著名的一种多目标跟踪算法是SORT,是以卡尔曼滤波器为核心,并且非常成功的一种算法。

随着深度学习时代的到来,社会上出现了非常有创新性的研究并且深度学习方法成功地胜过了传统的CV方法来应对公共跟踪挑战。尽管在公共挑战方面取得了巨大成功但深度学习仍在努力为现实世界中的问题陈述提供通用的解决方案。

深度模型的挑战

在训练深度CNN模型时,我们面临的主要挑战之一是训练数据。

训练数据:深度学习方法需要大量的数据,这几乎每次都会成为一个瓶颈。此外,像多目标跟踪这样的任务很难注释,而且这个过程变得不切实际而且成本高昂。

深度模型数据永远不嫌多

用自监督学习来拯救

我们都知道有监督和非监督学习技术。这是一种被称为自监督学习的新型学习方式。在这些类型的学习中,我们试着利用数据中已经存在的信息,而不是任何外部标签,或者有时我们说模型是自己学习的。实际上,我们所做的就是训练CNN模型去完成一些其他的任务,间接地帮助我们实现我们的目标,这个模型自我监督。这些任务被称为“代理任务”或“借口任务”。

代理任务的示例如下:

  • 颜色化

CNN模型学习从灰度图像预测颜色。(来源:https://arxiv.org/abs/1603.08511)

  • 将图像补丁放在正确的位置

从图像中提取补丁并将其打乱。模型学习如何解开拼图并按照正确 的顺序排列,如图3所示。(来源:https://arxiv.org/abs/1603.09246)

  • 按正确的顺序放置视频帧

该模型学习在视频序列中对打乱的帧进行排序。[来源:https://arxiv.org/abs/1708.01246]

许多这样的任务可以用作计算机视觉问题的代理任务。这种训练的一个主要好处是训练不需要手动注释数据,并且适合解决生活中实际的用例。

通过视频着色进行自监督跟踪

我们已经看到了并了解了什么是自监督模型,您一定猜到了我们将使用着色作为我们的代理任务的名称。

通过给视频着色来实现跟踪

我们使用大量未标记视频学习模型的视觉跟踪无需人工监督。

arxiv.org(https://arxiv.org/abs/1806.09594)

简介

着色是代理任务或借口任务,目标跟踪是主要任务或下游任务。采用大规模的无标记视频对模型进行训练,不需要人工进行任何单一像素的标注。该模型利用视频的时间相干性对灰度视频进行着色。这看起来可能有点混乱,但我会慢慢给大家讲明白。

模型将如何学习跟踪

 

我们将取两个帧,一个目标帧(时刻t),一个参考帧(时刻t-1),并通过模型。该模型期望通过对参考帧颜色的先验知识来预测目标帧的颜色。通过这种方式,模型内部学会了指向正确的区域,以便从参考框架复制颜色,如图所示。这种指向机制可以用作推理期间的跟踪机制,我们将很快看到如何做到这一点。

模型接收一个彩色帧和一个灰度视频作为输入,并预测下一帧的颜色。模型学会从参考系复制颜色,这使得跟踪机制可以在没有人类监督的情况下学习。[来源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]

我们不复制网络中的颜色,而是训练我们的CNN网络学习目标帧的像素和参考帧的像素之间的相似度(相似度是灰度像素之间),然后线性组合时使用此相似度矩阵参考帧中的真实颜色会给出预测的颜色。从数学上讲,设Cᵢ为参考帧中每个像素i的真实颜色,Cⱼ为目标帧中每个像素j的真实颜色。

 

[资源链接:https://arxiv.org/abs/1806.09594]

公式1:预测颜色与参考颜色的线性组合

如何计算相似度矩阵

无论是图像、参考帧还是目标帧都经过模型学习后对每个像素进行了低层次的嵌入,这里fᵢ是像素i在参考帧中的嵌入,类似地,f是像素j在目标帧中的嵌入。然后,计算相似度矩阵:

公式2:用softmax归一化的内积相似度

相似矩阵中的每一行表示参考帧的所有像素i和目标帧的像素j之间的相似性,因此为了使总权重为1,我们对每一行应用softmax。

Lets look an example with dimension to make it clear,we try to find a similarity matrix of 1 pixel from target frame.An illustration of this example is shown below.Consider reference image and target image, size (5, 5) => (25,1)for each pixel, cnn gives embedding of size (64, 1), embedding for reference frame, size (64, 25), embedding for target frame, size (64, 25),  embedding for 3rd pixel in target frame, size (64, 1)Similarity Matrix, between reference frame and target pixel, j=2  =softmax  , size (25, 64)  (64, 1) => (25,1) =>   (5, 5)we get a similarity between all the ref pixels and a target pixel at j=2.Colorization, To copy the color (here, colours are not RGB but quantized colour of with 1 channel) from reference frame,, Colors of reference frame size (5, 5) => (25, 1), Similarity matrix, size (5, 5) => (1, 25)Predicted color at j=2, , size (1, 25) (25, 1) => (1, 1)From the similarity matrix in below figure, we can see reference color at i=1 is dominant(0.46), thus we have a color copied for target, j=2 from reference, i=1PS:1. ᵀ denotes transpose2. matrix indices starts from 0

(a)为2帧大小(5,5),(b)为参考帧嵌入与目标像素在j =2处嵌入的内积,(c) softmax后的相似度矩阵,(d)相似度矩阵与参考帧真颜色的线性组合[来源:https://github.com/hyperparameters/tracking_via_colorization]

同样,对于目标帧中的每个目标像素((5,5)=> 25个像素),我们将会有一个相似矩阵的大小(5,5),即大小为(5,5,25)的完整相似度矩阵Aᵢⱼ =(25,25)。

在实现中,我们将使用(256 x 256)图像扩展相同的概念。

图像量化

第一行显示原始帧,第二行显示来自实验室空间的ab颜色通道。第三行将颜色空间量化到离散的容器中,并打乱颜色,使效果更加明显。[来源:https://arxiv.org/abs/1806.09594]

颜色是空间频率偏低,所以我们可以处理低分辨率的帧。我们不需要C(255,3)颜色组合,所以我们创建了16个聚类并将颜色空间量化为这些聚类。现在我们只有16种独特的颜色簇(见上图第3栏)。聚类是用k-均值完成的。16个群集会有一些颜色信息的丢失,但足以识别物体。我们可以增加聚类的数目来提高着色的精度,但代价是增加计算量。

[来源:https://arxiv.org/abs/2002.07793]

为了将图像量化成簇,我们将使用LAB颜色空间的AB通道而不是RGB颜色空间通道。上面的图显示了RGB和LAB通道间的相关性,从图中我们可以得出结论

RGB往往比LAB更具相关性。

LAB将强制模型学习不变性,它将强制其学习更强大的表示形式,而不是依赖于本地颜色信息。

可以使用sklearn的KMeans软件包进行聚类。

这个类将用于制作颜色的簇,我们将把它存储为一个pickle。

实现

注意:我使用pytorch来进行实现,它遵循(N, C, H, W)格式。在处理矩阵重塑时要记住这一点。如果你对形状有任何疑问,请随时与我们联系。

该模型从参考帧中学习为视频帧着色。[来源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]

输入

该模型的输入是四个灰度视频帧,其下采样为256×256。三个参考帧和一个目标帧。

预处理

首先,我们将所有的训练视频压缩到6fps。然后预处理框架以创建两个不同的集合。一个用于CNN模型,另一个用于着色任务。

- Video fps is reduced to 6 fpsSET 1 - for CNN Model- Down sampled to 256 x 256- Normalise to have intensities between [-1, 1]SET 2 - for Colourization- Convert to LAB colour space- Downsample to 32 x 32- Quantize in 16 clusters using k-means- Create one-hot vector corresponding to the nearest cluster centroid

模型结构

所用的主干是ResNet-18,因此其结果与其他方法相当。ResNet-18的最后一层被更新为32 x 32 x 256的尺寸输出。ResNet-18的输出随后被传送到3D-Conv网络,最终输出为32 x 32 x 64。(下面的代码块显示了从ResNet-18网络获取输入的3D网络)

训练

训练可分为以下3个步骤:

1. 网络传递

我们将使用SET 1的预处理帧,即通过网络传递大小为(256 x 256)的4个灰度帧,以获得具有64个通道的(32 x 32)空间图。对于(32 x 32)图像的每个像素,这可以解释为64维嵌入。因此,我们有四个这样的像素级嵌入,三个用于参考图像,一个用于目标图像 。

2. 相似度矩阵

利用这五个嵌入,我们找到了参考帧和目标帧之间的相似矩阵。对于目标帧中的像素我们将获得一个相似度值,其中所有三个参考帧中的所有像素均通过softmax归一化为1。

3. Colourization着色处理

我们将使用SET 2的预处理帧,即将四个降采样为(32 x 32)并量化的帧用于着色。将三个参考帧与相似度矩阵相结合,得到预测的量化帧。我们发现了具有预测颜色的交叉熵损失,(记住,我们量化帧到16个聚类,现在我们有16个类别。我们发现在这些颜色上有多类交叉熵损失。

推理

跟踪预测的例子[来源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]

在学习了着色的任务后,我们有了一个模型,可以计算一对目标框架和参考框架的相似矩阵aᵢⱼ。对于跟踪的实际任务,我们利用了标签空间中模型是非参数的这一特性。我们简单地重复使用等式1来传播,但不是传播颜色,而是传播类别的分布。对于第一帧,我们有真实框掩码,我们将所有实例掩码布置为一独热矢量cᵢ(这类似于训练期间使用的量化颜色的一独热矢量)。将cᵢ与我们的相似性矩阵A相结合,以找到掩码的新位置,但请记住,随后几帧中的cⱼ预测将变得很柔和,表明模型的置信度。为了做出艰难的决定,我们可以简单地选择最自信的那一类。推理算法为:

WHILE (target frame, reference frames) in the videostep 1. Pass the target and reference frames through CNN modelstep 2. Find Similarity Matrixstep 3. Take ground truth object masks as one-hot encodingstep 4. Linear combine the object masks with similarity matrixstep 5. Update ground truth object masks by predicted masks
 

失效模式

让我们来讨论一下,当模型在某些场景中趋于失败时,这主要是着色失败的情况,这意味着着色与跟踪有很高的相关性。

在以下情况下会发现一些故障:

  • 当光线在视频中剧烈或频繁变化时
  • 该方法成功地跟踪了轻微到中等遮挡情况下的目标,但当物体受到严重遮挡时无法进行对目标的跟踪
  • 物体尺寸大小突然发生变化
 
还可输入800
全部评论
作者介绍

LiveVideoStack

音视频技术社区

文章

粉丝

视频

阅读排行
  • 2周
  • 4周
  • 16周