最近由字节跳动开源的一套人工智能视频抠图方案火了,RVM(Robust Video Matting)专为稳定人物视频抠像设计。不同于现有神经网络将每一帧作为单独图片处理,RVM 使用循环神经网络,在处理视频流时有时间记忆。RVM 可在任意视频上做实时高清抠像。在 Nvidia GTX 1080Ti 上实现 4K 76FPS 和 HD 104FPS。目前虽没有面向大众的简易工具,但是基于torch、onnx和ncnn的模型均已放出,可见其受欢迎程度。
0. 效果截图
1. Colab在线尝鲜
步骤主要有三步,第一步上传待处理的视频或图片;
第二步:安装Python等环境依赖
第三步:使用Pytorch加载模型并设置导出路径
视频处理完毕后,会在当前目录下生成三个文件。
– com.mp4:在绿幕背景上合成的抠图结果。
– pha.mp4:原始的 alpha 遮罩。
– fgr.mp4:原始前景预测。
2. 本地尝鲜
首先下载项目到本地,然后解压并进入目录,执行安装依赖环境命令:
pip install -r requirements_inference.txt
然后加载模型
import torch
from model import MattingNetwork
model = MattingNetwork('mobilenetv3').eval().cuda() # 或 "resnet50"
model.load_state_dict(torch.load('rvm_mobilenetv3.pth'))
上述步骤也可以直接从Pytorch直接加载模型
# 加载模型
model = torch.hub.load("PeterL1n/RobustVideoMatting", "mobilenetv3") # 或 "resnet50"
# 转换 API
convert_video = torch.hub.load("PeterL1n/RobustVideoMatting", "converter")
最后一步,视频入口及出口设置:
from inference import convert_video
convert_video(
model, # 模型,可以加载到任何设备(cpu 或 cuda)
input_source='input.mp4', # 视频文件,或图片序列文件夹
output_type='video', # 可选 "video"(视频)或 "png_sequence"(PNG 序列)
output_composition='output.mp4', # 若导出视频,提供文件路径。若导出 PNG 序列,提供文件夹路径
output_video_mbps=4, # 若导出视频,提供视频码率
downsample_ratio=None, # 下采样比,可根据具体视频调节,或 None 选择自动
seq_chunk=12, # 设置多帧并行计算
)
3. 手机端体验
可以参考该GitHub地址:https://github.com/FeiGeChuanShu/ncnn_Android_RobustVideoMatting
4. 速度
速度用 inference_speed_test.py
测量以供参考。
| GPU | dType | HD (1920×1080) | 4K (3840×2160) |
| ————– | —– | ————– |—————-|
| RTX 3090 | FP16 | 172 FPS | 154 FPS |
| RTX 2060 Super | FP16 | 134 FPS | 108 FPS |
| GTX 1080 Ti | FP32 | 104 FPS | 74 FPS |
5. 应用开发
目前的应用范围主要偏向专业人员,未来或许会出现更多跨终端的GUI视图,方便普通人开箱即用。不过该项目采用GPL协议,意味着商用困难,想要普通人用得起,对开发者而言没有利好,只能用爱发电。虽然ResNet诞生于2015,但是近几年的论文中并未有效果显著的新模型出现,说明图像模型这块基本趋于自满状态,从pt文件,转到onnx,再转到ncnn已经非常成熟,唯一卡住的地方就是基于C语言的ncnn编程。所以想要大众用得起的GUI视图,还需要打通ncnn到go版本的转换,遗憾的是目前尚未有人尝试这么做。假如有go版ncnn,那么就可以很方便的使用wails打包跨终端的应用。