本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

码报:【j2开奖】开源 | 汉字风格迁移项目Rewrite:利用神经网络学习设计汉字新字体(2)

时间:2016-11-04 22:33来源:天下彩论坛 作者:j2开奖直播 点击:
下面的图像给出了对比 ground truth 的预测结果。对于每一种字体,我们都选取了最常用的 2000 个字作为训练集,运行 3000 次迭代。另外还有一个包含 100 个

下面的图像给出了对比 ground truth 的预测结果。对于每一种字体,我们都选取了最常用的 2000 个字作为训练集,运行 3000 次迭代。另外还有一个包含 100 个字的测试集用于推理。对于所有的字体,源字体都是 SIMSUN。

  

码报:【j2开奖】开源 | 汉字风格迁移项目Rewrite:利用神经网络学习设计汉字新字体

对于其中大部分字体,该网络都能成功做出合理的猜测。实际上其中一些还跟 ground truth 非常接近。另外值得一提的是,该网络还保留了微小的但可辨认的细节,比如偏旁部首的弯曲的端部。

但正如许多其它的神经网络所驱动的应用一样,当该网络出错时,就会错得非常离谱。对于一些字体(尤其是笔画粗的字体),它只会得到一些模糊的字迹斑点。另一方面,对于这些笔画粗的字体,它会失去让该字符可被辨认的关键的空白处细节,而只会获取到整体的轮廓。即使是在成功的案例中,偏旁部首的损失问题似乎也很常见。此外,网络似乎在宋体上可以做的更好,但在楷体上表现并不好,这主要是因为 SIMSUN 字体本身也是一种宋体。

因为空间的限制,对于每一种字体,我们从测试集中仅随机取样了一个字符。如果你想看到在更大的字符测试集上的结果,请查阅:https://github.com/kaonashi-tyc/Rewrite/blob/master/images/bigger_test.png

需要多少字符?

2000 字也许只有 GBK 集的 10%,但也仍然很多了。这个数字是我靠直觉选择的,而且看起来这个选择在很多字体上都表现不错。但必需这么多吗?

为了搞清这一点,我选择了一种字体(在每种字体上都进行这个实验会太耗时间)进行了不同数量的训练样本的实验,数量的范围是从 500 到 2000,然后让该模型在一个常用的测试集上对字符进行渲染,下面是得到的结果。

  

码报:【j2开奖】开源 | 汉字风格迁移项目Rewrite:利用神经网络学习设计汉字新字体

从上到下,上图分别给出了训练集大小从 500 到 2000 增长时的不同结果。当训练集大小在 1500 到 2000 之间,表现的提升会变得更小,这表明 sweet point 就在这之间的某个地方。

使用方法

要求

要使用这个软件包,需要安装 TensorFlow(已在 0.10.0 上测试过)。其它的 Python 要求列在 requirements.txt 文件里。另外强烈推荐使用 GPU——如果你想在合理的时间内看到结果。

我的所有实验都运行在一个 Nvidia GTX 1080 上。以 16 的 batch 大小进行了 3000 次迭代,这需要小型模型计算 20 分钟、中规模模型计算 80 分钟、大模型则需要 2 小时。

样例

在训练之前,你需要运行预处理脚本为源字体和目标字体生成字符位图(character bitmap):

  

该预处理脚本支持 TrueType 和 OpenType 字体,它会获取一个字符列表(一些常见的字符集内置于本 repo 的 charsets 目录中,比如 3000 个最常用的简体汉字字符),然后将这些字符的位图保存为 .npy 格式。对于源字体,每个字体会被默认保存为字体大小为 128 的 160×160 的尺寸,而目标字体则是字体大小为 64 的 80×80 的尺寸。这里并不需要特别的对齐,只要确保字符不被截断即可。

在预处理步骤之后,你就能得到源字体和目标字体的位图,分别是 src.npy 和 tgt.npy,然后运行以下命令开始实际的训练:

  

码报:【j2开奖】开源 | 汉字风格迁移项目Rewrite:利用神经网络学习设计汉字新字体

这里给出了一些解释:

mode:可以是 train 或 infer,前者不言而喻,后者我们将在后面讨论

model:表示模型的大小。它有三个可用选择:small、medium 或 big,分别对应的层数为 2、3、4

tv:总变差损失(total variation loss)的权重,默认 0.0001。如果输出看起来是损坏的或有波动,你可以选择增大权重迫使模型生成更平滑的输出。

keep_prob:表示训练过程中一个值通过 dropout 层的概率。这实际上是一个非常重要的参数——这个概率越高,图像越锐利,但输出可能会损坏。如果结果不好,你可以尝试减小这个值,这会得到噪声更多但更圆润的形状。通常的选择是 0.5 或 0.9

ckpt_dir:用于保存模型的 checkpoint 的目录,用于后续的推理步骤

(责任编辑:本港台直播)

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容