首页 > 其他分享 >[论文速览] Learning to Write Stylized Chinese Characters

[论文速览] Learning to Write Stylized Chinese Characters

时间:2024-03-11 21:01:54浏览次数:35  
标签:字形 Chinese 汉字 生成 Stylized 风格 Characters 内容 VAE

Pre

title: Learning to Write Stylized Chinese Characters by Reading a Handful of Examples
accepted: IJCAI 2018
paper: https://arxiv.org/abs/1712.06424
code: None
ref: https://www.jiqizhixin.com/articles/2018-01-01-4

关键词: 字体生成
阅读理由: 风格内容解耦先行者

Idea

选用两张字形,一张提供内容,一张提供风格,内容特征加入了汉字的结构和偏旁信息,以风格内容解耦的方式生成字形。

Motivation

早期方法(Zi2Zi等)没有泛化能力,要生成的字体必须是训练时见过的

Background

风格感知变分自编码器(Style-Aware Auto-Encoder, SA-VAE)

主要贡献:

  1. 我们提出了一个新型的交叉逐对(intercross pair-wise)优化的方法用于风格特征提取,是以监督形式解决解双因素耦合问题的一个通用技术。
  2. 我们将汉字的领域知识以先验知识的形式引入模型中,并提出了一种信息编码方法来指导汉字生成。
  3. 我们提出的模型(SA-VAE)可以实现准确的风格推理,并以单样本/少样本的方式生成中文字体。

Method(Model)

Overview

图1 本文汉字生成过程描述。给定少量特定字体的样本,推理不同风格的隐藏向量。然后,我们通过识别它们的内容在少量样本的基础上生成中文字体(「生存还是毁灭,这是个问题」),可以看到,用来训练的样本中,每个风格只有四个汉字(「莎士比亚」)。

假定汉字能由内容因子和风格因子决定:

\[x_{i,j} \leftarrow (s_i, c_j), \tag{1} \]

表示风格i和内容j结合生成汉字\(x_{i,j}\)

Model Architecture

图2 我们提出的 SA-VAE 框架主要包含三个子网络,包括内容识别网络 C、风格推理网络 S,以及汉字生成网络 G。S 和 C 分别提取风格特征和内容特征,G 结合这两个特征生成汉字。另外,我们引入了汉字的域知识 K 以得到更多的内容表征信息。训练过程是以交叉逐对的方式进行的。

总体分两个阶段——推理和生成,推理时先把隐特征解耦为内容相关和风格相关,生成时以二者作为输入过反卷积层。训练时的解耦以交叉并行方式(intercross pair-wise way)进行

Content Recognition Network. 根据字形图片得到内容标签

图3 本文的汉字编码方式

Character Structure Knowledge. 并非one-hot而是通过特殊的编码来表示一个汉字,如图3所示,编码由结构IDC、偏旁、索引码组成,能够共享汉字间相同的配置和偏旁信息。索引表\(\mathcal{K}: c=T[y]\)允许使用汉字的one-hot编码查询对应的内容哈希码,唯一确定一个汉字。这玩意说白了是个分段的one-hot编码,前面两部分存储了一些可共享的信息,最后一个哈希用于确定汉字,生硬。

Style Inference Network. 输入字形图片x和相应的内容哈希c(并非整个内容编码),输出对应风格,也通过约束相同字体不同字形抽取的特征分布一致来保证抽取的准确性

Character Generation Network. 以内容哈希c和风格特征s作为输入,感觉是不是写错了,总得用上整个内容编码了吧

Intercross Pairwise Optimization

图4 普通VAE与本文的交叉并行训练的比较,虚线和实线分别代表风格和内容提供者

隐变量生成模型(latent variable generative models)通常最大化边缘对数似然来训练,但难以直接优化,为此变分推断(variational inference)被提出

在本文的生成中内容编码c可以从充分训练的\(\mathcal{C}\)得到

但是直接用VAE不能保证相同的风格有相似的风格嵌入,因为普通的变分推断会独立看待每个汉字,不同汉字间没有强相关性,尤其是那些风格一样的。因此如图4所示,风格信息由另一个相同字体的汉字提供。经典,但其实也很直接,如果用同一个汉字去分解内容风格再生成不就是重建,不符合推理时没有目标字形的场景。

算法1:训练算法

作者也提到这个算法不仅用于字体生成,还能用于其他双因素解耦问题(twofactor disentanglement problems)上

One-shot/Few-shot Character Generation

一张图片直接提取风格,多张就取平均

Experiment

Dataset

200字体,82划分,300汉字

Results

图5 1,3行是本文模型,2,4行是gt 最左边是参考字形

