百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

马赛克与遮挡,这是一个能自动脑补漫画空缺部分的项目

toyiye 2024-06-22 20:07 12 浏览 0 评论

选自Github,机器之心编译,参与:思源、路雪。

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

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

图像修复任务可用于多种应用。比如用于图像编辑:移除不需要的图像内容,用合理的图像内容填补移除后的空缺。之前的深度学习方法都聚焦在图像中心的矩形区域,往往依赖昂贵的后处理。而 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,不过它的效果在给定的测试图像上非常好,而在我们提供的图像上效果一般。

按照 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,我们的模型优于其它方法。我们通过与其它方法进行定性、定量对比对我们的方法进行了验证。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码