[论文阅读] 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解码
贡献
- 提出FTransGAN,端到端方法解决跨语言字体风格转换
- 风格编码器的两个新模块:内容感知注意力网络(Context-aware Attention Network)跟层注意力网络(Layer Attention Network),同时捕获局部跟全局风格特征
- 输入的风格图片可以任意数量
- 提出新数据集
相关研究
早期基于I2I的办法有些缺点:
- 训练过程分为两个阶段:预训练跟微调,要求较高的计算资源
- 微调需要成百上千的训练样本,数据准备也很繁琐(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}\)不仅有感受也范围的信息,还有来自其他区域的上下文信息
之后引入注意力机制为每个区域分配一个分数,因为并非所有区域都有同样的贡献
公式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一样。
这里同样是加权三个特征向量得到一个输出\(z\)
同时输入k张风格图片,因此最终的隐向量编码z就k个取平均
内容编\(z_c\)size为\(C×H×W\),而风格编码\(z_s\)是C维向量,因此需要图3中的那个Expand操作,将\(z_s\)复制多次得到跟\(z_c\)一样的size,然后二者简单相连直接送入解码器
End-to-End Training
图2的两个判别器架构几乎一样,都是几个卷积层,分别判断图片的内容、风格是否一致。输入判别器的多张图片直接在通道维度上拼接再输入,整个模型端到端训练而成
目标函数共3项,L1损失,风格跟内容损失,一集三个平衡用的\(\lambda\)
为了更高的生成质量跟稳定的训练过程,内容和风格用hinge损失:
其中\(\hat{x}\)是groundtruth图片,x是模型生成的,c,s分别表示内容跟风格图片,还有个L1损失
实验
后续实验设置\(\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)作为位置风格跟内容,剩下的其他作为训练数据。因此整个数据集被划分成三部分:
- S1:训练用图片
- S2:训练已知风格但未知内容图片用作测试
- S3:已知内容但未知风格图片用作测试
图6 实验构建的字体数据集例子 (a)多个字体的风格图片 (b)普通字体的几个内容图片 (c)真值图片,S1用作训
图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 的感受野,而
可以看到处理手写体时模型更关注局部特征,印刷体及艺术体则更关注全局特征。这也符合今年一些组件级别特征抽取模型的思想,手写体这种局部细节更多,无法统一地描述每个字,而示例的那些印刷体粗细分明,看到一个字就能猜到下个字怎么写
总结
提出了端到端跨语言风格转换方法,只需要少许样本。还构建了个数据集,展演展示模型性能好。
图9 一些失败样本,三组,左侧是gt,右侧是生成的
但也有不少缺点:
- 虽然测试时风格图片数量可以任意,但训练时由于架构设计,要求数量固定。
- 如图9所示,对于高度艺术化字体(highly artistic font),模型效果差
认为解决上述问题有趣且具备挑战性,将来可以尝试将模型用于其他场景如艺术风格转换。
评价
论文书写比较清晰,至少比之前那个MF-Net好多了,图也简单易懂。代码方面直接提供了用于对比的EMD跟DFS模型,而且数据集也给出,注释多,使用似乎很方便。只是性能估计被今年的新东西吊打,但说到跨语言这块估计还是可以的,毕竟也没几个。
虽然用了注意力去融合局部/全局特征,但对于手写体这种比较细节的风格还是把握得不是很好,像当前流行?的组件级模型那样加点组件、笔画的监督信息或许能更好的
待解明
- 公式3的上下文向量\(u_{c}\)是所有图片共用的还是每张一个?
- 英文作风格,汉字作内容,英文没有的特征汉字又要这不是纯靠模型猜测了吗?