Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

心中无码:这是一个能自动脑补漫画空缺部分的AI项目

图像修复在应用上非常吸引人,通常设计师需要使用 Photoshop 根据图像周围修复空缺部分。这一过程非常耗时和细致,因此很早就有研究尝试使用机器学习模型自动化这一过程。这篇文章介绍了 DeepCreamPy 项目,它可以自动修复漫画图像中的空缺部分和马赛克。该项目主要基于几个月前 Nvidia 提出使用部分卷积修复图像不规则空缺的研究。

本文将简要介绍这项研究与 DeepCreamPy 实现项目,读者可下载项目代码或预构建的二进制文件,并尝试修复漫画图像或马赛克。这一个项目可以直接使用 CPU 进行推断,Windows 用户甚至都不需要安装环境都可以直接运行预构建的文件修复图像。

项目地址:https://github.com/deeppomf/DeepCreamPy

图像修复任务可用于多种应用。比如用于图像编辑:移除不需要的图像内容,用合理的图像内容填补移除后的空缺。之前的深度学习方法都聚焦在图像中心的矩形区域,往往依赖昂贵的后处理。而 DeepCreamPy 项目基于的方法提出一种图像修复的新模型,可在不规则的空缺模式上鲁棒地生成有意义的预测(图 1),预测结果与图像其余部分完美契合,无需进行额外的后处理或混合操作(blending operation)。

图 1:原始图像和使用本研究提出的基于部分卷积的网络进行修复的对应修复结果。

近期不使用深度学习技术的图像修复方法均使用图像剩余部分的统计信息来填补空缺。当前最优方法之一 PatchMatch [3] 迭代地搜索最适合的图像块来填补空缺。尽管该方法生成的结果通常较为流畅,但它受限于可用的图像统计信息,且不具备视觉语义学的概念。例如,在图 2(b)中,PatchMatch 能够使用来自周围阴影和墙体的图像快流畅地填补画作的空缺部分,但是语义感知方法利用的是来自画作本身的图像块。

深度神经网络以端到端的方式学习语义优先(semantic prior)和有意义的隐藏表征,这已经用于近期的图像修复工作。这些网络对图像采用卷积滤波器,用固定值替代缺失的内容。结果,这些方法依赖于初始空缺的值,初始空缺的值通常表现为空缺区域缺乏纹理和明显的颜色对比或空缺周围的人工边缘响应。图 2(e)和 2(f)展示了使用具备不同空缺值初始化的典型卷积层的 U-Net 架构的例子(两者的训练和测试使用同样的初始化方案)。

图 2:不同图像修复方法的效果。

很多近期方法的另一个曲线是只关注矩形空缺部分,通常位于图像中心。本文介绍的研究发现这些缺陷可能导致对矩形空缺部分的过拟合,最终限制这些模型的应用可用性。Pathak 和 Yang 等人假设一个 128×128 图像的中心处有一个 64 × 64 的正方形空缺部分,而 Iizuka 等人进一步移除了这一中心空缺假设,能够处理不规则形状的空缺部分,但是无法在大量具备不规则 mask 的图像([8] 中有 51 个测试图像)上执行定量分析。为了解决实践中更常见的不规则 mask 问题,DeepCreamPy 项目使用的方法收集了具备不同大小的不规则 mask 的大量图像,并分析了 mask 大小的影响,以及 mask 与图像边界的关联。

为了恰当处理不规则 mask,Nvidia 的这项研究提出了部分卷积层(Partial Convolutional Layer),包括 mask 和重新标准化卷积操作以及后续的 mask 更新(mask-update)。mask 和重新标准化卷积操作的概念在 [9] 中指图像分割任务的分割感知卷积(segmentation-aware convolution),但它们不对输入 mask 进行修改。该研究使用部分卷积,即给出一个二元 mask,卷积结果仅依赖于每一层的非空缺区域。该研究的主要扩展是自动 mask 更新步,其移除任意 mask,部分卷积能够在 unmasked 值上运行。给出足够多层的连续更新,即使最大的 mask 空缺也能最终被消除,只在特征图中留下有效响应(valid response)。部分卷积层最终使得该模型不用理会占位符空缺值。

DeepCreamPy 图像修复项目

最近 deeppomf 开源了 Image Inpainting for Irregular Holes Using Partial Convolutions 的修复实现,它主要使用深度全卷积网络修复漫画图像。DeepCreamPy 能将遮挡的漫画图像重构为可信的画像,并且与通常的图像修复不一样,它使用的是不规则的 Mask。

用户需要事先使用绿色指定被遮住的区域,这一过程可以用简单的图画工具或 Photoshop 等。如下展示了加上绿色 Mask 的「损坏图像」和通过 DeepCreamPy 重构的图像。

其实以前也开源过很多优秀的图像修复项目,例如 JiahuiYu 等研究者完成的 DeepFillv1 和 DeepFillv2,不过 DeepFillv2 一直没有放出代码来。机器之心也尝试过 DeepFillv1,不过它的效果在给定的测试图像上非常好,而在我们提供的图像上效果一般。

