Robust High-Resolution Video Matting with Temporal Guidance
论文下载:https://arxiv.org/pdf/2108.11515.pdf
github:GitHub - PeterL1n/RobustVideoMatting: Robust Video Matting in PyTorch, TensorFlow, TensorFlow.js, ONNX, CoreML!
Nvidia GTX 1080Ti GPU上 4K视频76 FPS,HD 视频104 FPS。
使用循环架构来利用视频中的时间信息,并在时间连贯性和抠图质量方面取得显着改善。
不需要任何辅助输入,例如trimap或预先捕获的背景图像。
使用时间记忆处理视频,而不是将每一帧作为独立图像处理。
不再使用基于补丁的细化,理论上所有推理框架都能支持。
网络主要分成三部分:
Encoder :一个提取单帧特征的编码器;
Recurrent Decoder: 一个聚合的循环解码器;
Upsampler:一个用于高分辨率上采样的深度引导滤波器模块(DFG)。
1.特征提取Encoder
这部分是基于最新的语义分割网络。backbone采用MobileNetV3-Large,之后接LR-ASPP。注意MobileNetV3最后一层使用了没有下采样stride的空洞卷积。
特征提取模块每帧都提取,在1/2、1/4、1/16的尺度提取的特征给Recurrent Decoder。
2.Recurrent Decoder
使用循环架构(recurrent architecture)而不是注意力机制或将多帧作为前馈额外输入。循环机制可以学习在连续的视频流中要保留和要忘记的信息。
解码器在多个尺度上采用ConvGRU来聚合时间信息。选择ConvGRU 是因为它比ConvLSTM参数更少效率更高。
Decoder模块包含Bottleneck Block、upsampling blocks和 output block。
Bottleneck block。该模块接在1/16的特征尺度,在LR-ASPP后面。该模块包含一个ConvGRU,但是通过split和 concate只用到了ConvGRU一半的channels。
因为ConvGRU 在计算上是可扩展,这样就显著减少了参数量和计算量。
Upsampling block。在1/8、1/4、1/2的尺度特征那里做上采样。上一个block先做双线性上采样然后跟encoder中下采样对应的相同的尺度特征做concat。输入图
片做下采样是通过2X2的平均池化。然后BN和ReLU后面跟卷积,这个卷积就是用来做特征合并和降通道。最后ConvGRU用来将通道数减半。
Output block。这里没用到ConvGRU。只用到了卷积来refine结果。这里先把输入图片和前一个block的双线性上采样输出concat,然后重复ConV+BN+ReLU两次,
最后特征图投影到输出,包括1个通道的alpha预测,3通道前景预测和1通道的分割预测。分割结果用于分割训练。
ConvGRU拆分一半用来concate非常有效。这种设计让ConvGRU专注于聚合时间信息,另一半前传当前帧的空间特征。所有卷积都用3x3的核,除了最后映射部分用到了
1x1的卷积核。
网络每次以T帧作为输入,每层网咯在传给下一层网络前计算全部T帧。这样训练的时候BN计算跨batch和时间的统计数据更一致。推理时,如果允许缓存帧,T=1可用于处理
实时视频,T>1可用于处理多GPU并行。recurrent decoder是单向的,因此可用于直播和后处理。
3.DGF模块
采用DGF模块。处理4K和HD视频时,通常下采样,然后低分辨率的alpha、前景、标签,还有高分辨率的输入帧都会输入给DFG模块以生成高分辨率的alpha和前景。整个网络
是端到端训练的。DFG是可选模块,如果视频是低分辨率的,那么只运行encoderdecoder 网络。
DGF论文:https://arxiv.org/pdf/1803.05619.pdf
代码:GitHub - wuhuikai/DeepGuidedFilter: Official Implementation of Fast End-to-End Trainable Guided Filter, CVPR 2018
DGF(Deep Guided Filter)将引导滤波的思想用到了网络之中,先在小图上进行学习,再通过引导滤波器上学习特定任务的引导图实现对生成小图上采样,最后恢复大图。
引导滤波的引导矩阵,需要根据不同的任务需要手工选定。DGF中,作者将引导图片作为神经网络的学习的一部分,根据不同的任务会自动学习出该引导矩阵。
在利用神经网络生成图片中,特别是高分辨率图片,一般其速度非常慢,比如pix2pix。DGF论文在引入引导滤波后只需要先生产低分辨率图片,然后将引导矩阵上采样,接着利用引导滤波公式就能够生产高分辨率的图片。
这样一来主要计算都集中在低分辨率的图片上,高分辨图片生成的计算量就变得很少。
4.ConvGRU模块
GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。
GRU和LSTM在很多情况下实际表现上相差无几。但相比LSTM,使用GRU更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。
GRU论文:https://arxiv.org/pdf/1412.3555.pdf
将GRU中全连接权重改为卷积即为ConvGRU。
同时训练matting和语义分割。原因是:1.人工抠图有何语义分割任务联系很紧密;2.大多数数据集只提供了alpha和前景图;3.语义分割有更多训练数据。
Matting Datasets。用了VideoMatte240K、Distinctions-646和 Adobe Image Matting。
Segmentation Datasets。YouTubeVIS、COCO和SPD。
T帧都参与loss计算。为了学习alpha结果,使用L1-loss和拉普拉斯金字塔loss。为了减少不稳定,使用coherence loss。学习foreground使用L1-loss。
语义分割部分。使用交叉熵损失。