Propainter 是一款功能强大的图像处理工具,主要用于图像编辑和绘画。它提供了许多高级功能,可以帮助您创建精美的艺术作品或编辑现有的图像。
功能介绍
-
绘画工具:Propainter 提供了各种绘画工具,包括画笔、铅笔、油漆刷、橡皮擦等,以满足不同创意和风格的需求。
-
图层管理:您可以创建多个图层,每个图层可以独立编辑,然后叠加在一起以创建复杂的图像。这有助于更好地控制图像的组成部分。
-
滤镜和特效:Propainter 提供了各种滤镜和特效,如模糊、锐化、色彩调整等,以改善图像外观或添加艺术效果。
-
文本和标注:您可以轻松添加文本、标签和注释到图像中,以用于图形设计、漫画制作或说明目的。
-
图像导入和导出:支持多种图像格式,您可以导入现有的图像并在 Propainter 中编辑,然后将其导出为所需格式。
快速开始
准备预训练模型
将我们的预训练模型从版本V0.1.0下载到weights文件夹。(所有预训练的模型也可以在第一次推理期间自动下载。)
目录结构如下:
weights
|- ProPainter.pth
|- recurrent_flow_completion.pth
|- raft-things.pth
|- i3d_rgb_imagenet.pt (for evaluating VFID metric)
|- README.md
快速测试
我们在inputs文件夹中提供了一些示例。运行以下命令进行尝试:
# 第一个示例(对象删除)
python inference_propainter.py --video inputs/object_removal/bmx-trees --mask inputs/object_removal/bmx-trees_mask
=# 第二个示例(视频补全)
python inference_propainter.py --video inputs/video_completion/running_car.mp4 --mask inputs/video_completion/mask_square.png --height 240 --width 432
结果将保存在结果文件夹中。要测试您自己的视频,请准备输入mp4视频(或分割帧)和逐帧掩码。
如果要指定被处理的视频分辨率或要避免内存不足,可以设置--width和--height的视频大小:
# 处理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)来减少本地neighbors的数量。
- 通过增加--ref_stride(默认值为10)来减少全局引用的数量。
- 设置--resize_ratio(默认值为1.0)以调整处理视频的大小。
- 通过指定--width和--height来设置较小的视频大小。
- 将--fp16设置为在推理过程中使用fp16(半精度)。
- 减少子视频的帧数——subvideo_length(默认值为80),有效地将GPU内存成本和视频长度解耦。
下面的表格展示了fp32/fp16精度的不同子视频长度的估计GPU内存需求:
Resolution | 50 frames | 80 frames |
---|---|---|
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 |
---|---|---|
描述 | For training (3,471) and evaluation (508) | For evaluation (50 in 90) |
图片 | [Official Link] (Download train and test all frames) | [Official Link] (2017, 480p, TrainVal) |
Masks | [Google Drive] [Baidu Disk] (For reproducing paper results; provided in ProPainter paper) |
训练和测试拆分文件在datasets/<dataset_name>中提供。对于每个数据集,应该将JPEGImages放置到datasets/<dataset_name>中。将所有视频帧的大小调整为432x240,以便进行训练。将下载的掩码文件解压缩到数据集。
数据集目录结如下:(注意:请仔细检查)
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(用于递归流完成网络)和train_propainter.json(用于propainter)中提供。
运行以下命令之一进行训练:
# For training Recurrent Flow Completion Network
python train.py -c configs/train_flowcomp.json
# For training ProPainter
python train.py -c configs/train_propainter.json
您可以运行相同的命令来恢复训练。
为了加快训练过程,可以使用以下命令为训练数据集预先计算光流:
# Compute optical flow for training dataset
python scripts/compute_flow.py --root_path <dataset_root> --save_path <save_flow_root> --height 240 --width 432
评估
运行以下命令之一进行评估:
# For evaluating flow completion model
python scripts/evaluate_flow_completion.py --dataset <dataset_name> --video_root <video_root> --mask_root <mask_root> --save_results
# For evaluating ProPainter model
python scripts/evaluate_propainter.py --dataset <dataset_name> --video_root <video_root> --mask_root <mask_root> --save_results
分数和结果也将保存在results_eval文件夹中。请--save_results以进一步评估时间扭曲错误。