Robust High-Resolution Video Matting with Temporal Guidance算法笔记

Robust High-Resolution Video Matting with Temporal Guidance 论文地址
RobustVideoMatting 代码地址
Robust High-Resolution Video Matting with Temporal Guidance 论文翻译

版权声明:本文为CSDN博主「Kaleidoscope-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45929156/article/details/123297720

一、算法简介

语义分割
图像是由许多像素(Pixel)组成,而语义分割顾名思义就是将像素按照图像中表达语义含义的不同进行分组(Grouping)/分割(Segmentation)。例如让计算机在输入下面左图的情况下,能够得到右图。在图像领域,语义指的是图像的内容,对图片意思的理解。
在这里插入图片描述

抠图算法
已知输入图像 I I I,背景图像 B B B,求图像 I I I的前景 F F F,以及前景概率 α α α。(前景与背景相对,指我们所需的人像及人所持的物体) I = α F + ( 1 − α ) B ( 1 ) I = αF+(1-α)B \quad (1) I=αF+(1α)B1

所以视频中的每一帧 I I I 可以被看作是前景 F F F 和背景 B B B 通过 α α α 系数的线性组合,通过提取 α α α F F F,我们可以将前景物体合成到新的背景中,达到背景替换的效果。

现在的大多数方法都是将视频的每一帧作为独立的图像,因此,这些方法忽略了视频中最普遍的特性:时间信息。
在之前的Background matting算法中是逐帧进行预测的,因而并没有很好使用视频帧本身的时序特性,但是这样的时序特征正是可以对抠图的结果带来较大的提升,主要体现为:

  1. 视频帧之间预测的结果是存在序列相关性的,因而可以根据这个相关性得到更加鲁棒的抠图结果
  2. 使用序列帧作为输入,可以随着目标的移动学习到丰富的背景信息
  3. 视频本身的时序特性为引入类LSTM提供了前提,从而可以更加有效提取特征用于背景预测

除了上述提到的引入视频序列到网络结构中之外,文章还将整个网络构建为一个语义分割和抠图的多任务网络,从而可以在两个任务上进行优势互补。这样做的原因可以归纳为如下几点:

  1. 人像语义分割和抠图任务在某种程度上是共通的,这就为两者联合起来提供基础
  2. 大多数现有的抠图数据集只提供了必须合成到背景图像中的ground-truth α \alpha α和前景,这种合成看起来有点假,另一方面语义分割的数据集是真实图片,背景特征丰富,能够防止对合成数据的过拟合;
  3. 人像语义分割的数据集从数量还是标注成本上都远好于抠图数据集

二、网络结构

在这里插入图片描述
(图2:我们的网络由特征提取编码器、递归解码器和深度引导滤波器(DGF)模块组成。为了处理高分辨率视频,编码器-解码器网络首先对输入进行下采样,然后使用DGF对结果进行上采样。)

  • 编码器(Encoder):
    作用:提取特征
    主干网络:MobileNetV3-Large
    语义分割:LR-ASPP 模块
    编码器对单独的帧进行操作,并为循环解码器提取 1 2 \frac{1}{2} 21 1 4 \frac{1}{4} 41 1 8 \frac{1}{8} 81 1 16 \frac{1}{16} 161规模大小的特征。目的是尽可能多的提取低级特征和高级特征,从而利用提取到的空间信息和全局信息精确分割。
    在输入编码器之前会对高分辨率的图片进行下采样得到低分辨率的输入图像,之后经过backbone为MobileNetV3-Large(最后一个stage用膨胀卷积替换下采样操作),然后接上多尺度聚合LR-ASPP,从而得到输出尺度为 ( 1 2 , 1 4 , 1 8 , 1 16 ) (\frac{1}{2},\frac{1}{4},\frac{1}{8},\frac{1}{16}) (21,41,81,161)在这里插入图片描述

  • 递归解码器(Recurrent Decoder):
    作用:聚合时间信息
    解码器部分主要利用上采样操作逐步恢复空间维度,融合编码过程中提取到的特征,在尽可能减少信息损失的前提下完成同尺寸输入输出。
    文章并没有采用注意力机制或者将前馈的多帧作为额外的输入,而是采用反馈机制,引入了ConvGRU对时序信息进行处理。上一级的特征输入之后会对其在channel维度上进行切分,一部分走传统的解码单元,一部分走ConvGRU。这样做的目的是兼容当前视频帧的信息和过往帧的信息。
    此外,还在低分辨率的解码单元中引入低分辨率的原图,这样可以增加一些细节的引导。
    在这里插入图片描述
    解码器包含:
    a、Bottleneck block :在LR-ASPP模块之后,对1/16大小规模的特征进行操作,采用 ConvGRU。
    在这里插入图片描述
    b、Upsampling block:重复运用于1/8,1/4和1/2规模大小的特征,采用 ConvGRU。
    在这里插入图片描述
    c、Output block在这里插入图片描述

  • 深导滤波器(DGF)
    可选模块,用于处理4K和HD这样的高分辨率视频,对输入帧进行因子s的下采样,然后将低分辨率 α \alpha α、前景F、最终隐藏特征以及高分辨率输入帧提供给DGF模块,生成高分辨率 α \alpha α 和前景F。实际上就是一个融入了可学习参数的引导滤波器,可以更好地拟合出一个边缘精确的分割结果。
    原理可参考:基于可学习参数的深度导向滤波器 Deep Guide Filter
    在这里插入图片描述

三、训练

1、数据集

抠图数据集

  • VideoMatte240K (VM)
  • Distinctions-646 (D646)
  • Adobe Image Matting(AIM) datasets

语义分割数据集

  • YouTubeVIS
  • COCO
  • SPD

2、训练过程

第一阶段:首先在没有DGF模块的情况下对video matting进行低分辨率的训练。设定一个短序列长度T=15帧,这样网络就能更快地得到更新。

第二阶段:将T增加到50帧,将学习率降低一半,并保持第一阶段的其他设置来训练 。

第三阶段:加上DGF模块,video matting模型训练用高分辨率的样本训练1个epoch。由于高分辨率会消耗更多的GPU内存,所以序列长度必须被设置为非常短。为了避免递归网络对非常短的序列过度拟合,我们在低分辨率的长序列和高分辨率的短序列训练网络

第四阶段:在D646和AIM的组合数据集上训练了5个epoch。

3、损失函数

损失函数参考博客:RVM算法笔记

文章的方法是人像语义分割和matting联合训练的,因而网络的损失就是源自于这两个任务。

  1. 抠图损失:
    首先对matting中的alpha使用L1损失和拉普拉斯金字塔损失,并在此基础上考虑到视频的时序特性引入alpha时序相关性损失(也就是对alpha帧差进行回归):在这里插入图片描述
    对于matting的fg部分使用的是L1损失加上时序相关损失的形式:在这里插入图片描述
    因而,整体上损失可以描述为:在这里插入图片描述
  2. 人像语义分割损失:
    这里人像分割损失采用的是二值较差熵损失的形式:在这里插入图片描述
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