视频帧插值的实时中间流估计
简介
该项目是视频帧插值的实时中间流估计的实现。目前,我们的模型可以在2080Ti GPU上以30+FPS的速度进行2X 720p插值。它支持任意时间步长的图像对插值。
2023.11 - 我们最近发布了针对动漫场景优化的新版本v4.7-4.10! 🎉 我们借鉴了SAFA的研究。
2022.7.4 - 我们的论文已被ECCV2022接收。感谢所有相关作者、贡献者和用户!
从2020年到2022年,我们提交了RIFE的五次投稿(被CVPR21、ICCV21、AAAI22、CVPR22拒绝)。感谢所有匿名审稿人的建议,你们的建议极大地帮助了论文的改进!-> 作者网站
ECCV海报 | ECCV 5分钟演示 | 论文中文介绍 | 回复信(2WA1WR->3WA)
YouTube | BiliBili | Colab | 教程 | V2EX
推荐软件:RIFE-App | FlowFrames | SVFI (中文)
通过两张输入图像进行16X插值的结果:
软件
Flowframes | SVFI(中文) | Waifu2x-Extension-GUI | Autodesk Flame | SVP | MPV_lazy | enhancr
我们不参与以上软件的开发,也不对其负责。根据开源许可证,我们尊重其他开发者的商业行为。
VapourSynth-RIFE | RIFE-ncnn-vulkan | VapourSynth-RIFE-ncnn-Vulkan
如果你是开发者,欢迎关注Practical-RIFE,该项目旨在通过添加各种功能和设计新模型以更快的速度使RIFE更实用。
你可以查看这个拉取请求以支持macOS。
CLI 使用方法
安装
git clone git@github.com:megvii-research/ECCV2022-RIFE.git
cd ECCV2022-RIFE
pip3 install -r requirements.txt
-
从这里下载预训练的 HD 模型。(百度网盘链接:https://pan.baidu.com/share/init?surl=u6Q7-i4Hu4Vx9_5BJibPPA 密码:hfk3,将压缩包解压后放入 train_log/*)
-
解压并移动预训练参数到 train_log/*
-
该模型未在我们的论文中报告,关于我们论文中的模型,请参考evaluation。
运行
视频帧插值
你可以使用我们的演示视频或你自己的视频。
python3 inference_video.py --exp=1 --video=video.mp4
(生成 video_2X_xxfps.mp4)
python3 inference_video.py --exp=2 --video=video.mp4
(用于4X插值)
python3 inference_video.py --exp=1 --video=video.mp4 --scale=0.5
(如果你的视频有非常高的分辨率,例如4K,我们建议设置--scale=0.5(默认1.0)。如果你的视频上生成了无序的图案,尝试设置--scale=2.0。该参数控制光流模型的处理分辨率。)
python3 inference_video.py --exp=2 --img=input/
(从png读取视频,如 input/0.png ... input/612.png,确保png文件名为数字)
python3 inference_video.py --exp=2 --video=video.mp4 --fps=60
(添加慢动作效果,音频将被移除)
python3 inference_video.py --video=video.mp4 --montage --png
(如果你想拼接原始视频并保存为png格式输出)
扩展应用
你可以参考#278获取光流估计,以及参考#291获取视频拼接。
图像插值
python3 inference_img.py --img img0.png img1.png --exp=4
(2^4=16倍插值结果) 之后,你可以使用png生成mp4:
ffmpeg -r 10 -f image2 -i output/img%d.png -s 448x256 -c:v libx264 -pix_fmt yuv420p output/slomo.mp4 -q:v 0 -q:a 0
你也可以使用png生成gif:
ffmpeg -r 10 -f image2 -i output/img%d.png -s 448x256 -vf "split[s0][s1];[s0]palettegen=stats_mode=single[p];[s1][p]paletteuse=new=1" output/slomo.gif
在docker中运行
将预训练模型放在train_log/\*.pkl
中(如上所述)
构建容器:
docker build -t rife -f docker/Dockerfile .
运行容器:
docker run --rm -it -v $PWD:/host rife:latest inference_video --exp=1 --video=untitled.mp4 --output=untitled_rife.mp4
docker run --rm -it -v $PWD:/host rife:latest inference_img --img img0.png img1.png --exp=4
使用gpu加速(需要为docker配置合适的gpu驱动):
docker run --rm -it --gpus all -v /dev/dri:/dev/dri -v $PWD:/host rife:latest inference_video --exp=1 --video=untitled.mp4 --output=untitled_rife.mp4
评估
下载 RIFE模型 或 RIFE_m模型(根据我们的论文报告)。
UCF101: 下载 UCF101数据集 到 ./UCF101/ucf101_interp_ours/
Vimeo90K: 下载 Vimeo90K数据集 到 ./vimeo_interp_test
MiddleBury: 下载 MiddleBury OTHER数据集 到 ./other-data 和 ./other-gt-interp
HD: 下载 HD数据集 到 ./HD_dataset。我们也提供了一个Google Drive下载链接。
# RIFE
python3 benchmark/UCF101.py
# "PSNR: 35.282 SSIM: 0.9688"
python3 benchmark/Vimeo90K.py
# "PSNR: 35.615 SSIM: 0.9779"
python3 benchmark/MiddleBury_Other.py
# "IE: 1.956"
python3 benchmark/HD.py
# "PSNR: 32.14"
# RIFE_m
python3 benchmark/HD_multi_4X.py
# "PSNR: 22.96(544*1280), 31.87(720p), 34.25(1080p)"
训练和复现
下载 Vimeo90K数据集。
我们使用16个CPU,4个GPU和20G内存进行训练:
python3 -m torch.distributed.launch --nproc_per_node=4 train.py --world_size=4
修订历史
2021.3.18 arXiv: 修改了主要实验数据,特别是与运行时间相关的问题。
2021.8.12 arXiv: 移除了预训练模型依赖并提出了特权蒸馏方案用于帧插值。移除了census loss监督。
2021.11.17 arXiv: 支持任意时间的帧插值,即RIFEm,并添加了更多实验。
推荐
我们诚挚推荐一些相关论文:
CVPR22 - 通过视频帧插值优化视频预测
CVPR22 - 带有Transformer的视频帧插值
CVPR22 - IFRNet: 用于高效帧插值的中间特征优化网络
CVPR23 - 用于视频预测的动态多尺度体素流网络
CVPR23 - 通过帧间注意力提取运动和外观用于高效视频帧插值
引用
如果你觉得这个项目有帮助,请随意给我们一个star或引用我们的论文:
@inproceedings{huang2022rife,
title={Real-Time Intermediate Flow Estimation for Video Frame Interpolation},
author={Huang, Zhewei and Zhang, Tianyuan and Heng, Wen and Shi, Boxin and Zhou, Shuchang},
booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
year={2022}
}
参考文献
光流: ARFlow pytorch-liteflownet RAFT pytorch-PWCNet
视频插值: DVF TOflow SepConv DAIN CAIN MEMC-Net SoftSplat BMBC EDSC EQVI