MVIMP,开箱即用的多媒体AI处理工具

Remember that if you don’t prioritize your life someone else will.

——《Essentialism: The Disciplined Pursuit of Less》——England/Greg McKeown

近些天磕磕绊绊,不过总算是完成了 MVIMP 项目一些初始的功能集成。MVIMP 项目的初心是把和多媒体处理(图像和视频)相关的一些 AI 能力集成到一个 repo 中,实现一行代码实现一个开箱即用的AI功能的小目标。

这可能是我写过 Case 系列中最短的一篇,毕竟 MVIMP 自身追求就是一行代码实现一个功能(AI as a service, AIaaS),希望大家喜欢w。

MVIMP

GitHub last commit GitHub issues GitHub License

MVIMP(Mixed Video and Image Manipulation Program)名字的灵感来自于GIMP(GNU Image Manipulation Program),也希望更多的人可以尝试使用它w

目前MVIMP中添加了如下三个第三方功能,代码目录及各文件功能如下:

  • third_party: 存放第三方repo,本打算使用submodule的模式,不过因为各个代码库代码风格不同无法做到统一,所以就保留LISENCE做minimize的二次开发
  • mvimp_utils: 存放处理文件和视频的单独功能模块,用于辅助推理
  • preparation.py: 所有的准备工作集成在一起
  • inference_animegan.py: 统一输入输出接口,辅助AnimeGAN的推理
  • inference_dain.py: 统一输入输出接口,辅助DAIN的推理
  • inference_photo3d.py: 统一输入输出接口,辅助3d-photo-inpainting的推理

第三方功能的输入输出定义如下:

模型 输入 输出 是否并行
AnimeGAN 图片(s) 图片(s) 可并行
DAIN 视频 视频 不可并行
Photo3D 图片(s) 视频 可并行(不推荐)

AnimeGAN

AnimeGAN的原始仓库位于 TachibanaYoshino/AnimeGAN, 作为《 AnimeGAN:一种用于照片动画的新型轻量级GAN》论文的开放源代码,它使用GAN框架将真实世界的照片转换为动漫图像。

系统要求

  • TensorFLow 1.15.2
  • CUDA 10.0(tested locally) / 10.1(colab)
  • Python 3.6.8(3.6+/3.7+/3.8+)
  • opencv
  • tqdm
  • numpy
  • glob
  • argparse

使用方法

  1. 本地运行
1
2
3
4
5
6
7
# Step 1: 准备工作
git clone https://github.com/CyFeng16/MVIMP.git
cd MVIMP
python3 preparation.py -f animegan
# Step 2: 把需要处理的图片(s)放入 ./Data/Input/
# Step 3: 运行如下命令进行推理
python3 inference_animegan.py
  1. Colab云端运行

我们也可以选择在 playground 模式下在Colab上运行:

https://colab.research.google.com/drive/1bpwUFcr5i38_P3a0r3Qm9Dvkl-MS_Y1y?usp=sharing

Photo3D

Photo3D的原始仓库位于 vt-vl-lab/3d-photo-inpainting,Photo3D输入单个RGB-D输入图像并将其转换为3D照片(视频)的方法。

系统要求

  • PyTroch 1.5.0
  • CUDA 10.1(tested locally/colab)
  • Python 3.6.8(3.6+/3.7+/3.8+)
  • 其他的python依赖需求写在requirements.txt中,运行preparation.py时将自动添加

使用方法

  1. 本地运行
1
2
3
4
5
6
7
# Step 1: 准备工作
git clone https://github.com/CyFeng16/MVIMP.git
cd MVIMP
python3 preparation.py -f photo3d
# Step 2: 把需要处理的图片放入 ./Data/Input/
# Step 3: 运行如下命令进行推理
python3 inference_photo3d.py -f 40 -n 240 -l 960
  1. Colab云端运行

我们也可以选择在 playground 模式下在Colab上运行:

https://colab.research.google.com/drive/1VAFCN8Wh4DAY_HDcwI-miNIBomx_MZc5?usp=sharing

需要注意的是,Photo3D所需的运行时内存随着longer_side_len(输出视频最大长/宽)的参数增加而显著增加,如果是Colab Pro用户建议开启高内存的运行时,并尽量一次推理一张图片.

参数说明

  • --fpsor-f: 设置输出视频的FPS.
  • --framesor-n: 设置输出视频的帧数.
  • --longer_side_lenor-l: 设置输出视频的最长边边长.

DAIN

DAIN的原始仓库位于 baowenbo/DAIN,DAIN通过检测深度感知流投影层来合成中间流,进行视频帧内插.

系统要求

  • FFmpeg
  • PyTroch 1.4.0
  • CUDA 10.0(tested locally/colab)
  • Python 3.6.8(3.6+/3.7+/3.8+)
  • GCC 7.5 (Compiling PyTorch 1.4.0 extension files (.c/.cu))

需要注意当前版本的DAIN不支持PyTorch1.5.0版本,所以我们在本地和云端运行环境中都需要手动安装 torch-1.4.0+cu100 和 torchvision-0.5.0+cu100. 参见issue.

1
2
3
4
5
# 安装 PyTorch 1.4.0(CUDA 10.0)
pip install torch==1.4.0+cu100 torchvision==0.5.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html
pip install scipy==1.1.0
# 设置系统软链接指向 CUDA 10.0(CUDA需要提前安装)
sudo ln -snf /usr/local/cuda-10.0 /usr/local/cuda

使用方法

  1. 本地运行
1
2
3
4
5
6
7
# Step 1: 准备工作
git clone https://github.com/CyFeng16/MVIMP.git
cd MVIMP
python3 preparation.py -f dain
# Step 2: 将需要插帧的一个视频文件放在 ./Data/Input/ 下
# Step 3: 运行如下命令进行推理
python3 inference_dain.py -input your_input.mp4 -ts 0.5 -hr False
  1. Colab云端运行

我们也可以选择在 playground 模式下在Colab上运行:

https://colab.research.google.com/drive/1pIPHQAu7z4Z3LXztCUXiDyBaIlOqy4Me?usp=sharing

参数说明

  • --input_videoor-input: 设置输入视频名称.
  • --time_stepor-ts: 设置插帧倍数,0.5对应2X,0.25对应4X,0.125对应8X.
  • --high_resolutionor-hr: 默认False.对于视频格式为1080p(+)的视频而言V100的显存不足以运行DAIN,设置True将一帧拆分为4块分别处理以减少显存占用.

TODO

  • Dockerized deployment.
  • https://roxanneluo.github.io/Consistent-Video-Depth-Estimation/ 中提及的一些有趣的视频效果

Reference

  1. https://github.com/CyFeng16/MVIMP
  2. https://github.com/TachibanaYoshino/AnimeGAN
  3. https://github.com/vt-vl-lab/3d-photo-inpainting
  4. https://arxiv.org/abs/2004.04727
  5. https://github.com/baowenbo/DAIN
  6. https://arxiv.org/abs/1904.00830
  7. https://roxanneluo.github.io/Consistent-Video-Depth-Estimation/