用CNN把图形转成ASCII码字符画的方法,并更新了着色工具

电子说

1.2w人已加入

描述

几天前,我们送走了2017年最后一场机器学习顶级会议NIPS 2017。虽然正会开完了,但它的热度依然不减,近几日,一个入围NIPS 2017机器学习创意和设计(Workshop for Machine Learning for Creativity and Design)的趣味项目就在twitter上被玩坏了。据论智了解,作者Osamu Akiyama提出了一种用CNN把图形转成ASCII码字符画的方法,并在昨天更新了着色工具,这让不少机器学习开发者都玩high了。

上图即是ASCII码字符画着色前、着色后的效果。整个过程可分为两部分,一是用CNN生成字符画,二是用CNN着色。对于前者,作者已经在github上公开了数据集等资料,并在论文中详细解释了神经网络的搭建方法;而对于后者,作者直接做了个填色工具,因此已经有字符画的读者可以去网站上传图像尝试。

注意:该工具只在落廓清晰、画面干净的白底字符画上有不错效果,网站只支持图片,不支持文本文档。

项目思路

在论文中,作者首先介绍了CNN用的数据集。他从日本BBS 5channel和Shitaraba上收集了500张ASCII码字符画,并将之作为数据集。在这个过程中,他发现了一个不小的问题,就是许多人在上传手工制作的字符画时并不会援引原图,这就使机器学习算法无法学习如何把线条转换成文本。

机器学习

为了解决这个问题,Osamu Akiyama使用了其他研究人员创建的一个神经网络清理工具,能把ASCII码字符画逆向还原成线条图。如上图所示,这个工具不仅能删除多余的字符,还能大胆恢复一些丢失的线条,使得整个画面更连续流畅。通过把这些经还原的图片作为输入对神经网络进行训练,他的网络能了解哪些字符是适合被用来创建图片的。

Osamu Akiyama使用的是一个CNN,其中包括7个卷积层、3个最大池化层、两个全连接(FC)层以及一个输出层,整体架构受VGC网络启发,简单来说,就是C64-C64-P-C128-C128-P-C256-C256-C256-P-FC4096-FC4096-O411。

经训练,作者发现神经网络生成的图片可以与手工制成的ASCII码字符画一较高下,如下图所示:

机器学习

其中第一行是输入图像,第二、第三行是网上两个字符画生成工具生成的图像,第四行是Osamu Akiyama神经网络生成的图像,而最后一行由专业制作字符画的艺术家制作的图像。可以看出,神经网络在轮廓描绘和细节保留上都远胜于其他对照组。

事实上,大篇幅介绍字符画生成的目的就是为了最后的着色,经小编验证,Osamu Akiyama的配套CNN着色器在线条明显、画面整洁简单的图像上效果更好。例如上图中人工完成的最后一行字符画,比起神经网络的成果,它们的线条较不流畅,这会影响填色区间判定。此外,它们对头发、衣服进行了“着色”处理,这在黑白显示时可能更形象,但放进着色器后出来的效果就不尽如人意了。

生成ASCII码字符画

所有资料、数据可前往作者的github下载(https://github.com/OsciiArt/DeepAA)。

环境

  • TensorFlow(1.3.0)

  • Keras(2.0.8)

  • NumPy (1.13.3)

  • Pillow (4.2.1)

  • Pandas (0.18.0)

  • Scikit-learn (0.19.0)

  • h5py (2.7.1)

  • 模型下载地址(下载后放入目录中的model):drive.google.com/file/d/0B90WglS_AQWebjBleG5uRXpmbUE/view

  • 训练数据地址(下载后将提取的目录放入目录中的data):drive.google.com/file/d/0B90WglS_AQWebjBleG5uRXpmbUE/view

如何运行

更改output.py的第15行代码:


	
  1. image_path = 'sample images/original images/21 original.png'# put the path of the image that you convert.

改成你使用的图像文件的路径。注意:图像必须是黑灰色线条画。

之后运行output.py,生成的图像会在output/处显示。

如果你想用轻型模型,你可以把output.py的第13、14行改为


	
  1. model_path = "model/model_light.json"

  2. weight_path = "model/weight_light.hdf5"

填色效果演示

正如之前提到的,昨天作者更新了新的CNN填色工具,可以为以上神经网络生成的图像着色。因为他还没有公开这个工具的设计思路,所以小编在这里只放出PaintsChainer地址:paintschainer.preferred.tech/index_en.html。如网站所示,它只支持图片上传。

以下是论智君的几种尝试:

来源:谷歌搜索(盗图)

生成图片

来源:作者GitHub

生成图片

来源:作者GitHub

生成图片

调色图片

调色图片

小编色感堪忧,无法调出和谐的颜色,但根据这些图我们也能直观感受到,这跟黑白的ASCII码字符画简直是两个世界啊!


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分