[论文阅读] Few-shot Font Style Transfer between Different Languages

pre

title: Few-shot Font Style Transfer between Different Languages
accepted: WACV 2021
paper: https://ieeexplore.ieee.org/document/9423371
code: https://github.com/ligoudaner377/font_translator_gan

亮点:跨语言

针对问题

不同语言间的风格转换

核心思想

依靠 Layer Attention Network 跟 Context-aware Attention Network 抽取风格,根据图片自动选取所需的局部/全局特征,与内容编码简单拼接后送入decoder解码

贡献

  1. 提出FTransGAN,端到端方法解决跨语言字体风格转换
  2. 风格编码器的两个新模块:内容感知注意力网络(Context-aware Attention Network)跟层注意力网络(Layer Attention Network),同时捕获局部跟全局风格特征
  3. 输入的风格图片可以任意数量
  4. 提出新数据集

相关研究

早期基于I2I的办法有些缺点:

  1. 训练过程分为两个阶段:预训练跟微调,要求较高的计算资源
  2. 微调需要成百上千的训练样本,数据准备也很繁琐(labor-intensive)

最近也有一些少样本方法,但所有这些都只作用于同一语言。

语言既关注局部特征(装饰、笔画、粗细)也关注全局特征(形状、效果?(effect))

Style Transfer

提到adaptive instance normalization,以及 Gu et al. 的任意风格转换方法,通过重新重排风格图片的深度特征实现。但这两个方法都不适用字体风格转换。

Image-to-Image Translation

简短介绍Pix2Pix 和 CycleGAN。coupled GAN (CoGAN)通过参数共享学习两个域的联合分布。但这些方法只能在两个域之间转换图片,而且要大量数据。

starGAN加入域信息解决了第一个问题,但无法生成未知域。近来的FUNIT从多个图片中抽取域信息,而不是直接为生成器输入域信息(从图片抽取就更为灵活,可以应对未知域的情况)

Attention Mechanism

介绍注意力的一些发展。SAGAN成功将自注意力层应用到图片生成任务

Font Generation

该任务可视作特殊的图片风格迁移。

非DNN方法提到2011的一篇论文:Easy generation of personal Chinese handwritten fonts,其中提出汉字组件构成模型。提到除少部分 single-element characters,很多汉字都是compound characters,还分析了汉字的结构。核心思想跟最近的FsFont接近,就是挑选能覆盖大多数组件的字,然后让用户写下来,扫描进系统,然后根据结构拆分成一个个组件备用。合成的时候根据位置、尺寸挑选最接近的组件去组装,最后支持生成TTF字体文件。当然这样生成的每个字都一模一样,但质量很高,同时用户需要书写约20%的汉字(GB2312中的?)才能生成TTF,量比较大。论文发在IEEE ICME: International Conference on Multimedia and Expo。

MC-GAN是第一个端到端艺术字合成方案,但输入输出图片数量固定(26个英文大写字母),做不了汉字生成。除了AGIS-Net 和 EMD 外也介绍了一些仅有作者名的方案,但这些在提出的多语言数据集上表现都不好。

方法(模型)流程

Overview

图1 几个应用例子。左边字母是风格图,右边绿色是内容图,下方是生成的结果

提出FTransGAN (Font Translator GAN),无需fine-tuning,可用于实时系统。
两个编码器分别抽取内容、风格表达,然后拼接在一起输入解码器。

图片都是灰度图,64x64

图2 FTransGAN总览。内容风格图来自不同语言,风格多张,内容一张。

图3 生成器G的总览

如图2、3所示,判别器是PatchGAN的设计,局部地验证真假图像块。

注:PatchGAN来自cycleGAN,是一种全卷积结构,最终输出N*N矩阵,每个元素值表示对原始图像中一个patch的评价,因此要求label也是N*N才能计算损失

Context-aware Attention Network

图4 Context-aware Attention 块架构

如图3,Context-aware Attention块共3个,感受也分别为13×13, 21×21, 37×37 ,图4是其内部细节。

输入是 C×H×W 尺寸的特征图,将其每个区域记为\(\{\mathcal{v}_r, r = 1, 2,\cdots , H × W\}\)。不像以往工作用LSTM或GRU块获取上下文信息,为了更好的计算效率,这里用自注意力层将上下文融入特征图:

\[h_{r}=SA(v_{r}), \tag{1} \]

\(h_{r}\)不仅有感受也范围的信息,还有来自其他区域的上下文信息

之后引入注意力机制为每个区域分配一个分数,因为并非所有区域都有同样的贡献