表1 生成结果比较。新风格仅10参考字形时SA-VAE显示出泛化能力

图6 a插值 b左边是一个参考字形,第二列是生成结果,最后两列是训练集里该字形的最近邻,表明模型并非照搬训练集信息

图7 不使用交叉并行优化的one-shot生成结果,不使用会导致风格嵌入包含太多内容信息,从而导致结果的模糊

表2 使用风格嵌入的分类准确度

图8 三种编码方式(本文的code,整数id形式的dense,one-hot) y轴是负下界,x轴是epoch数量,dense形式很难收敛,onehot开销大,500个字时测不出曲线。code的优势应该来自于前两部分的结构和偏旁,否则第三部分hash应该不含有用信息

图9 没给出gt,图一乐 由于没有结构信息,这些都用了one-hot编码

Conclusion

Critique

以现在来看性能孱弱,图画粗糙,但设计思想先进。跟同期的EMD差不多,但对方对比的baseline更多,实现细节更具体

标签:字形,Chinese,汉字,生成,Stylized,风格,Characters,内容,VAE
From: https://www.cnblogs.com/Stareven233/p/18012171

相关文章

  • [论文速览] CalliGAN@ Style and Structure-aware Chinese Calligraphy Character Gen
    Pretitle:CalliGAN:StyleandStructure-awareChineseCalligraphyCharacterGeneratoraccepted:AICCW(theAIforcontentcreationworkshop)atCVPR2020paper:https://arxiv.org/abs/2005.12500code:https://github.com/JeanWU/CalliGANref:https://blog.cs......
  • 第三届世界华人计算生物学大会 The 3rd Worldwide Chinese Computational Biology Con
    第三届世界华人计算生物学大会发布:2020年08月03日11:58浏览:52次【转】The3rdWorldwideChineseComputationalBiologyConference 时间:2020年8月3日-8月6日线上会议&实时直播:https://www.koushare.com/live/liveroom?islive=0&lid=394&roomid=132792会议官网:https://q......
  • C# Onnx Chinese CLIP 通过一句话从图库中搜出来符合要求的图片
    C#OnnxChineseCLIP通过一句话从图库中搜出来符合要求的图片效果生成图片特征查找踢足球的小孩测试图片模型信息image_model.onnxInputs-------------------------name:imagetensor:Float[1,3,224,224]---------------------------------------------------------------O......
  • 无涯教程-Java 正则 - characters \t 匹配函数
    字符\t与制表符匹配。以下示例显示了字符匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassCharactersDemo{privatestaticfinalStringREGEX="\t";privatestaticfinalStringINPUT="abc......
  • 无涯教程-Java 正则 - characters \uhhhh 匹配函数
    字符\0uhhhh与具有Unicode值0uhhhh的字符匹配。以下示例显示了字符匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassCharactersDemo{privatestaticfinalStringREGEX="\\u0041";privatesta......
  • 无涯教程-Java 正则 - characters \xhh 匹配函数
    字符\0xhh与具有十六进制值0xhh的字符匹配。以下示例显示了字符匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassCharactersDemo{privatestaticfinalStringREGEX="\\x41";privatestaticfi......
  • 无涯教程-Java 正则 - characters \0nn 匹配函数
    字符\0nn匹配八进制值为0nn(0≤n≤7)的字符。示例以下示例显示了字符匹配的用法。packagecom.Learnfkpoint;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassCharactersDemo{privatestaticfinalStringREGEX="\\007";......
  • 无涯教程-Java 正则 - characters \0n 匹配函数
    字符\0n匹配八进制值为0n(0≤n≤7)的字符。示例以下示例显示了字符匹配的用法。packagecom.Learnfkpoint;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassCharactersDemo{privatestaticfinalStringREGEX="\\07";p......
  • 『LeetCode』3. 无重复字符的最长子串 Longest Substring Without Repeating Characte
    『1』双指针算法我的想法:一般看到字符串子串问题想到用双指针解,看到字符串子序列问题想到用动态规划解。此题用双指针可以很快解题。遍历字符串中的每个字符s.charAt[i],对于每一个i,找到j使得双指针[j,i]维护的是以s.charAt[i]结尾的无重复字符的最长子串,长度为i-j+1,......
  • SQL无法解决排序规则 Chinese_PRC_CI_AS 和 Latin1_General_CI_AS 的冲突
    最近在执行一些跨库关联查询语句的时候提示了“Cannotresolvethecollatiorconflictbetween"Chinese_PRC_CiAs"and"soLLatini_General_CPi_CiAs"intheequaltolperatn”的错误,查询整理一下相关资料如下:排序规则排序规则指定表示数据集中每个字符的位模式。排序......