


RobustVideoMatting 是字节跳动研究的,专为稳定人物视频抠像设计的开源项目。不同于现有神经网络将每一帧作为单独图片处理,RobustVideoMatting 使用循环神经网络,在处理视频流时有时间记忆。可在任意视频上做实时高清抠像。
RobustVideoMatting 的 Github 地址:https://github.com/PeterL1n/RobustVideoMatting

RobustVideoMatting 官方效果图
虽然 RobustVideoMatting 是用于视频抠像的,但是我们也可以将其用于对单张图片进行抠图。本文就针对单张图像的抠图效果进行演示。
借助 git 工具,输入下面的命令即可克隆源代码:
git clone https://github.com/PeterL1n/RobustVideoMatting.git 命令执行情况如下:

下载 RobustVideoMatting 源码
基础环境如 Python、Pytorch、CUDA Toolkit,网上有很多详尽的教程,我们就不在此赘述了。在具备上述环境的基础之上,我们还要安装项目依赖的工具(av、tqdm、pims),输入下面的命令即可进行安装:
pip install av tqdm pims 如果已经安装过了,那么执行上述命令时就会如下图所示:

安装 av tqdm pims
首先准备好要抠图的照片:

准备好的照片
我们在源码目录下面创建一个 images 文件夹,然后把照片放进去。
需要注意的是:这里要求放进去的是图像序列。也就是说,如果一次要对多张照片进行批量抠图的话,那么这些照片的尺寸必须是一致的,否则我们只能每次放进去一张。

待抠图的单张照片
代码不多,有效代码总共不到 5 行,我们只需要编写一次即可,后面使用的时候就直接执行它进行可以一键抠图了。
import torch
model = torch.hub.load("PeterL1n/RobustVideoMatting", "mobilenetv3")
convert_image = torch.hub.load("PeterL1n/RobustVideoMatting", "converter")
convert_image(model, input_source='images', output_type='png_sequence', output_composition="./output")
这里,我们把上述代码的文件命名为 image_matting.py,所以下面我们直接执行这个文件就可以进行抠图操作了。
python image_matting.py 代码的具体执行情况如下图所示:

代码执行情况
执行完上一步的代码后,我们就可以在 output 文件夹下面找到最终完成抠图的照片了。接下来我们展示一下抠图的效果。
图一:抠图前后对比

图一、抠图前

图一、抠图后
图二、抠图前后对比:

图二、抠图前

图二、抠图后
图三、抠图前后对比:

图三、抠图前

图三、抠图后
图四、抠图前后对比:

图四、抠图前

图四、抠图后
从我实际测试的最终效果上看,并不是所有的图片都能取得好效果。可能是 RobustVideoMatting 只专注于视频抠像而不擅长单张图片的人像抠图吧。后面有时间我再试试其他的专门做图片人像抠图的套件,看看效果会不会更好。