《Robust High-Resolution Video Matting with Temporal Guidance》论文笔记

Posted m_buddy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Robust High-Resolution Video Matting with Temporal Guidance》论文笔记相关的知识,希望对你有一定的参考价值。

主页:homepage
参考代码:RobustVideoMatting

1. 概述

导读:这篇文章提出了一种视频场景下的实时matting算法(1080Ti GPU下4K分辨率76 FPS,HD分辨率104 FPS),在算法中考虑了视频的时序特性,在解码器单元中增加了ConvGRU(输入的维度为 [ B ∗ T ∗ 3 ∗ H ∗ W ] [B*T*3*H*W] [BT3HW]),用于进行帧间信息传导,从而提升视频matting的稳定性(同时引入了视频时序相关损失也有此目的)。在此基础上融合语义分割与matting任务,使得网络进行多任务训练,从而兼容了当前语义分割数据的场景多样化带来的预测鲁棒和matting预测带来的精细化细节预测。这样的pipeline下就无需使用传统matting所需的trimap或是background matting中需要(近乎)不变的背景前提假设。在此基础上文章通过引入DGF(Deep Guided Filter)用于获取高分辨率的matting结果。

在之前的background matting算法中是逐帧进行预测的,因而并没有很好使用视频帧本身的时序特性,但是这样的时序特征正是可以对matting的结果带来较大的提升,主要体现为:

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

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

  • 1)人像语义分割和matting任务在某种程度上是共通的,这就为两者联合起来提供基础;
  • 2)现有的人像语义分割数据集拥有广泛的场景分布,通过联合训练的方式可以对matting训练过程中数据“假”(带来过拟合问题)问题带来改善;
  • 3)人像语义分割的数据集从数量还是标注成本上都远好于matting数据集;

文章得到的效果可以参考下图所示:

2. 方法设计

2.1 整体pipeline

这篇文章提出的pipeline见下图所示:

可以从上图中看到文章提出的结构是典型的U型结构,主要的创新点集中在解码器阶段,在解码中添加了ConvGRU、原图下采样补充、DGF(Deep Guided Filter)等优化操作。

2.2 编码器单元

在输入编码器之前会对高分辨率的图片进行下采样得到低分辨率的输入图像,之后经过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)

2.3 解码器单元

在解码器单元中一个与传统解码不同的点是引入了ConvGRU对时序信息进行处理。上一级的特征输入之后会对其在channel维度上进行切分,一部分走传统的解码单元,一部分走ConvGRU。这样做的目的是兼容当前视频帧的信息和过往帧的信息。对于ConvGRU的计算过程可以描述为(初始的隐变量为0矩阵):
z t = σ ( w z x ∗ x t + w z h ∗ h t − 1 + b z ) z_t=\\sigma(w_{zx}*x_t+w_{zh}*h_{t-1}+b_z) zt=σ(wzxxt+wzhht1+bz)
r t = σ ( w r x ∗ x t + w r h ∗ h t − 1 + b r ) r_t=\\sigma(w_{rx}*x_t+w_{rh}*h_{t-1}+b_r) rt=σ(wrxxt+wrhht1+br)
o t = t a n h ( w o x ∗ x t + w o h ∗ ( r t ⊙ h t − 1 ) + b o ) o_t=tanh(w_{ox}*x_t+w_{oh}*(r_t\\odot h_{t-1})+b_o) ot=tanh(woxxt+woh(rtht1)+bo)
h t = z t ⊙ h t − 1 + ( 1 − z t ) ⊙ o t h_t=z_t\\odot h_{t-1}+(1-z_t)\\odot o_t ht=ztht1+(1zt)ot
除了上述的变化之外,还在低分辨率的解码单元中引入低分辨率的原图,这样可以增加一些细节的引导。

在最后高分辨率的预测阶段,文章使用DGF的方式进行实现,它是源自于:
Fast End-to-End Trainable Guided Filter

其实现可以参考:
guided_filter.py

2.4 损失函数

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

matting损失:
首先对matting中的alpha使用L1损失和拉普拉斯金字塔损失,并在此基础上考虑到视频的时序特性引入alpha时序相关性损失(也就是对alpha帧差进行回归):
L l 1 α = ∣ ∣ α t − α t ∗ ∣ ∣ 1 L_{l1}^\\alpha=||\\alpha_t-\\alpha_t^{*}||_1 Ll1α=αtαt1
L l a p α = ∑ s = 1 5 2 s − 1 5 ∣ ∣ L p y r s ( α t ) − L p y r s ( α t ∗ ) ∣ ∣ 1 L_{lap}^\\alpha=\\sum_{s=1}^5\\frac{2^{s-1}}{5}||L_{pyr}^s(\\alpha_t)-L_{pyr}^s(\\alpha_t^{*})||_1 Llapα=s=1552s1Lpyrs(αt)Lpyrs(αt)1
L t c α = ∣ ∣ d α t d t − d α t ∗ d t ∣ ∣ 2 L_{tc}^\\alpha=||\\frac{d\\alpha_t}{dt}-\\frac{d\\alpha_t^{*}}{dt}||_2 Ltcα=dtdαtdtdαt2
对于matting的fg部分使用的是L1损失加上时序相关损失的形式:
L l 1 F = ∣ ∣ ( α t ∗ > 0 ) ∗ ( F t − F t ∗ ) ∣ ∣ 1 L_{l1}^F=||(\\alpha_t^{*}\\gt0)*(F_t-F_t^{*})||_1 Ll1F=(αt>0)(以上是关于《Robust High-Resolution Video Matting with Temporal Guidance》论文笔记的主要内容,如果未能解决你的问题,请参考以下文章

《Boosting Monocular Depth Estimation Models to High-Resolution ...》论文笔记

论文阅读 | Restormer: Efficient Transformer for High-Resolution Image Restoration

美团热修复Robust-源码篇

美团热修复Robust的踩坑之旅-使用篇

R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集

Android 美团Robust热更新 使用入门