\[u_{r}=\operatorname{tanh}(W_{c}h_{r}+b_{c}), \tag{2} \]

\[a_{r}=\mathrm{softmax}(u_{r}^{T}u_{c}), \tag{3} \]

\[f = \sum_{H\times W} a_{r}v_{r}. \tag{4} \]

公式2的\(u_{r}\)是图4中粉色块NN的输出,\(u_{c}\)是黄色的上下文向量,用于评估当前区域的重要性,它随机初始化并随着整个模型一起训练。(但它)

通过softmax获得归一化注意力分数\(a_{r}\),然后用它计算每个区域\(v_r\)的加权和为特征向量\(f\)

注意这里有三个并行的Context-aware Attention Networks,因此最终的特征向量也是3个:\(f_1, f_2, f_3\)

所以这部分相当于根据学习的上下文向量从特征图里抽取关键信息?

Layer Attention Network

图5 Layer Attention Network 架构

如图5所示,结合图3,Layer Attention Network有4个输入,最后一个卷积层的特征图\(f_m\)跟3个特征向量\(f_1, f_2, f_3\)。用单层神经网络给每个特征向量分配一个分数,指示模型应该聚焦于哪一个特征级别,作者希望用这种方式告诉模型应该多注意局部还是全局特征,这点跟后续基于FTransGAN的MF-Net一样。

\[w_{1},w_{2},w_{3}=\mathrm{softmax}(\mathrm{tanh}(W_{l}f_{m}+b_{l})), \tag{5} \]

\[z = \sum_{i=1}^{3}w_{i}f_{i}, \tag{6} \]

这里同样是加权三个特征向量得到一个输出\(z\)

\[z_{s}=\frac{1}{K}\sum_{K}z^{k}. \tag{7} \]

同时输入k张风格图片,因此最终的隐向量编码z就k个取平均

内容编\(z_c\)size为\(C×H×W\),而风格编码\(z_s\)是C维向量,因此需要图3中的那个Expand操作,将\(z_s\)复制多次得到跟\(z_c\)一样的size,然后二者简单相连直接送入解码器

End-to-End Training

图2的两个判别器架构几乎一样,都是几个卷积层,分别判断图片的内容、风格是否一致。输入判别器的多张图片直接在通道维度上拼接再输入,整个模型端到端训练而成

\[L=\lambda_{1}L_{1}+\lambda_{s}L_{siyle}+\lambda_{c}L_{content}, \tag{8} \]

目标函数共3项,L1损失,风格跟内容损失,一集三个平衡用的\(\lambda\)

为了更高的生成质量跟稳定的训练过程,内容和风格用hinge损失:

\[L_{content}=L_{contentD}+L_{contentG}, \\ L_{contentG}=-E_{x,c\sim P(x,c)}[D_{content}(x,c)], \\ L_{contentD}=-E_{\hat{x},c\sim P(\hat{x},c)}[m i n(0,D_{content}(\hat{x},c)-1)] \\ \tag{9} -E_{x,c \sim P(x,c)} [mi n(0, -D_{content}(x,c) - 1) ], \]

\[L_{style}=L_{styleD}+L_{styleG}, \\ L_{styleG}=-E_{x,s\sim P(x,s)}[D_{style}(x,s)], \\ L_{styleD}=-E_{\hat{x},s\sim P(\hat{x},s)}[m i n(0,D_{style}(\hat{x},s)-1)] \\ \tag{10} -E_{x,s \sim P(x,s)} [mi n(0, -D_{style}(x,s) - 1) ], \]

其中\(\hat{x}\)是groundtruth图片,x是模型生成的,c,s分别表示内容跟风格图片,还有个L1损失

\[L_{1}=E_{\hat{x},x\sim P(\hat{x},x)}[||x-\hat{x}||_{1}]. \tag{11s} \]

实验

后续实验设置\(\lambda_1 = 100, \lambda_c = \lambda_s = 1 and K=6\)。对于FTransGAN跟作为比较的模型,都以学习率0.0002训练20个epoch

英文字母作为风格,而汉字作为内容,因为汉字更复杂,包含英文字母没有的特征。这要求模型更灵活更鲁棒来生成高质量图片。

数据集

自行构建了多语言字形图片数据集,847字体,包含52英文跟1000中文字符,都是灰度字体,这些是风格字体。此外还选了一个普通字体用做内容输入,如微软雅黑。字形图片找bounding box,然后缩放到64像素,pad为64x64的字形图片

