[论文阅读] MF-Net A Novel Few-shot Stylized Multilingual Font Generation

pre

title: MF-Net: A Novel Few-shot Stylized Multilingual Font Generation
accepted: ACM Multimedia 2022
paper: https://dl.acm.org/doi/abs/10.1145/3503161.3548414
code: https://github.com/iamyufan/MF-Net

亮点:多语言

针对问题

名字:Multilingual Font Generation Network (MF-Net)
针对多语言字体生成

核心思想

好像没啥创新?
说是GAN框架,生成器部分由两个独立的编码器跟一个解码器构成,然后判别器有两个。

提出一个语言复杂性感知跳跃连接(language complexity-aware skip connection),以此根据参考图片的语言复杂度调整内容encoder不同层次的特征图模糊度,应该是调整连接给decoder的信息比例,以此减少信息损失,提高生成质量

提出编码器一致性损失来更好地结构内容跟风格特征。

贡献

  1. 提出few-shot风格多语言字体生成(?提出任务也算),并构建验证数据集
  2. MF-Net第一个(MX-Font?)给出将字体风格迁移到未知语言的字符上
  3. 语言复杂性感知跳跃连接
  4. 编码器一致性损失

图1 MF-Net的应用例子,蓝框的是内容字,绿框的是风格字

相关研究

字体生成方法应达成两个目标:

  1. 应保持字转换前后结构一致,使人类阅读没有困难
  2. 应从风格字体转换大部分风格特征给目标字

现在也有不少方法可以做字体生成,少部分可以用于跨语言,但还没有可以做多语言few-shot字体生成的,作者所说的多语言few-shot方法指的是从少许样本学习字体风格,然后迁移到另一种没训练过的语言上。

many-shot方法:2000 for zi2zi, 775 for DCFont and SCFont,
few-shot方法:EMD, FTransGAN, MC-GAN, AGIS-Net, MX-Font
少部分模型,如 FTransGAN,能用于多语言,但对于未知的语言泛化性有限。

Arbitrary Style Transfer stylized multilingual font generation 在保持内容结构方面跟Arbitrary Style Transfer不同,Font style transfer需要保持内容信息但对字在图片中的几何形状跟位置不敏感,这对Arbitrary Style Transfer来说是必须的。

写的什么jb。感觉是想说Arbitrary Style Transfer跟本文要研究的任务不大一样,但有几个思想是可借鉴的。举了个例子:用一些创新结构为特征捕捉引入一些灵活性,例如SANet跟AdaAttN,它们能动态地对齐内容图片特征的数据(均值跟方差)到那些风格图片。

又说了个DSTN提出domainness indicator跟domain-aware skip connections,介绍二者功能,莫名其妙。

方法(模型)流程

图2 MF-Net架构总览

需要一张内容图跟多张风格参考图

Overview

图3 带多头注意力模块的风格编码器架构

开篇就是套来套去的长难句,甚至看不懂它的语法,总之在介绍few-shot多语言字体生成这个任务。
感觉更适合用于领域入门?讲得超级基础,俩encoder用于彻底解耦风格内容编码啥的,还有些简单的公式,倒是清晰易懂。

Encoder 对着图2讲内容编码器,然后风格编码器跟它差不多,只是从FTransGAN那拿了个多头注意力模块接在三个卷积层后面,结构可以看图3。说是被FTransGAN启发,多头注意力机制捕捉不同尺度的风格特征。

Context-aware上下文感知注意力模块通过捕捉全局信息能获得更大的感受野跟上下文信息。

Decoder 将内容、风格向量拼接后作为输入。继续照着图讲结构。提到language complexity-aware skip connection 使得MF-Net根据内容图片的语言属性调整结构保持的级别。从内容编码器不同卷积层抽取的特征图会被动态模糊,再喂入解码器相应卷积层。感觉讲了又感觉没讲。

discriminator 两个,分别区分风格跟内容的。

Language Complexity-aware Skip Connection

这玩意基于参考图片的"域(domainness)"将编码器抽取的特征故意模糊化。

内容编码器不同卷积层有不同感受野,它们的特征跳跃连接到解码器,提供结构信息,但这些特征的有的是局部的有的是全局的(感受野大小来区分?),不同语言对于局部/全局特征需求程度不同。举例中文日语这种算复杂语言,更关注局部特征。而英语泰语那种文字简单的,就比较关注全局特征。

那么这玩意可以调整不同卷积层抽取的特征图的信息度,取得局部全局信息的平衡。

图4 语言复杂度指示器架构。

图4的语言复杂度指示器用语言复杂度衡量内容图片所用语言的复杂程度。接收卷积层特征图\(F_l\)为输入,输出语言复杂度\(\alpha_l,\; l \in {1,2}\)

该指示器用的是内容编码器前两个卷积层,作者认为它们分别含有浅层跟深层结构信息。然后照着图4细心介绍结构,公式也没啥必要看,讲得这么细有一种在拼命水字数的味道。

类似于DSTN,选用\(\sigma = 16\)的径向基函数核,核大小\(\lfloor\alpha_{l}\times4\rfloor+1.\)。因此当\(\alpha_l\)增加,模糊级别就会增加,反之亦然。没细说具体操作,该不会就是从那个DSTN改了改把。

动态调整特征图模糊度,MF-Net可以学会保持正确的结构信息,减少信息损失,提高生成质量。

关于径向基函数RBF:
ref: https://www.zhihu.com/question/44328472
ref: https://zhuanlan.zhihu.com/p/413596878
ref: https://blog.csdn.net/weixin_40802676/article/details/100805545

BP 神经网络:BP 是back propagation,是一种监督神经网络的训练方式,跟神经元无关。且输入层 一层,输出层 一层,中间层 很多。
RBF 神经网络:对神经元和训练方式都做了限定: 用高斯函数作为神经元+(自监督+监督)的训练方式。 自监督:聚类算法。 监督: BP 训练方式。输入层 一层,输出层 一层,中间层 一层。
两者最重要的区别:1 中间层神经元的区别。2 中间层数的区别。3 运行速度的区别

Loss Function

对抗损失

\[\mathcal{L}_{a d v}=\mathcal{L}_{a d v c}+\mathcal{L}_{a d v s}, \tag{6} \]

\[\mathcal{L}_{a d v c}=\operatorname*{max}_{D_{c}}\operatorname*{min}_{G}\mathbb{E}_{I_{c}\in P_{c},I_{s}\in P_{s}}\left[\log D_{c}(I_{c})+\log(1-D_{c}(\hat{x}))\right], \tag{7} \]

\[\mathcal{L}_{a d v s}=\operatorname*{max}_{D_{s}}\operatorname*{min}_{G}\mathbb{E}_{I_{c} \in P_{c},I_{s}\in P_{s}} [\log D_{s}(I_{s})+\log(1-D_{s}(\hat{x}))], \tag{8} \]

经典款,作者说这使用了hinge loss,两个下标不同的D分别表示风格跟内容判别器

L1损失,生成图片跟gt之间

\[\mathcal{L}_{L1}=\mathbb{E}_{x,\hat{x}\in P_{(x,\hat{x})}}\ ||x-\hat{x}||_{1}. \tag{9} \]

编码器一致性损失,使内容/风格编码器只学习相应的内容/风格特征

\[f_{c}(I_{c_{1}})=f_{c}(I_{c_{2}}), \tag{10} \]

\[f_{s}(I_{S_{1}})=f_{s}(I_{S_{2}}), \tag{11} \]

想法很好,不同字体同个字提取的内容特征应一致,这个合理,然后同一字体不同字提取的风格特征应一致,这属于全局约束,会忽视局部特征差异,恐怕不容易实现。

落实到损失就是计算二者的L1损失期望:

\[\mathcal{L}_{e n c}=\mathcal{L}_{e n c_{c}}+\mathcal{L}_{e n c_{s}}, \tag{12} \]

\[\mathcal{L}_{enc_c}=\mathbb{E}_{I_{c}}||f_{c}(I_{c})-f_{c}(x)||_{1}, \tag{13} \]

\[\mathcal{L}_{enc_s}=\mathbb{E}_{I_{s}}||f_{s}(I_{s})-f_{s}(x)||_{1}, \tag{14} \]

域重建损失
其实就是重建损失,内容、风格图同一张,然后重新合成自身,作者解释希望模型对英文、中文字体都能掌握生成方式

\[\mathcal{L}_{rec_c}=\mathbb{E}_{I_c}||I_{c} - G(I_{c}, I_{c})||_{1}, \tag{15} \]

\[\mathcal{L}_{rec_s}=\mathbb{E}_{I_s}||I_{s} - G(I_{s}, I_{s})||_{1}, \tag{16} \]

\[\mathcal{L}_{rec_c} + \mathcal{L}_{rec_s} \tag{17} \]

语言复杂度分类损失

\[\mathcal{L}_{l c c_1} = \mathbb{E}_{I_c^{cn}}\left[l o g(1-\gamma(I_{c}^{cn})\right] + \mathbb{E}_{I_c^{en}}\left[l o g(\gamma(I_{c}^{e n})\right], \tag{18} \]

\[\mathcal{L}_{l c c_1} = \mathbb{E}_{I_c^{cn}}\left[l o g(\gamma(I_{c}^{cn})\right] + \mathbb{E}_{I_c^{en}}\left[l o g(1-\gamma(I_{c}^{en})\right], \tag{19} \]

\[\mathcal{L}_{l c c}=\mathcal{L}_{l c c_{1}}+\mathcal{L}_{l c c_{2}} \tag{20} \]

花里胡哨的,原论文\(I^{ch},\; I^{cn}\)把自己都绕晕了真傻卵,总之这俩I一个代表汉字,一个是英文字母,两损失分别是浅层(cc1)、深层(cc2)的,说用的二元交叉熵,应该是带入了gt标签且去掉取负操作的版本。

按二元交叉熵公式猜测\(\gamma\)用于计算\(\alpha_l\),也就是复杂度,或许可以理解为针对某一种文字图片的信息去除度,公式18应该是希望cn的复杂度1,en复杂度0,这样损失负无穷大。按理说浅层抽取的应该是局部特征,所以cn复杂度1代表这些特征都得去掉?但也只是猜测,毕竟作者唯独没说\(\gamma\)是干嘛的,明明前面那些简单的公式都讲得很细,还举例子

\[\mathcal{L}=\lambda_{a d v}\mathcal{L}_{a d v}+\lambda_{L1}\mathcal{L}_{L1}+\lambda_{e n c}\mathcal{L}_{e n c}+\lambda_{r e c}\mathcal{L}_{r e c}+\lambda_{l c c}\mathcal{L}_{l c c}, \tag{21} \]

最终损失,\(\lambda\)是调整每一项的权重

实验

选汉字跟拉丁字母作为训练语言对,因为数据好获取。同时二者差异很大,训练难度高,可以展示MF-Net的应用面之广。

数据集和指标

Few-shot Font Style Transfer between Different Languages所用数据集基础上,从 https://www.dafont.com/, https://fonts.google.com/ 又搜集了一些加上去。最终共有858个字体,每种都有992个汉字跟52个拉丁字母。

构建了多语言测试数据集,8个未知风格的汉字字体跟 来自 日语、韩语、阿拉伯语、梵文、西里尔文跟泰语 的20种字体。涵盖现代世界字体3个主要类别:Dense (如日语), English-like
(如西里尔文), 和 Tall (如泰语、阿拉伯语)

详细设置

谈及那几个损失项的权重分配、Adam优化器的两个参数,前10个epoch常数学习率2e-4,后10个epoch从2e-4线性衰减至0.

模型评估

Quantitative Evaluation

选了俩模型对比, EMD 和 FTransGAN,其中本文就是基于FTransGAN做的改进,然后用的EMD还是FTransGAN作者改过的双语言版本,这可太舒服了,他甚至不愿意对比下开源且文档齐全的MX-Font。
注意这俩模型都是 dual-lingual 的,作者说多语言本质上不过是多个双语言转过过程,所以对比很公平。

表1 模型定量比较

Image Distance
选了三定量指标,mean square error (MSE), structural similarity index (SSIM), 和 mean absolute error (MAE)

作者说SSIM是图片处理领域最新的方法,解决了MSE的缺点,但SSIM出自2004年的一篇论文:Image Quality Assessment: From Error Visibility to Structural Similarity,这样说这领域似乎发展得有点慢

ref: https://zhuanlan.zhihu.com/p/399215180
SSIM 主要考量图片的三个关键特征:亮度(Luminance), 对比度(Contrast), 结构 (Structure)。不同于MSE, SSIM以窗口的局部特征,在加上高斯核,相当于引入了平滑先验,与MSE和PSNR衡量绝对误差不同,SSIM是感知模型,即更符合人眼的直观感受。在用MSE作为loss的时候,可以额外加入SSIM,效果会更好。
SSIM Dissimilarity, SSIMD = (1 - SSIM)/2, 范围[0, 1], 越大越不相似,一般用SSIMD来作为网络的损失

Feature Distance
跟FTransGAN一样,用FID评估网络性能。

结果如表1所示,在未知语言上大幅超越其他模型,已知的也能取得SOTA表现,好尬,这已知的指标看起来不是被暴打了吗,总结一下就是基于FTransGAN修改后对已知字体性能少许下降,但对于未知语言有较大提升。

Visual Evaluation

图5 已知语言上的视觉对比

图6 未知语言上的视觉对比

Visual comparison
如图5,6所示,分别展示已知跟未知语言上的生成样本。说图5展示了它在训练过的语言(中文)上类似的生成能力,明明看着差很多,完全没有意识到连笔的存在,咋觉得还是FTransGAN好一些。然后未知语言生成的结果说是最为合理。而且这里没有给出内容字,不知道模型对字的修改力度大不大准不准,会不会受内容字影响过多。

Subjective evaluation
认为高度艺术感的字体很难直接跟ground truth比对,因此进行主观调查。找人评价模型生成的图片跟给定风格有多接近。
MF-Net, FTransGAN, EMD, 和俩消融版本的排名百分比如下:35.78%±23.4%, 52.51%±21.8%, 55.54%±25.0%, 70.03%±20.2%, 86.12%±22.3%。他甚至懒得画个图或表格。关于数据倒是放在了github上面

Latency Evaluation

作者认为模型的速度也很重要,对于AR翻译(Augmented Reality (AR) translation)这种场景来说很关键。图片大小64x64,在2080Ti能达到35ms,即28fps。这里图片有点小了,不过或许对于AR场景是合理的?而且AR翻译是说出来的译文字体要跟原文一样吗,话说AR设备的性能能达到2080Ti了吗。

Ablation Study

Effectiveness of each module

表2 未知语言上的消融实验。FM是完整模型,P1指编码器一致性损失,P2是语言复杂度感知跳跃连接。

图7 表2对应的生成样本

Effectiveness of the language complexity 𝛼𝑙

表3 设置 \alpha_l 后的定量结果(SSIM分数)

设置\(\alpha_1,\; \alpha_2\)为0, 0.5 或 1,在中文、日语、英语跟西里尔文上进行实验,前两个复杂度高于后两个。如表3所示,对于复杂语言,\(\alpha_1\)高,\(\alpha_2\)低比较好,这样MF-Net会对浅层增加更多的模糊,以改进对复杂语言的性能。

总结

比起SOTA,说自己的模型从双语言扩展到多语言应用场景,而且效果很好,推理很快。
作者提出该工作的几个应用方向:

  1. 加速专业字体设计过程,减轻个人向版权字体付费的重担
  2. 可用于AR翻译这种实时场景

提到了几个问题:

  1. 由于(可能是这个意思,写的是wing to,是不是前面少了个o,感觉就跟写字缺失笔画一样离谱)卷积网络设计,只能输出64x64图片
  2. 提高数据集质量,纳入更多的艺术字体,改进模型泛化能力

评价

首先公式出错、解释不清,行文中还有 "wing to" 这种东西,语法也不是很自然,图一般,合成样本没给内容字图片,总体感觉作者不是很上心。

论文核心就一个语言复杂度跳跃连接,但消融实验并未单独消融它,算是一个有点意思的小trick,此外没有太多亮点、新意。而且实验部分也不是很充分,只跟两个模型对比,没有提及MX-Font,感觉有些水,拉低了我对ACM MM的看法。

不过这个语言复杂度的思想感觉有些道理,可惜讲得不是很清晰,姑且理解为复杂字体合成时将全局特征模糊化(去掉?),有利于专注局部细节,能提升合成质量。

待解明

  1. 提出的那个复杂度\(\alpha_l\)不太清楚,用RBF增加模糊是什么意思,为什么复杂语言反而要给浅层增加模糊,浅层不是更多局部细节吗。
posted @ 2022-12-05 21:45  NoNoe  阅读(280)  评论(0编辑  收藏  举报