在当前互联网时代,记录和分享了大量不可估量的多媒体数据。其中,视频是最常见和最丰富的模式之一,尽管它也是处理成本最高的模式之一。因此,快速精确的视频处理算法对于实际应用变得至关重要。视频对象分割(即,将视频序列的像素组分类为感兴趣的对象和背景)是尽管具有许多且有吸引力的应用的任务当前不能以令人满意的质量水平和以可接受的方式执行速度。
问题的模式是一种简单而直观,但功能强大而且尚未探索的方式。视频对象分割正在制定为学习嵌入空间中的按像素检索。理想情况下,在嵌入空间中,属于同一个对象实例的像素靠近在一起,而来自其他对象的像素则进一步分开。该模型是通过学习完全卷积网络(FCN)作为嵌入模型而构建的,使用为视频对象分割量身定制的修改后的三重线性丢失,其中没有给出像素之间的明确对应关系。
这个公式有几个主要的优点:首先,所提出的方法是高效的,因为在测试时间内没有微调,并且它只需要通过嵌入网络的单个正向通路和最近邻搜索来处理每个帧。其次,这种方法提供了在统一框架下灵活地支持不同类型的用户输入(即点击点,涂鸦,分割掩模等)。而且,嵌入过程与用户输入无关。因此,当用户输入改变时,嵌入向量不需要重新计算,这使得该方法适用于交互式场景。
交互式视频对象分段:交互式视频对象分段依靠迭代用户交互来分割感兴趣的对象。已经提出了许多技术来完成这项任务。
深度量度学习:深度量学习的关键思想通常是通过网络转换原始特征,然后直接比较嵌入空间中的样本。通常,进行度量学习是为了学习图像或补丁之间的相似性,而基于像素方式度量学习的方法是有限的。
这项工作为视频对象分割提供了一个概念上简单但非常有效的方法。这个问题是通过修改专门为视频对象分割而设计的三元组损失来学习嵌入空间中的像素方式检索。这样,视频上的注释像素(通过涂鸦,第一个掩模上的分割,点击等)就是参考样本,其余像素通过简单且快速的最近邻近方法进行分类。
问题在于将视频对象分割视为像素方式的检索问题,也就是说,对于视频中的每个像素,我们寻找嵌入空间中最相似的参考像素并为其分配相同的标签。该方法由两个步骤组成:
用户输入来微调模型:第一种方法是根据用户输入将网络微调到特定对象。例如, OSVOS或MaskTrack等技术 根据用户输入在测试时间对网络进行微调。处理新视频时,需要进行多次训练迭代才能将模型调整为特定的目标对象。这种方法可能非常耗时(每个序列秒数),因此对于实时应用程序来说是不切实际的,特别是对于循环中的人。
用户输入作为网络输入:注入用户交互的另一种方式是将其用作网络的附加输入。这样,在测试时间不进行培训。这些方法的缺点是,一旦用户输入改变,网络必须重新计算。考虑到大量的帧,这仍然是相当长的时间,特别是对于视频。
与上述两种方法相反,在所提出的工作中,用户输入与网络计算分开。因此网络的正向传递只需要计算一次。在用户输入之后的唯一计算是最近邻居搜索,这是非常快的并且能够对用户输入进行快速响应。
嵌入模型:在所提出的模型f中,其中每个像素x j,i被表示为d维嵌入向量ej,i = f(xj,i)。理想地,属于相同对象的像素在嵌入空间中彼此靠近,并且属于不同对象的像素彼此远离。嵌入模型基于ResNet骨干架构基于DeepLab构建。
deeplab模型是一个基本特征提取器,并且是作为嵌入头的两个卷积层。所得到的网络是完全卷积的,因此一帧中所有像素的嵌入矢量可以在单个正向通道中获得。对于尺寸为h×w像素的图像,输出是张量[h / 8,w / 8,d],其中d是嵌入空间的尺寸。由于FCN被部署为嵌入模型,由于卷积操作的平移不变性质,空间和时间信息不被保留。形式上,嵌入函数可以表示为:
Train Loss
度量学习的基本思想是将相似的样本靠近在一起,并将不相似的点推入嵌入空间。适当的训练损失和采样策略对于学习稳健的嵌入通常是至关重要的。下面我们介绍专门为视频对象分割设计的训练损失和采样策略。
在度量学习文献中,对比损失[9,13],三重损失[4]及其变体广泛用于度量学习。然而,我们认为,并且在我们的实验中验证,标准损失不适合于手头的任务,即视频对象分割,可以说由于视频中出现对象内变化。换句话说,三重点损失是针对样本的身份清晰的情况而设计的,视频对象分割的情况并非如此,因为对象可以由多个部分组成,并且每个部分可能具有非常不同的外观。因此,将这些样本彼此靠近,是一个额外的约束条件,可能对学习稳健度量有害。我们用图3中的一个例子来说明这种效应。
图3.逐像素特征分布图:绿色表示来自摩托车的像素,蓝色表示人,黑色背景。本视频中的感兴趣的对象和注释是人类和摩托车。 然而,来自摩托车和人的特征位于特征空间中的两个集群中。 关闭这两个群集对于度量学习可能是有害的。 可视化由t-SNE完成[21]。
牢记这一点,我们修改标准三元组损失以适应我们的应用。形式上,让我们把锚样本称为xa。 xp∈P是来自正样本池P的正样本。同样,xn表示负样本,N表示负池。标准三重线的损失会将锚点与负样本点之间的距离推得更远。由于我们不想拉近每一对正点(对象的不同部分看起来不同),所以我们修改损失只会比最小正点推得更小的负点,因此损失可以表示为:
其中i和j表示帧j中的第i个像素。使用修改的三重损失:
其中α是控制正样本和负样本之间差距的松弛变量,如标准公式中所示,并且我们将锚定集表示为A.
对于每个锚样本xa,我们有两个样本池:一个正样本池P,其标签与锚一致,另一个负样本N池,其标签与锚样本不同。我们将最接近的样本拿到每个游泳池的锚点,然后比较正距离和负距离。直觉上,损失只推动最接近的负值,同时保持最接近的正值。
Train Strategy
在训练过程中,我们已经完全注释了可用的视频(每帧的对象分段)。为了形成一个有效的三元组来训练,用于上述损失,我们需要对锚点xa,一个正样本池P和一个负样本池N进行采样。为此,从训练中随机抽样三个帧视频:从一个我们对锚点进行取样,另外两个帧的像素连接在一起。由此,具有与锚点相同的标签的像素形成正池P,其余的形成负池N.注意,池从两个不同的帧中采样以具有时间变化,这对于嵌入头是需要的学习从特征向量中加权时间信息。另外,我们不使用来自池中的锚帧的像素以避免太简单的样本。
在每次迭代中,以一帧作为锚点对三个随机选择的帧执行正向传递。然后使用锚帧对256个锚样本进行采样,并且正和负池都是其他两帧中的前景和背景像素。我们根据公式1计算损失,网络以端到端的方式进行训练。
DAVIS 2016验证集的评估结果