随机选29个字体跟字符(29 fonts and characters)作为位置风格跟内容,剩下的其他作为训练数据。因此整个数据集被划分成三部分:

  1. S1:训练用图片
  2. S2:训练已知风格但未知内容图片用作测试
  3. S3:已知内容但未知风格图片用作测试

图6 实验构建的字体数据集例子 (a)多个字体的风格图片 (b)普通字体的几个内容图片 (c)真值图片,S1用作训

练,S2和S3分别用作测试未知内容跟未知风格

图6展示了数据集一些样本跟划分规则, 通过计算所有图片的最近邻来保证训练集跟测试集没有重叠(嗯?)

Competitors

作者说之前还没有做不同语言转换的工作,因此只选择一些能修改去用于这一特殊任务的模型。提到排除了专为组合式语言(compositional scripts)设计的模型,DM-Font;排除了无法处理大字体库的MC-GAN,排除了原本为无监督设计的FUNIT

最终选择EMD、DFS(这个还是第一次见)作为对比的模型,修改DFS使之生成灰度图,公平起见后续实验所有模型都不会进行微调

Quantitative Evaluation

表1 多语言数据集上的评估结果

指标

三个不同方面评估模型:pixel-level, perceptual-level, human-level
如表1所示,本文模型在大多数指标上性能超越了其他的

Pixel-level Evaluation
使用mean absolute error (MAE), structural similarity (SSIM), multi-scale structural similarity (MS-SSIM).

Perceptual-level Evaluation
Salimans et al.提出了FID,Liu et al.通过综合每个目标类别取平均得到mFID。训练了俩ResNet-50用以分类内容和风格,基于它们计算top-1精度跟mFID。(但这里mFID好像跟ResNet-50没啥关系吧,感觉是直接计算所有风格图片跟生成图片的FID再平均得来的,因此表1那style-aware才会很大吧,比较内容不一样)

Human-level Evaluation

表2 基于390个回复的用户偏好数据

用户调查,疑似写错 which -> witch?,找10个人得到390份有效问卷,见表2,证明自己的模型生成的更受人们喜欢。

Visual Quality Evaluation

图7 模型间样本的视觉对比

如图7,随机选择三组字体:手写、印刷跟艺术字,FTransGAN确实不错,甚至于好过头了,仅凭几个英文字母它能知道要连笔(第一组第三列)

Ablation Study

表3 消融研究。LA 表示 Layer Attention 块, CA 表示 Context-aware 块

将所有风格图片在通道维度拼接然后输入给风格编码器,简单替代了多级注意力模块,称之为CAT模型

Attention Analysis

将Layer Attention Network权重可视化,表示对于当前图片,模型应该为局部或全局倾注更多注意力

图8 Layer Attention Network的分析,右侧条形图横轴是 Context-aware Attention Net 的感受野,而

纵轴则展示了权重(没说清是 Layer Attention Network 还是 Context-aware Attention Network 的)

可以看到处理手写体时模型更关注局部特征,印刷体及艺术体则更关注全局特征。这也符合今年一些组件级别特征抽取模型的思想,手写体这种局部细节更多,无法统一地描述每个字,而示例的那些印刷体粗细分明,看到一个字就能猜到下个字怎么写

总结

提出了端到端跨语言风格转换方法,只需要少许样本。还构建了个数据集,展演展示模型性能好。

图9 一些失败样本,三组,左侧是gt,右侧是生成的

但也有不少缺点:

  1. 虽然测试时风格图片数量可以任意,但训练时由于架构设计,要求数量固定。
  2. 如图9所示,对于高度艺术化字体(highly artistic font),模型效果差

认为解决上述问题有趣且具备挑战性,将来可以尝试将模型用于其他场景如艺术风格转换。

评价

论文书写比较清晰,至少比之前那个MF-Net好多了,图也简单易懂。代码方面直接提供了用于对比的EMD跟DFS模型,而且数据集也给出,注释多,使用似乎很方便。只是性能估计被今年的新东西吊打,但说到跨语言这块估计还是可以的,毕竟也没几个。

虽然用了注意力去融合局部/全局特征,但对于手写体这种比较细节的风格还是把握得不是很好,像当前流行?的组件级模型那样加点组件、笔画的监督信息或许能更好的

待解明

  1. 公式3的上下文向量\(u_{c}\)是所有图片共用的还是每张一个?
  2. 英文作风格,汉字作内容,英文没有的特征汉字又要这不是纯靠模型猜测了吗?
posted @ 2022-12-17 19:18  NoNoe  阅读(416)  评论(0编辑  收藏  举报