作者 | Robert Munro
来源 | Medium
编辑 | 代码医生团队
将StyleGAN应用于Unicode字符的图像,以查看它是否可以创建新字符。发现了一些有趣的结果如上图。
世界的剧本
世界上的语言为他们的书写系统使用了大约400种不同的脚本。这包括拉丁文脚本,这是今天使用最广泛的:
简单的拉丁字符
Unicode Consortium旨在将世界上的每个角色映射到底层数字,以便可以在不同的计算机系统中轻松使用它们。例如,散列“#”映射到数字35,a-acute“á”是225,雾“雾”的中文字符映射到38,654。Unicode中的第一个~65,000个字符覆盖了当前使用的大多数脚本,并分为~140个块,其中Simple Latin是其中一个块。有关完整列表,请参阅Unicode块上的Wikipedia页面。
https://en.wikipedia.org/wiki/Unicode_block
在Unicode联盟中服务了很短的时间。被美国语言学会任命为候选人,专注于代表性不足的语言。很着迷于成为第一手见证脚本如何形式化和编码的过程,这样世界上的每个人都可以利用信息时代,无论他们如何选择沟通。在Unicode联盟的时间是在首次将表情符号添加到Unicode时,这可能是他们最有争议的决定。
最难的决定之一是如何在Unicode标准中命名给定脚本。简单拉丁语,如Unicode中所定义,包括常见的标点字符和数字。显然,使用此脚本的语言比拉丁语更多,可以争论标点符号是否是脚本的一部分。也可以指出除0以外的所有数字都来自阿拉伯语。因此Unicode中的“块”试图映射到脚本中有意义的分区,承认边界可能是模糊的,并且通常会有多个可能具有政治含义的脚本名称。因此这些名称对于Unicode中的块来说非常方便,但并不打算成为使用该脚本作为其语言的人的主要名称或唯一名称。
有了这个警告,这里有一些有趣的脚本今天使用Unicode,用它作为使用StyleGAN创建新脚本的基础:
亚美尼亚
阿拉伯
梵文
孟加拉
古吉拉特语
泰米尔人
卡纳达语
马拉雅拉姆语
泰国
韩文符号
CJK兼容性表意文字(CJK =中文日文韩文)
在上面的例子来自南亚的语言。强调了他们国家内部的多样性。
数据准备
为每个unicode字符生成了一个JPG图像,可以使用python Pillow库和我的MAC附带的“Ariel Unicode”字体进行渲染。
使用不同的颜色对每个块(与一个脚本相关的每个字符范围)中的图像进行编码,这样就可以很容易地看到最终字符集中的最大影响。上图中的颜色反映出:拉丁文为黑色,泰米尔语为鲜绿色等。
最初这产生了约40,000张图像。这是65,000个字符中有多少是由Ariel Unicode字体进行某种渲染。尝试使用覆盖范围更广的字体会很有趣,特别是在不再使用的旧脚本和其他字符(如emojis)中。使用多种不同的字体生成字符也很有趣。
在这40,000个中,大部分都是中文和日文字符。很快就放弃了一个实验,其中StyleGAN只生成看起来像中文和日文字符的新字符。
对于每个超过256个字符的块,随机选择了256个字符的子集。这使得数据从40,000到大约7,000个字符。使用7,000来训练在本文中分享其结果的模型。
要查看每个区块中的前20个字符及其颜色,已在个人网站上列出:
http://robertmunro.com/research/unicode/show.html
StyleGAN
StyleGAN是在TensorFlow中实现的图像生成系统,它使用生成对抗网络(GAN)。它是在NVidia开发的,并在此处作为开源代码发布:
https://github.com/NVlabs/stylegan
基于样式的生成对抗网络生成器体系结构。Tero Karras,Samuli Laine和Timo Aila。
http://stylegan.xyz/paper
StyleGAN最着名的用于创建实际不存在的人的“逼真”外观照片:
styleGAN生成的假面孔示例,来自https://github.com/NVlabs/stylegan
人们一直在使用它来生成其他假图像,受到其中一些的启发,包括Miles Brundage使用StyleGAN创建新的太空堡垒卡拉狄加图像:
实验
通过7,000张图像的分层样本,根据其Unicode块进行颜色编码,在P2 AWS实例上运行了styleGAN一周。使用了深度学习AMI,需要安装的唯一附加库是用于从字体生成图像。
这是对styleGAN代码的一个小修改。最难的部分是让图像和字体库在python中运行得很好,这样就可以编程生成每个Unicode字符的图像并为其着色。
结果
理想的情况下,结果应该看起来像真实的人物,但不是字面上看起来像今天任何以Unicode字符。
以下是系统训练的实际选择:
首先,结果并不十分令人信服。在10个样本图像(styleGAN系统中的“ticks”)之后,它们模糊不清:
10个刻度后的假例子
但经过30个滴答后,开始看到一些明显的例子:
30个刻度后的假例子
30个刻度后的示例在缩小时看起来很逼真,但是当放大直到曲线之间没有明显区别的外星人时:
30个刻度后的外星人角色
这里再次是本文开头的图像,它是在78个刻度之后,现在有一些非常清晰的例子:
78蜱之后的假例子
直线和曲线之间的区别现在很明显,重音和变音符号现在更加明显与人物本身不同。在StyleGAN的训练中,该分辨率在30到78个刻度之间加倍,这也有所帮助。
这里有一些最喜欢的78个刻度,颜色告诉他们的影响力:
受拉丁影响
受阿拉伯影响
泰国影响
CJK(中国日语韩语)受到影响
封闭的CJK受到影响
马拉雅拉姆受到影响
梵文受影响
泰米尔语影响
对这些角色看起来多么逼真感到印象深刻!只有几个例外,看起来它们都属于某种语言的脚本。
有这样的例子屈指可数都已经在Unicode字符。这些可以是这样的示例,其中它们不是该块的256的随机选择的一部分,或者它们可以以不同方式偏移或缩放。
只有一种方法,结果不符合期望:希望一些新角色将是彩虹色的,并立即显示来自多个脚本的影响。在反思中,可以看出为什么情况并非如此:训练数据中没有多彩的例子,因此多彩的例子不能说服对抗性的例子。
为什么要生成新角色?
除了有趣的因素,这里有一些实际用例: