MMEditing: 多任务图像视频编辑工具箱
这是一个图像和视频编辑的工具箱,它目前包含了常见的编辑任务,比如图像修复,图像抠图,超分辨率和生成模型。在编辑图像或者视频的时候,我们往往是需要组合使用以上任务的,因此将它们整理到一个统一的框架下,方便大家使用。
基于 PyTorch 的图像&视频编辑开源工具箱, 提供修复/抠图/超分辨率/生成等任务最先进的算法。
github: https://github.com/open-mmlab/mmediting
中文文档: https://mmediting.readthedocs.io/zh_CN/latest/
目前 MMEditing 支持下列任务:
主分支代码目前支持 PyTorch 1.5 以上的版本。
MMEditing 的优势:
1. 统一的框架:我们设计了先进的框架来统一最常见的图像修复,图像抠图,超分辨率和生成模型这几个任务。用户可以在一个框架中方便地调用不同的算法和模型。
2. 灵活的模块化设计:用户能够基于这套框架灵活地增加新的功能和算法。
3. 丰富的模型和文档:下图中展示了我们支持的算法数目,要知道其中有不少算法是首次有完整的复现哦~我们也完善了文档(文档覆盖率高达90%以上)和入门材料,方便用户上手。
4. 高效的实现:MMEditing所有的训练包括 GAN 的对抗训练都是基于高效的分布式训练框架部署的,对于一些基础的操作单元,我们也相应地进行了优化。
主要特性
- 模块化设计MMEditing 将编辑框架分解为不同的组件,并且可以通过组合不同的模块轻松地构建自定义的编辑器模型。
- 支持多种编辑任务MMEditing 支持修复、抠图、超分辨率、生成等多种主流编辑任务。
- SOTAMMEditing 提供修复/抠图/超分辨率/生成等任务最先进的算法。
需要注意的是 MMSR 已作为 MMEditing 的一部分并入本仓库。 MMEditing 缜密地设计新的框架并将其精心实现,希望能够为您带来更好的体验。
安装
MMEditing 依赖 PyTorch 和 MMCV,以下是安装的简要步骤。
步骤 1. 依照官方教程安装PyTorch
步骤 2. 使用 MIM 安装 MMCV
pip3 install openmim
mim install mmcv-full
步骤 3. 从源码安装 MMEditing
git clone https://github.com/open-mmlab/mmediting.git
cd mmediting
pip3 install -e .
模型库
支持的算法:图像修复
- Global&Local (ToG’2017)
- DeepFillv1 (CVPR’2018)
- PConv (ECCV’2018)
- DeepFillv2 (CVPR’2019)
- AOT-GAN (TVCG’2021)
图像抠图
图像超分辨率
- SRCNN (TPAMI’2015)
- SRResNet&SRGAN (CVPR’2016)
- EDSR (CVPR’2017)
- ESRGAN (ECCV’2018)
- RDN (CVPR’2018)
- DIC (CVPR’2020)
- TTSR (CVPR’2020)
- GLEAN (CVPR’2021)
- LIIF (CVPR’2021)
视频超分辨率
- EDVR (CVPR’2019)
- TOF (IJCV’2019)
- TDAN (CVPR’2020)
- BasicVSR (CVPR’2021)
- IconVSR (CVPR’2021)
- BasicVSR++ (CVPR’2022)
- RealBasicVSR (CVPR’2022)
图像生成
视频插帧
请参考模型库了解详情。
Super-Resolution 超分辨率
超分辨率(简称超分),是将低分辨率图像放大到高分辨率图像,如下图,一只小狒狒经过 SR网络后,可以得到放大,变成一只“大”狒狒。
随着深度学习的兴起,早在2014年,香港中文大学多媒体实验室就提出了首个使用卷积神经网络解决超分辨率的模型——SRCNN。作为图像超分辨率工作,SRCNN 对后续计算机视觉的底层算法研究产生了重要影响。后续,各种各样的网络结构如雨后春笋般地冒了出来,比如VDSR,EDSR,SRResNet 等等; 还有追求视觉效果的 SRGAN, ESRGAN。
MMEditing把一些基本的超分算法,比如 SRCNN,EDSR,SResNet,SRGAN还有视频的 EDVR 算法都包括进去。之前 OpenMMLab 中的 MMSR 也有类似的功能,相比之下,MMEditing 使用了更好的框架设计,用上了 MMCV 和 MMDetection 在发展过程中的经验积淀。整个 MM 系列都采用了类似的框架,只要掌握了一种,就能够轻而易举地掌握其他任务的代码库。
Inpainting修复
Inpainting(图像修复)是图像编辑领域里面一项基础的任务,其主要目标是修复图像中的受损(污染)区域。如下图中,左边是原图,中间是受损区域示意图,你可以去除图像中的不想要的人物,或者是图像中杂乱的不规则的受损区域。然后经过 Inpainting 修复算法就得到最右边的图啦。
Inpainting 作为一项基础任务,现如今已经被广泛的应用到各种各样的场景,比如面部修复,背景填充以及视频编辑中。
之前传统的 Patch-Matching 算法可以通过图中已知区域的纹理来快速填补当前受损区域。随着深度学习的发展,越来越多的工作利用深度神经网络实现更好的图像修复效果。深度图像修复领域中,有许多经典的开创性的工作像 Global&Local、Partial Conv 以及 DeepFill 系列,他们作为深度图像修复的经典模型被广泛地应用到后来的研究工作当中。可是这些方法都没有官方的 PyTorch 实现,为了方便大家更好的研究和深入了解这些模型,我们在 MMEditing 中集成了这些算法的训练和测试功能。同时,我们对其中一些重要的模块进行了代码上的优化,以使其更加符合 PyTorch 的风格,甚至是更快的 GPU 计算,从而能够有更好的训练速度。
Matting抠像
抠像(Matting)问题是一个在计算机视觉研究领域有重要价值的研究课题,其在工业界也有非常重要的应用。
抠像是将前景从图片或者视频中与背景分离开来的问题,比如下图中,输入是左图,一位超级可爱的小姐姐在秀丽的风景前中,我们希望得到右边的小姐姐的抠像结果(b)。它和 segmentation分割的不同之处在于,matting 需要得到更精准的边缘(如头发)以及与背景的组合系数。
为了降低求解的难度,一种最常见的方式是引入用户输入的 trimap(如下图),来对图片进行简单的三分类。其中,图中的黑色为背景,白色为前景,灰色为未知区域。给定 trimap 后,我们只需要求解未知区域的抠图结果,这大大降低了求解的难度。
在 MMEditing 中,我们首次完整复现了 DIM(Deep Image Matting)在原论文中的性能。除此之外,MMEditing 还包含当前开源 Matting 模型中性能最好的 GCA Matting 模型,以及速度最快的 IndexNet Matting。
Generation生成模型
Generation,中文含义为“生成”。所谓生成,不同于其他图像编辑的任务,旨在创造新的图像。我们试图通过深度学习的方式,让神经网络成为创造者,产生新的信息。生成任务一般分为两种,非条件(unconditional)和条件(conditional)的生成。所谓非条件生成,主要是从潜在空间(latent space)中的噪声(noise)往图像域(image domain)进行转换,并试图近似相关边缘概率分布,产生逼真的图像;所谓条件生成,主要是从一个图像域映射到潜在空间,并进一步转换到另一个图像域。目前的MMEditing主要支持后者,即从一个图像域映射到另一个图像域,如分割的mask转换到真实图像、马转换到斑马等。后者的条件生成也更加符合目前图像编辑的主题。
而目前 MMEditing 支持的条件图像生成,又可以分为两种不同的设定。其中一种生成模型的训练数据中,包含成对的训练数据,被称为“成对图像到图像转换(paired image-to-image translation)”。这种设定一般生成任务的难度比较低,但对数据本身的要求比较高,生成效果一般比较良好。最经典的成对图像到图像转换的方法,名为 pix2pix。 它也是图像到图像转换领域开山鼻祖的文章,因此我们在这个版本中首先考虑对它进行实现,获得了与作者官方实现一致的结果。
另一种生成模型的训练数据中,仅包含非成对的训练数据,被称为“非成对图像到图像转换(unpaired image-to-image translation)”。这种设定一般对数据要求较低,很容易构建两个明确的图像域,但生成难度较大,生成效果会略微降低。提出非成对图像到图像转换问题,并首先给出解决方案(cycle-consistency)的方法,名为 CycleGAN。CycleGAN 作为最经典的非成对图像到图像转换的生成方法,我们在这个版本中同样首先考虑对它进行实现和效果对齐。
生成(Generation)任务通常比较困难,但向人们展示出了惊人的效果和广阔的研究前景。在未来 MMEditing 代码库的版本中,我们会考虑加入更多不同的生成设定,以及多种生成方法,让我们的代码库更加全面、丰富、强大。