[论文阅读] Multiple Heads are Better than One: Few-shot Font Generation with Multiple Localized Experts

1. 原作

论文:Multiple Heads are Better than One: Few-shot Font Generation with Multiple Localized Experts
代码:https://github.com/clovaai/mxfont

2. 摘要

小样本字体生成,few-shot font generation(FFG)需要满足两个目标:
生成的图像应保有目标字符的底层结构(字义不能变)并且支持多样的局部参考风格(即衬线、粗细、笔画、大小都要考虑)

注:在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif(非衬线字体 )和Serif(衬线字体),sans 是法文中表「没有」的单词。

图1,MX-Font的跨域言小样本字体生成结果。展示了同一语言不同风格的转换以及跨语言的转换

现存的FFG方法通过抽取一个通用风格或多个组件级风格表示,来解耦内容与风格
但它们无法捕捉多样的局部风格或无法泛化到具有未知组件的字符上,如未知的语言系统(另一种语言)。

Multiple Localized Experts Few-shot Font Generation Network (MX-Font),这是本文提出的FFG方法,它抽取多个与组件标签无直接联系的风格特征,这些特征由多个专家自动抽取来表示不同的局部概念,如左侧的子字形。因此MX-Font可以捕捉多样的局部概念,并且对未知的语言也具有泛化性。

在训练过程中用组件标签作为弱监督去指导每个专家特化不同的局部概念。
本文将组件分配问题作为字形匹配问题指定给每个专家,并通过匈牙利算法(Hungarian algorithm)解决
同时利用独立损失跟内容-风格对抗损失去迫使内容风格解耦。

实验证明MX-Font取得SOTA,在汉字生成(泛化到同语言的另一种字体上),以及跨语言如中文到韩文生成方面。

3. 引言

传统的字体设计十分繁琐,特别是那些字符很多的语言,如中文(>5万)、韩语(约1.1万)或泰语(约1.1万)。同时还有一种FFG需求是将设计好的字体扩展到其他不同的语言系统,如游戏或电影里专门设计的字体,需要适配不同语言。

FFG的一个巨大挑战是正确地解耦全局内容结构和多样的局部风格,但现存的方法都不足以捕捉多样局部风格或者保存未知语言的全局结构。

图2,各FFG方法的比较。从左到右分别是通用风格表示、基于组件的风格表示和本文的多局部专家风格表示

将现存的FFG分为两类:通用风格跟基于组件的风格表示方法。如图2所示,前者是同一字体的不同字共享同一 风格,而后者是同一种组件共享同一风格,更加精细。虽然后者效果好,但它们的编码器与目标语言域的特定组件标签紧密耦合,阻碍处理那些未知组件或跨语言的字体生成。

而这里提出的MX-Font可以捕捉多个局部风格,似乎比组件级更加精细,并不限定于某一语言,

MX-Font有一个多头的编码器,即多个局部专家,每个专家隐式地学习不同局部概念,并非明确的一专家对应一组件(似乎是以不同权值对应多个组件)。为了防止不同专家学习同一个局部组件,本文将组件标签分配问题作为图匹配问题,用匈牙利算法解决,如图4所示。

在如图7所示,在这种组件级别弱监督方案下,每个局部专家都特化到不同局部区域。

4. 相关工作

风格迁移和图像翻译 Style transfer and image-to-image translation
风格迁移中将纹理、颜色作为风格,而字体生成风格多指局部形状,如笔画、大小、衬线、
图像翻译(I2I)学习域之间的映射而非定义风格,如FUNIT将图像转换城指定风格而保持内容,因此许多的FFG方法都是基于I2I框架。

多样本字体生成方法
早期方法如zi2zi学习不同字体风格之间的两两映射。许多字体生成方法先学习映射函数,再根据大量参考字形去微调,需大约775个参考字形。

小样本字体生成方法
FFG分成两类...通用风格方法如 EMD, AGIS-Net 通过结合风格和内容向量来合成字形,还有基于组件的方法,如 DM-Font, LF-Font,将字体风格描述为多个局部风格而非单一通用风格,但它们需要显式的组件标签,甚至测试时也需要,而MX-Font则克服了这一缺点。

图3,MX-Font模型总览,分成特征抽取(绿框)跟字体生成(黄框)两个部分

5. 方法

