ProPainter - [ICCV 2023] ProPainter:改进视频修复的传播和转换器

Created at: 2023-09-01 21:11:57
Language: Python
License: NOASSERTION

ProPainter:改进视频修复的传播和变压器

南洋理工大学S实验室
ICCV 2023

⭐ 如果 ProPainter 对你的项目有帮助,请帮助为这个存储库加注星标。谢谢!🤗

📖 如需更多视觉效果,请查看我们的项目页面


更新

  • 2023.09.21:添加内存高效推理功能。查看我们的 GPU 内存要求。🚀
  • 2023.09.07:我们的代码和模型已公开发布。🐳
  • 2023.09.01:创建此存储库。

待办事项

  • [ ] 制作交互式 Gradio 演示。
  • [ ] 制作 Colab 演示。
  • [x] 更新功能以实现内存高效推理。

结果

👨🏻 🎨 对象删除

🌈 水印去除

🎨 视频完成

概述

overall_structure

依赖关系和安装

  1. 克隆存储库

    git clone https://github.com/sczhou/ProPainter.git
  2. 创建 Conda 环境并安装依赖项

    conda env create -f environment.yaml
    conda activate propainter
    • Python >= 3.7
    • PyTorch >= 1.6.0
    • 库达 >= 9.2
    • mmcv-full(参考命令表安装 v1.4.8)

开始

准备预训练模型

将我们的预训练模型从版本 V0.1.0 下载到文件夹。(所有预训练模型也可以在第一次推理期间自动下载。

weights

目录结构将排列为:

weights
   |- ProPainter.pth
   |- recurrent_flow_completion.pth
   |- raft-things.pth
   |- i3d_rgb_imagenet.pt (for evaluating VFID metric)
   |- README.md

🏂 快速测试

我们在输入文件夹中提供了一些示例。运行以下命令进行试用:

# The first example (object removal)
python inference_propainter.py --video inputs/object_removal/bmx-trees --mask inputs/object_removal/bmx-trees_mask 
# The second example (watermark removal)
python inference_propainter.py --video inputs/watermark_removal/running_car.mp4 --mask inputs/watermark_removal/mask.png

结果将保存在文件夹中。要测试你自己的视频,请准备输入(或)和。

results
mp4 video
split frames
frame-wise mask(s)

如果要指定要处理的视频分辨率或避免内存不足,可以设置 和 的视频大小:

--width
--height

# process a 576x320 video; set --fp16 to use fp16 (half precision) during inference.
python inference_propainter.py --video inputs/watermark_removal/running_car.mp4 --mask inputs/watermark_removal/mask.png --height 320 --width 576 --fp16

🚀 内存高效推理

视频修复通常需要大量的 GPU 内存。在这里,我们提供了各种功能来促进内存高效推理,从而有效避免内存不足 (OOM) 错误。你可以使用以下选项进一步减少内存使用量:

  • 通过减少(默认为 10)来减少本地邻居的数量。
    --neighbor_length
  • 通过增加(默认为 10)来减少全局引用的数量。
    --ref_stride
  • 设置 (默认 1.0) 以调整处理视频的大小。
    --resize_ratio
  • 通过指定 和 来设置较小的视频大小。
    --width
    --height
  • 设置为在推理过程中使用 fp16(半精度)。
    --fp16
  • 减少子视频的帧数(默认为 80),从而有效地将 GPU 内存成本和视频长度解耦。(即将推出!
    --subvideo_lentgh

Blow 以 fp32/fp16 精度显示不同子视频长度的估计 GPU 内存需求:

分辨率 50帧 80帧
约1280 x 720 28克 / 19克 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 戴维斯
描述 用于培训(3,471)和评估(508) 用于评估(50/90)
图像 [官方链接](下载训练并测试所有帧) [官方链接](2017年,480p,TrainVal)
面具 [谷歌云端硬盘][百度盘](用于复制论文结果;在E2FGVI论文中提供)

中提供了训练和测试拆分文件。对于每个数据集,应放置到 。将所有视频帧调整为训练大小。将下载的掩码文件解压缩到 。

datasets/<dataset_name>
JPEGImages
datasets/<dataset_name>
432x240
datasets

目录结构将排列为:(:请仔细检查)

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(用于循环流完成网络)和 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

引文

如果你发现我们的回购对你的研究有用,请考虑引用我们的论文:

@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许可证1.0获得许可。再分发和使用应遵循此许可证。

联系

如果你有任何疑问,请随时与我联系。

shangchenzhou@gmail.com

确认

此代码基于 E2FGVISTTN。一些代码来自 BasicVSR++。感谢他们的出色作品。