本文使用 Zhihu On VSCode 创作并发布
最近受到b站一个视频的启发,想做一套属于自己的字体,但是又不想写好几千个字,为了偷个懒,调研了一下用神经网络合成字体的算法,最终找到一篇名为W-Net的论文:
W-Net: One-Shot Arbitrary-Style Chinese Character Generation with Deep Neural Networks
下面介绍一下这篇论文的主要内容:
论文中提到了三个比较有特点的文献
1 使用RNN根据笔画时序来生成文字;
2 DCFont,将汉字信息分为Content、Style和Category三个部分,使用GAN的思路来训练, 需要700多个字才能生成一套字体;
3 Zi2zi,从pix2pix衍生而来的Encoder+Decoder+Discriminator的结构,同样使用GAN的思路来训练,需要2000多个字才能生成一套字体。
而这片W-net号称只需要一个字就可以生成一套字体,你相信吗?我虽然不太信,但是为了少写几个字,也值得尝试一下。
算法思路简介:
关于判别器结构,文章一笔带过,并未做详细介绍,只提到了判别器中使用了类似[5]中的辅助分类器。
loss函数分为生成损失和判别损失两大部分,每个损失函数都由多个损失加权得到。
下面逐一介绍各个损失项的含义
对抗损失:判别器得到的真伪分类的损失。 汉字分类损失:判别器得到的汉字类别的损失。 字体类别损失:判别器得到的汉字类别损失。 重建损失:包括两个部分,一个是生成的fake_img与real_img之间的L1Loss,另一个是fake_img和real_img分别加入到分类网络得到的多级特征图之间的MSELoss。 常数损失:fake_img和real_img分别通过两个分支得到的向量之间的损失 分支分类损失:在左右分支的输出后面各自添加一个用于分类的全连接层,左分支用于提取汉字结构特征,所以用全连接层对汉字进行分类,右分支用于提取汉字字体风格特征,所以用全连接层对字体进行分类。 梯度惩罚项:模型对于输入求导得到的梯度和,用于防止梯度过大,与梯度剪裁功能相似,但是更加柔和。
论文中得到的生成效果:
为了制作一个字体生成器,我实现了这个算法,地址在:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有