MX-Font有个多头编码器,第i个头,也就是专家\(E_i\)将字形图像x编码为局部特征\(f_i=E_(x)\)。每个专家\(E_i\)处理不同局部特征,由给定字符c的对应组件标签集\(U_c\)指导。根据\(f_i\),计算局部内容特征\(f_{c,i}\)跟局部风格特征\(f_{s,i}\)。待模型训练完成,就可以联合各专家对源字形以及目标字形的内容、风格特征来产生字形\(\tilde{x}\)

5.1. 模型架构

本方法由3个模块构成:

  1. k头编码器,或局部专家\(E_i\)
  2. 生成器G
  3. 风格和组件特征分类器\(Cls_s\)\(Cls_u\)

模型总览见图3和图5,各构建块(building blocks)细节见补充材料
图3中绿框部分,取得局部特征\(f_i=E_(x)\)后,再以两个线性权重\(W_{i,c}, W_{i,s}\)乘到\(f_i\)上,得到局部内容跟风格特征:\(f_{c,i} = W^T_{i,c}f_i\), \(f_{s,i} = W^T_{i,s}f_i\)
专家数k默认取6

利用两个特征分类器\(Cls_s\)\(Cls_u\)来监督\(f_{c,i}和\)f_{s,i},这作为\(f_i\)的弱监督手段
他们被训练去预测风格/内容标签,因此\(E_i\)接收\(Cls_s\)\(Cls_u\)的反馈,即\(f_{c,i}和\)f_{s,i}\(应保有标签信息。 同时这些分类器只有训练的时候才会用到。 这里将字体标签用作风格标签\)y_s\(,将组件标签\)U_c\(用作内容标签\)y_c$,组件标签如图4所示,如 "佮 = {亻, 人, 一, 口}" 佮这个字便有4个组件。

图4,局部专家的示例。专家数为k,目标字符的组件数为m。任一条边表示专家跟对应组件之间的预测概率,由组件分类器$Cls_u$给出。目标就是找到一个边集来最大化预测概率值,选中的边数不超过max(k, m)。红色标出的便是最优选择。

生成器联合每个专家给出的内容风格特征来合成字形图像\(\tilde{x}\)

\[\tilde{x} = G((f_{s,1}◦f_{c,1}),...,(f_{s,k}◦f_{c,k})) \qquad (1) \]

其中◦表示concatenate运算

5.2. 用弱局部组件监督来学习多个局部专家

对于特征抽取,简单的办法是利用显式局部监督,即每张子字形图进行像素级的标注,但需要昂贵的标注代价。作为替代也可以用强大的标注器,但要训练这么个模型,比如用300M张图片自训练的 EfficientNet L2,对于字体域又是另一种挑战,超出了研究范围。

利用字体的组合性(compositionality),每张字形图用弱组件级标签,也就是只需要图像包含什么组件,不用在意组件所处的位置。
然后用组件和内容分类器指导每个专家处理不同的局部概念。理想情况下,当专家数k正好等于组件数m,最大化预测置信度,那么专家的k个预测便跟组件标签一样。若k<m,则期望每个专家的预测都合理并考虑top-k个预测值。

如图4所示,假设有3个专家,各自学习不同局部概念,用不同颜色标注。对于一个4组件的字形,每个专家的特征就预测一或两个标签(以红线相连)。这里专家与组件的配对并非固定,将组件分配问题作为加权二分图匹配问题(Weighted Bipartite B-Matching problem, WBM),用匈牙利算法在多项式时间\(O((m+k)^3)\)解决。

组件特征分类器\(Cls_u\)\(f_{c,i}\)预测出一个概率值\(p_i = [p_{i0}, ..., p_{im}]\),其中\(p_{ij}\)是组件j的置信度。
\(U_i = [u^c_1, ..., u^c_m]\)为给定字符c的组件标签,m为组件数量。使用二元分配变量\(w_{ij}\),当其值为1表示组件j分配给\(E_i\),否则不分配。
优化\(w_{ij}\)来最大化选中预测值的和,总分配数为max(k, m)
组件分配问题就变成了

\[\max \sum^k_{i=1} \sum_{j\in U_c} w_{ij}p_{ij} \qquad (2) \]

[注]:该公式在这里省略了一些上下标和约束条件等细节,能理解就好,在意的话可以看原论文
总之公式(2)可以进一步变为加权二分图匹配问题,补充材料中介绍了二者的联系。

