开源免费AI视频自动补全抠像去水印工具ProPainter
今天本站交流群里有人咨询关于ProPainter的部署,其实这个项目的部署过程非常简单,所以站长之前没打算写,既然有人问,那就在这里补充一下吧。
该项目用于将视频中的人物或水印移除,总的来说效果还是不错的,但美中不足的是,需要自己对视频需要处理的主体进行抠像,如果将视频转换成序列帧,然后在Photoshop中逐帧来处理显示是不现实的,工程量极大。所以这里可以使用本站之前给出的一些关于视频AI自动抠像的教程啦。
项目仓库
GitHub:sczhou/ProPainter
关于项目
更新日志
- 2023.09.24: 我们正式移除了去水印演示,以防止我们的工作被用于不道德的目的。
- 2023.09.21: 添加了内存高效推断的功能。请查看我们的 GPU 内存要求。
- 2023.09.07: 我们的代码和模型现已公开。
- 2023.09.01: 创建了此仓库。
更新计划
- 创建一个交互式的 Gradio 演示。
- 创建一个 Colab 演示。
- 更新内存高效推断的功能。
前置条件
在执行项目安装之前,我们还需要安装Git
和Conda
,如果您的电脑还未安装这两款软件,请先根据本站所给出的教程安装。
Windows系统安装Git请参阅此文章:
Windows系统安装Conda请参阅此文章:
网络问题
在安装过程中,你可能即便开启了魔法上网也无法下载一些编程依赖库,关于魔法上网的相关配置问题不方便在站内讲解,请自行查看【魔法上网】的教程内容。
安装教程
如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD
并按下回车
键,在CMD窗口
中按顺序执行
如下的每一条命令
。
首先我们需要确认一个工作目录,用来存放该项目的相关环境依赖文件。本站所选择的目录为D盘
的根目录下openai.wiki
文件夹,完整路径为:D:\openai.wiki
。
在CMD中执行如下命令,这将会自动检测D盘
是否在openai.wiki
文件夹,没有则自动创建
该文件夹
。
if not exist D:\openai.wiki mkdir D:\openai.wiki
继续执行如下命令
,在CMD中强制切换当前工作路径为D盘
的openai.wiki
文件夹。
cd /d D:\openai.wiki
拉取
该项目的Github仓库
文件,将其下载至openai.wiki
文件夹内。
git clone https://github.com/sczhou/ProPainter.git
如果您无法完成此步骤,执行后报错或者无法下载,可以下载该文件将其解压至D:\openai.wiki
即可。
环境部署
在CMD中执行如下命令,强制切换至ProPainter
的项目目录。
cd /d D:\openai.wiki\ProPainter
在CMD中执行下面的命令行,创建Conda虚拟环境
至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。
conda create -y -p D:\openai.wiki\ProPainter\ENV python=3.8
初始化Conda环境
,防止后续操作可能存在报错等问题。
conda init cmd.exe
激活
已创建的Conda环境
,这样可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate D:\openai.wiki\ProPainter\ENV
执行如下命令,安装
该项目的相关模块
依赖库。
pip install -r requirements.txt
模型下载
模型存放结构如下:
weights |- ProPainter.pth |- recurrent_flow_completion.pth |- raft-things.pth |- i3d_rgb_imagenet.pt (用于评估VFID指标) |- README.md
官方下载
Releases · sczhou/ProPainter (github.com)
网盘下载
关于此项目的模型,本站已为您下载并整理好。如果你不方便通过官网下载,可以使用本站所提供的网盘下载地址。
模型安装
在您下载
完成模型之后,将该模型解压
后移动
至项目根目录下的weights
文件夹即可。
运行方式
在以后每次运行该项目时,只需要先激活我们刚刚所创建的Conda虚拟Python环境,然后通过命令行运行。
在CMD中执行如下命令,强制切换至项目目录文件夹。
cd /d D:\openai.wiki\ProPainter
激活已创建的Conda环境,这样才可以正常使用该项目,否则将会自动调用系统中的默认Python。
conda activate D:\openai.wiki\ProPainter\ENV
使用教程
自定义素材
ProPainter不支持自动对视频抠像,如果你想使用自己上传的素材,那么需要对视频进行抠像,下面是一些本站之前写的关于AI视频抠像的教程,大家可以根据自身情况选择性使用。
关于人物视频抠像可以查看如下这篇文章,安装部署以及使用都比较简单。
如果你对抠像要求比较高,可以参数如下这篇教程,虽然是对图片抠像,但可以通过批量功能对序列帧进行抠像处理,上手难度较大。
对象移除
在我们想要移除视频中某个对象之前,我们需要先将这个视频转换为序列帧,也就是一张张图像。然后将这些图像进行抠像,得到主体遮罩(Mask)。
官方案例中给了一些示例文件,左侧是.\ProPainter\inputs\object_removal\bmx-trees
文件夹的视频序列帧
文件,右侧是.\ProPainter\inputs\object_removal\bmx-trees_mask
文件夹的视频遮罩
序列帧文件。
我们通过在CMD中执行如下命令就可以得到想要的内容啦。
python inference_propainter.py --video inputs/object_removal/bmx-trees --mask inputs/object_removal/bmx-trees_mask
这个命令行的内容非常简单,下面做一下解释。
python inference_propainter.py --video 视频序列帧文件夹路径 --mask 视频遮罩序列帧文件夹路径
处理完成后的视频将保存在results
文件夹中,如果你要测试自己上传的视频,请准备mp4
格式的视频(或拆分帧)和逐帧Mask遮罩。
注意:不用理会绿色,那只是抠象的示意,如果你想使用自己的视频素材,只需要黑白图像就可以了。
视频补全
这个功能就是将已有被遮挡的部分进行二创补全,大家可以用这个来处理马赛克水印。
假如视频中的水印位置是固定的,那么我们在给出遮罩时,可以给一张黑白图像,该项目将会自动补全白色部分。
如果你的视频过大,硬件内存不足等问题,可以在通过使用--width
和--height
来指定视频宽高,这样可以达到节省内在的目的。
python inference_propainter.py --video inputs/video_completion/running_car.mp4 --mask inputs/video_completion/mask_square.png --height 240 --width 432
半精度推理
处理一个576x320
的视频;设置--fp16
在推断期间使用fp16
(半精度)。
python inference_propainter.py --video inputs/video_completion/running_car.mp4 --mask inputs/video_completion/mask_square.png --height 320 --width 576 --fp16
内存高效推断
视频修复通常需要大量的GPU内存。在这里,我们提供了各种功能,以便进行内存高效推断,有效避免了内存不足(OOM)错误。您可以使用以下选项进一步减少内存使用:
- 通过减少
--neighbor_length
(默认值为 10)来减少本地邻居的数量。 - 通过增加
--ref_stride
(默认值为 10)来减少全局引用的数量。 - 设置
--resize_ratio
(默认值为 1.0)以调整处理视频的大小。 - 通过指定
--width
和--height
来设置较小的视频大小。 - 设置
--fp16
在推断期间使用 fp16(半精度)。 - 减少子视频的帧数
--subvideo_length
(默认值为 80),这有效地解耦了 GPU 内存成本和视频长度。
下面显示了不同子视频长度的 fp32/fp16 精度的预估 GPU 内存要求:
分辨率 | 50 帧 | 80 帧 |
---|---|---|
1280 x 720 | 28G / 19G | OOM / 25G |
720 x 480 | 11G / 7G | 13G / 8G |
640 x 480 | 10G / 6G | 12G / 7G |
320 x 240 | 3G / 2G | 4G / 3G |
数据集准备
以下内容用于训练,如果你只是简单的使用,可以忽略下面的内容。
数据集 | YouTube-VOS | DAVIS |
---|---|---|
描述 | 用于训练(3,471)和评估(508) | 用于评估(90中的50) |
图像 | [官方链接](下载训练和测试所有帧) | [官方链接](2017,480p,TrainVal) |
遮罩 | [谷歌云盘] [百度网盘](为了复现论文结果而提供;在 ProPainter 论文中提供) |
训练和测试分割文件提供在 datasets/<dataset_name> 中。对于每个数据集,您应将 JPEGImages 放置到 datasets/<dataset_name>。
将所有视频帧的大小调整为 432×240 以进行训练。将下载的掩码文件解压缩到 datasets。
数据集目录结构将被安排如下:(注意:请仔细检查)
datasets |- davis |- JPEGImages_432_240 |- <video_name> |- 00000.jpg |- 00001.jpg |- test_masks |- <video_name> |- 00000.png |- 00001.png |- train.json |- test.json |- youtube-vos |- JPEGImages_432_240 |- <video_name> |- 00000.jpg |- 00001.jpg |- test_masks |- <video_name> |- 00000.png |- 00001.png |- train.json |- test.json
训练
我们在train_flowcomp.json
(用于 Recurrent Flow Completion Network)和train_propainter.json
(用于 ProPainter)中提供了训练配置。
运行以下命令之一以进行训练:
用于训练 Recurrent Flow Completion Network
python train.py -c configs/train_flowcomp.json
用于训练 ProPainter
python train.py -c configs/train_propainter.json
您可以运行相同的命令以恢复训练。
为了加速训练过程,您可以使用以下命令为训练数据集预计算光流:
为训练数据集计算光流
python scripts/compute_flow.py --root_path <dataset_root> --save_path <save_flow_root> --height 240 --width 432
评估
运行以下命令之一以进行评估:
用于评估流完成模型
python scripts/evaluate_flow_completion.py --dataset <dataset_name> --video_root <video_root> --mask_root <mask_root> --save_results
用于评估 ProPainter 模型
python scripts/evaluate_propainter.py --dataset <dataset_name> --video_root <video_root> --mask_root <mask_root> --save_results
分数和结果也将保存在 results_eval 文件夹中。请使用 –save_results 以进一步评估时间扭曲错误。
引用
如果您发现我们的存储库对您的研究有用,请考虑引用我们的论文:
@inproceedings{zhou2023propainter, title={{ProPainter}: Improving Propagation and Transformer for Video Inpainting}, author={Zhou, Shangchen and Li, Chongyi and Chan, Kelvin C.K and Loy, Chen Change}, booktitle={Proceedings of IEEE International Conference on Computer Vision (ICCV)}, year={2023} }
许可
该项目根据 NTU S-Lab License 1.0 获得许可。重分配和使用应遵循此许可证。
致谢
此代码基于 E2FGVI 和 STTN。一些代码来自 BasicVSR++。感谢他们出色的工作。
总结
真的越来越智能了,其实只要不用来训练,使用起来还是非常简单的。
训练这一块,站长电脑硬件跑不动,暂时不讲了。
cloab快速部署
https://github.com/camenduru/ProPainter-colab.git
为啥不更新了呀大大