图3:第一行为 deepfillV1 项目展示的效果,第二行为重构效果。

按照 DeepCreamPy 的项目所述,这个 GitHub 项目的重点是可以修复任意尺寸的漫画图像和任意形状的 mask,同样也能修复漫画中的马赛克,不过这一部分还是不太稳定。此外,项目作者表示他正在做可视化界面,说不定过一段时间就能使用可视化界面试试漫画图像修复的威力。

目前项目作者已经发布了预构建的二进制文件,Windows 系统只需要下载该文件就可以直接运行。当然其它系统同样可以根据该项目运行预训练模型,或者直接重新训练该模型。

  • 预构建模型下载地址:https://github.com/deeppomf/DeepCreamPy/releases

  • 预训练模型地址:https://drive.google.com/open?id=1byrmn6wp0r27lSXcT9MC4j-RQ2R04P1Z

如果读者使用预训练模型或者重新训练,该项目要求我们的计算环境包含以下几个工具:

  • Python 3.6

  • TensorFlow 1.10

  • Keras 2.2.4

  • Pillow

  • h5py

重要的是,仅运行推断过程修复图像并不需要 GPU 的支持,而且也已经在 Ubuntu 16.04 和 Windows 64 位系统得到测试。这个项目使用的 TF 1.10 版是在 Python 3.6 中完成编译的,因此它并不与 Python 2 或 3.7 兼容。想要试一试的读者可以运行以下代码安装项目所需要的库:

$ pip install -r requirements.txt

DeepCreamPy 使用方法

1. 修复条形空缺

对于你想修复的每个图像,使用图像编辑软件(如 Photoshop 或 GIMP)将你想修复的区域的颜色涂成绿色 (0,255,0)。强烈推荐使用铅笔工具,不要用刷子。如果你没用铅笔,那么确保你所使用的工具关闭了抗锯齿(ANTI-ALIASING)功能。

作者自己使用的是 wand selection 工具(关闭了抗锯齿功能)来选择空缺区域。然后稍微扩展选中区域,并在选中区域上使用绿色 (0,255,0) 的油漆桶工具。

要在 Photoshop 中扩展选中区域,可以执行该操作:Selection > Modify > Expand 或 Contract。要在 GIMP 中扩展选中区域,可执行该操作:Select > Grow。将这些图像保存为 PNG 格式,并保存到 decensor_input 文件夹中。

A. 使用二进制编译文件(Windows)

双击 decensor 文件来修复图像。

B. 从头开始运行

运行以下行进行图像修复:

$ python decensor.py

修复后图像将保存至 decensor_output 文件夹。每张图像的修复需要几分钟。

2. 修复马赛克空缺部分

和修复条形空缺一样,执行同样的着色步骤,将着色后图像放入 decensor_input 文件夹。此外,将原始、未着色图像放入 decensor_input_original 文件夹,并确保每个原始图像和着色后版本名称一样。

例如,如果原始图像名是 mermaid.jpg,你将其放入 decensor_input_original 文件夹;着色后的图像命名为 mermaid.png,放入 decensor_input 文件夹。

A. 使用 binary

双击 decensor_mosaic 文件修复图像。

B. 从头开始运行

运行以下行进行图像修复:

$ python decensor.py --is_mosaic=True

修复后图像将保存至 decensor_output 文件夹。每张图像的修复需要几分钟。

疑难解答

如果你的 decensor 输出如下,则修复区域未能正确着色。

以下是一些好的和坏的着色图像示例。

论文:Image Inpainting for Irregular Holes Using Partial Convolutions


论文链接:https://arxiv.org/pdf/1804.07723.pdf

摘要:基于深度学习的现有图像修复方法利用标准卷积网络修复受损图像,使用以有效像素以及 mask 区域中的替代值(通常为平均值)为条件的卷积核响应。这种做法通常会导致图片出现色差和模糊等问题。后处理通常被用于减少此类问题,但价格昂贵且存在失败的风险。我们提出使用部分卷积网络,其中卷积被掩蔽并重新归一化为仅以有效像素为条件。我们还包含了一种机制,可自动为下一层生成更新的 mask 作为前向传递的一部分。对于不规则 mask,我们的模型优于其它方法。我们通过与其它方法进行定性、定量对比对我们的方法进行了验证。

工程卷积神经网络图像修复计算机视觉
4
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

语义学技术

语义学,也作“语意学”,是一个涉及到语言学、逻辑学、计算机科学、自然语言处理、认知科学、心理学等诸多领域的一个术语。虽然各个学科之间对语义学的研究有一定的共同性,但是具体的研究方法和内容大相径庭。语义学的研究对象是自然语言的意义,这里的自然语言可以是词汇,句子,篇章等等不同级别的语言单位。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

推荐文章
暂无评论
暂无评论~