然后用\(w_{ij}\)跟交叉熵CE优化辅助组件分类损失\(\ell_{cls, c}\)

\[\ell_{cls,c,i}(f_{c,i}, U_{c}) = \sum w_{ij}CE(Cls_u(f_{c,i}), j) \qquad (3) \]

公式(3)的反馈有助于分离风格和内容特征,莫名其妙,反馈又是什么勾八

此外还通过约束希尔伯特-施密特独立性指标(Hilbert-Schmidt Independence Criterion)使各专家独立,HSIC当且仅当两个输入互相独立时为零,并且是非负的,因此通过最小化该指标即可。

\[\ell_{indp exp,i} = \sum^k HSIC(f_i, f_{i'}) \qquad (4) \]

其中\(f_i\)\(f_{i'}\)是两个不同专家编码出的局部特征,详细的HSIC表述在补充材料中。
[注]:总之就是条件独立性,证明两个变量X、Y的联合分布P(X, Y)能够分解为P(X)P(Y)

图5,特征分类器。分别分类风格/内容标签,如果给另一种特征(比如将风格特征给内容分类器)就无法输出有效信息,输出的是均匀分布的(随机变量?)

5.3. 内容风格解耦

为了完美解耦,引入两个目标函数:内容-风格对抗损失跟独立损失
内容-风格对抗损失就是让风格(内容)特征可以用于分类风格(内容)标签,但无法用于分类内容(风格)标签,像图5画的那样

\[\ell_{s,i}(f_{s,i}, y_s) = CE(Cls_s(f_s, i), y_s) - H(Cls_u(f_{s,i})) \qquad (5) \]

\[\ell_{c,i}(f_{c,i}, y_c) = \ell_{cls,c,i}(Clc_c(f_c, i), U_c) - H(Clc_s(f_{c,i})) \qquad (6) \]

其中H表示熵,最大化以得到均匀预测(分类器无法分类)

此外还利用HSIC约束风格跟内容的独立:

\[\ell_{indp,i} = HSIC(f_{s,i}, f_{c,i}) \qquad (7) \]

5.4. 训练

we construct a mini-batch, where n glyphs share the same content label yc (from random styles), and n glyphs share the same style label ys (from random contents). Then, we let the model generate a glyph with the content label yc and the style label ys. In our experiments, we set n = 3 and synthesize 8 different glyphs in parallel, i.e., the mini-batch size is 24.
描述得很乱,推测如下:
batchsize为24,里面每3张图片是同一内容标签,每3张是同一风格标签,模型每次生成8张不同内容/风格标签的字形??感觉不大对

根据以往的高精度GAN,如BigGAN和SOTA的字体生成模型如DM-Font或LF-Font,引入hinge生成对抗损失\(\ell_{adv}\),特征匹配损失\(\ell{fm}\)和像素级别重建损失\(\ell_{recon}\),这些目标函数的细节都在补充材料中。

\[\ell_D = \ell^D_{adv} \]

\[\ell_G = \ell^G_{adv} + \lambda_{recon}\ell_{recon} + \ell_{fm} \qquad\qquad\qquad (8) \]

\[\ell_{exp} = \sum^k_{i=1}[\ell_{s,i} + \ell_{c,i} + \ell_{indp,i} + \ell_{indp exp, i}] \]

正如传统的GAN训练,这里轮流更新\(\ell_D\, \ell_G\, \ell_{exp}\),控制参数\(\lambda_{recon}\)设为0.1,使用Adam优化器,共训练650k个iteration,补充材料里有详尽的训练设置。

5.5. 小样本生成

生成时,假定有n个参考字形,具有一致的风格s,然后有k个专家,每个专家抽取n个局部特征,然后各专家各自抽取的特征取平均,得到k个风格表示,这些风格表示就跟已知的源字体内容一起生成新字形。

6. 实验

将FFG benchmarks延伸到未知语言域来测试模型泛化性,跟4个模型比较得知效果很好...

6.1. 比较方法

主要分通用风格表示跟基于组件的风格表示,介绍了一些用于对比的模型

6.2. 评估协议

为了展示泛用性,这里现在汉字字体数据集上训练模型,然后在汉字生成以及韩文字符生成上进行评估
训练数据集:来自《Song Park, Sanghyuk Chun, Junbum Cha, Bado Lee, and Hyunjung Shim. Few-shot font generation with localized style representations and factorization. In AAAI, 2021》,包含3.1M个汉字字形图片,共467种字体,覆盖19514个字。
组件分解规则也跟上述论文一致,同时从训练集抽取28种字体和214个字去评估。
对于韩文字符FFG评估,跟《Junbum Cha, Sanghyuk Chun, Gayoung Lee, Bado Lee, Seonghyeon Kim, and Hwalsuk Lee. Few-shot compositional font generation with dual memory. In Eur. Conf. Comput. Vis., 2020. 》选取同样的245个韩文字符。

评估标准:又重复一遍风格太多、多个合理的字形都满足目标,但测试集里只有一个ground-truth字形,或甚至没有ground-truth(生成具有汉字某字体风格的韩文字符),因此需要不依赖ground-truth的评价指标。

除模型外单独训练分类字符标签跟字体标签的分类器,仅评估时使用。共三个:中文测试字体的风格分类器、中文测试字符的内容分类器和韩文测试字符的内容分类器。它们的细节都在补充材料中,总之用这些分类器可以计算分类准确度,当两个分类器都正确的时候就算作准确(We also report the accuracy when both classifiers are correctly predicted 讲得什么jb)
应该是说特意训练俩分类器,来判断生成的字符图像是否满足要求的风格跟内容,以准确度衡量生成器的性能。

为主观质量也进行了用户调查,这部分也不是重点,就算了。

此外对于汉字FFG任务,还计算了生成图跟对应ground-truth差异的LPIPS分数。还算了生成图跟真实图的FID值,以及考虑风格和内容的调和平均数(FID(H))。

总之详细的都在补充材料中。

6.3. 实验结果

表1,FFG场景下各模型的性能比较。表头分别是考虑风格、考虑内容、同时考虑风格内容的准确度、考虑风格、考虑内容、同时考虑风格内容的用户满意度、LPIPS跟FID(H)。这里的数据是每次以4个不同参考字形进行50次实验的平均值。

定量分析结论是MX-Font效果比别人好,特别是跨语言任务上。
分析MX-Font在汉字FID表现上不如其他的,可能是FID对噪声、模糊图像敏感,而不管图像质量本身的缘故。

定性分析如图6所示,展示了各模型生成的样本,并用不同颜色的框标注了其他模型的缺陷。

6.4. 分析

不同专家学到的局部概念(concepts )。抽取组件分类器在每个局部特征上对训练数据的Class Activation Maps (CAMs) 值,可视化其方差如图7所示,越亮的地方表示VAMs方差越大、专家倾注的注意力越多。
注意到每张图像各不同,表示专家各自学习到了不同的局部特征。作者总结道使用多个局部专家有助于增强生成图像质量,因为在风格-内容解耦过程中能更好地保存局部细节。

多个专家vs一个专家。在表2跟图8中展示了1个专家跟6个专家的模型性能。肯定是多专家好,单专家会导致结构细节差、笔画缺失。

字符标签vs局部组件标签。表3展示用单一字符标签替代组件标签会导致模式坍塌(mode collapse),\(Cls_u\)是使用组件分类器的模型,而\(Cls_c\)是使用字符分类器的模型。
推测为字符数(约19k)太大,而组件数则少得多(371),容易学习;同时组件标签通过最佳分配问题防止专家坍塌到同一个值,而字符监督的模型无法限制专家学习不同概念。

损失消融(loss ablations)。表4展示了3种损失函数使用与否对模型的影响,并跟LF-Font做比较,表头分别为独立性损失、熵最大化项、内容风格对抗损失、风格准确度、内容准确度跟二者共同的准确度。这里的模型使用韩文手写数据集进行训练跟测试,详细训练设置见补充材料。

7. 结论

提出MX-Font,想要有局部细节的丰富表示以及对未知组件和语言的泛化能力。最终MX-Font使用多头编码器,以弱局部组件监督训练,如风格和内容特征分类器。
基于特征分类器和局部专家,MX-Font通过开发局部特征成功学习解耦风格和内容。
实验表明MX-Font在域内转换场景(已知的那些训练数据之间吧)及领样本跨语言转换场景都超越了已有方法,特别是跨语言方面有巨大进步。

8. 附录

posted @ 2022-08-23 16:59  NoNoe  阅读(895)  评论(1编辑  收藏  举报