[论文阅读] FontDiffuser@ One-Shot Font Generation via Denoising Diffusion with Multi-Scale Content Aggregation and Style Contrastive Learning
Pre
title: FontDiffuser: One-Shot Font Generation via Denoising Diffusion with Multi-Scale Content Aggregation and Style Contrastive Learning
accepted: AAAI2024
paper: https://arxiv.org/abs/2312.12142
code: https://github.com/yeungchenwa/FontDiffuser
ref: https://yeungchenwa.github.io/fontdiffuser-homepage/
ref: https://mp.weixin.qq.com/s/SR31ty6-oplIW2OkxG9Qpg
关键词: one-shot, font generation, diffusion, multi-scale, contrative learning
阅读理由: 看到了CGGAN的作者,可能是华南理工同个实验室的续作
Idea
套个Diffusion的壳,叠上多尺度特征、交叉注意力和风格对比损失
Motivation&Solution
- 现有的字体生成方法在处理复杂字符和风格变化较大的字符时仍然存在笔画缺失、伪影、模糊、结构布局错误和风格不一致(stroke missing, artifacts, blurriness, layout errors,
, style inconsistency)等问题—— 多尺度聚合内容+风格对比学习
Background
字体生成是一项模仿任务(imitation task),其目的是创建一个字体库,模仿参考图像(风格图像)的风格,同时保留源图像(内容图像)的内容。虽然现有方法已经取得了令人满意的性能,但它们在处理复杂字符和风格变化较大的字符时仍然很吃力。
本文的FontDiffuser是一种基于扩散的 Image-to-Image 1shot 字体生成方法,它创新性地将字体模仿任务建模为噪声到噪声范式。引入了多尺度内容聚合(Multi-scale Content Aggregation, MCA)模块,有效地结合了不同尺度的全局和局部内容线索,从而增强了对复杂字的复杂笔画的保留。此外,为了更好地处理具有巨大差异的风格转换,提出了风格对比细化(Style Contrastive Refinement, SCR)模块,利用风格提取器将风格从图像中分离出来,然后通过精心设计的风格对比损失对扩散模型进行监督。
引言谈到了字体生成任务的应用、价值和难点
图1 (a)本文方法生成的不同复杂度的汉字 (b)(c)不同方法在复杂汉字和风格变化巨大的字体上的生成效果 (1)-(4)分别是DG-Font, MX-Font, CG-GAN和CF-Font,红框标的是生成有误的地方
如图1bc所示,现在的方法有一些不足,这是由于:
- 大多数方法都采用基于 GAN 的框架,由于其对抗训练的性质,可能会出现训练不稳定的问题。
- 这些方法大多只通过单一尺度的高维特征来感知内容信息,而忽略了对保留源内容(尤其是复杂字符)的细粒度细节。
- 许多方法利用先验知识来帮助字体生成,例如字符的笔画或部件组成;然而,对于复杂的字符来说,获取这些细粒度信息的成本很高;
- 在过去的方法中,目标风格通常由一个简单的分类器或判别器来进行特征表示学习,这种分类器或判别器很难学习到合适的风格,在一定程度上阻碍了在风格变化较大时的风格转换。
相关工作介绍了 Image-to-image Translation, Few-shot font generation, Diffusion model
Method(Model)
Overview
图2 方法总览。 (a)条件扩散模型是基于Unet的网络,由内容编码器E_c和风格编码器E_s组成。(b)风格对比精炼模块解耦不同风格给扩散模型提供引导
Conditional Diffusion for Font Generation
基于DDPM,加噪再去噪,还复述了一下扩散模型的公式。具体来说,为了加强对复杂字符的细节保留,我们设计了多尺度内容聚合(MCA)模块,将全局和局部内容线索注入模型的UNet中;同时我们还设计了一个Reference-Structure Interaction交互(RSI)模块,利用来自参考图片(风格图片)的结构形变。
图3 多种block中的内容特征
图4 多尺度内容聚合
Multi-scale Content Aggregation (MCA) 如图3所示,大尺度(large-scale)的特征保有更多的细节信息,而小尺度的则没有。因此提出把多个不同尺度的全局和局部内容特征注入扩散模型的UNet中。图3a将内容图片编码为\(F_c\)共三个尺度的特征\(f^i_c\),然后如图4所示,每个\(f^i_c\)与前一个UNet块特征\(r_i\)拼接,得到通道信息特征\(I_c\)。为了增强自适应通道选择的能力,对\(I_c\)使用通道注意力块,得到全局通道感知的向量\(W_c\),它通过与\(I_c\)在通道维度上相乘,然后再加上残差得到\(I^\prime_c\),使用1x1卷积得到\(I_{co}\),最后通过交叉注意力模块将风格嵌入\(e_s\)注入,其中\(e_s\)充当key和value。
Reference-Structure Interaction (RSI) 为的是解决原图和目标图片之间的结构差异问题,该模块基于DCN,直接在参考风格图片特征上抽取结构信息来得到形变偏移\(\delta_{offset}\),在UNet的跳跃连接上执行结构形变。由于UNet特征和参考特征之间存在空间位置的不对齐,不同于传统DCN使用CNN来得到\(\delta_{offset}\),这里用交叉注意力来支持长距离交互,如公式3所示。
公式3
Style Contrastive Refinement
提出了风格对比精炼(Style Contrastive Refinement, SCR)模块,这是一个字体风格表示学习模块,它能从一组样本图像中分离出风格,并结合风格对比损失来监督条件扩散模型,能够较好地与扩散模型进行较好的结合,确保生成的风格在全局和局部层面上与目标保持一致,具体的做法如图2b所示。从VGG网络选取N层特征图\(F_v\),并利用平均池化和最大池化分别抽取不同的全局通道特征,在通道拼接后得到\(F_g\),最终得到风格向量\(V\)(仍然保有N层的结构)。
SCR需要预训练,选目标图片作为正样本,取不同风格但同一个字的作为负样本,按公式4算对比损失:
公式4
其中\(\mathrm{Extrac}\)表示风格提取器,K是负样本的数量,\(\tau=0.07\),是温度系数。正样本使用随机裁剪和缩放的增强策略。
Training Objective
遵循由粗到细的两阶段策略进行训练。
Phase 1 使用标准的 MSE 损失来优化 SCR 以外的FontDiffuser模型,这确保生成器具备字体重构的基本能力:
其中,
\(\mathcal{L}_{M S E}\) 用于训练扩散模型正确预测噪声,\(\mathcal{L}_{t o t a l}^{1}\) 表示第一阶段的总损失, \(\mathcal{VGG}_{l}(\cdot)\) 是VGG的l层特征, \(\mathcal{L}_{c p}\) 用于约束生成图片\(x_0\)和相应gt的内容对齐,照图2来看用的是增强前的gt,有点LPIPS的感觉?
\(\mathcal{L}_{o f f s e t}\) 约束RSI模块的偏移, \(\mathrm{mean}\) 表示平均过程。 \(\mathcal{L}_{c p}=0.01,\; \lambda_{o f f}=0.5\)
Phase 2 实现SCR算对比损失,总损失如下:
其中\(\lambda_{c p}^{2}=0.01,\;\lambda_{o f f}^{2}=0.5\;\mathrm{and}\;\lambda_{s c}^{2}=0.01.\)。呃呃,不就是第二阶段才把风格对比加进去嘛
Experiment
Settings
表7 三种复杂度的分类
图9 三种复杂度汉字的例子
将汉字根据笔画数量分为三种复杂度(简单,中等和困难),分别测试。图片分辨率96,dropout0.1,阶段1时batchsize=16,iterations=440000,lr=1e-4,线性调度;阶段2时lr固定为1e-5,batchsize=16,iterations=30000,负样本数为16。实验使用单张3090。
采样时同样使用CFG,系数为7.5,使用DPM-Solver++采样器,只需20个推理步。
额外比较了Diff-Font,但只比了UFSC(Unseen Font Seen Character)的效果,内容字体为宋体。
Dataset
424字体,400字体+800汉字作为训练集,测试集方面,SFUC:100个随机选取的训练集字体+272个没见过的汉字,UFUC:24个没见过的字体+300个没见过的汉字
Results
如图1所示可以轻松应对困难生成任务
表1 SFUC和UFUC的定量结果。最后一列'User'表示user study。'Average'和'User'均在3种复杂度的汉字上评估。
表2 UFSC的定量结果
Quantitative comparison 定量比较结果如表1所示,说是大幅超越其他方法,但L1咋都那么高,不会在[-1,1]算的吧,而且一般不都是比较UFUC吗,就结果来看跟CF-Font挺接近的,但作者说L1和SSIM都是像素级指标,没法反映真实情况,但Hard那栏确实本文优势更大。在表2比较了UFSC,似乎特意为Diff-Font准备的,因为它只支持生成见过的字。
图7 定性比较。红框的是生成缺陷
图5 跨语言生成(中文到韩文,模型只由中文数据集训练)
Qualitative comparison 见图7、图5
Ablation Studies
实验均在UFUC的average数据上进行
MCA: Multi-scale Content Aggregation
RSI: Reference-Structure Interaction
SCR: Style Contrastive Refinement
表3 不同模块的有效性。MRS分别表示 MCA, RSI, SCR,第一行为baseline。
图6 不同模块可视化。MRS分别表示 MCA, RSI, SCR。红框缺失笔画,绿框表示相应改进,蓝框是结构性提升。
Effectiveness of different modules 表3以增量形式逐步加入三个模块,图6是效果的可视化,其第一行表明缺失笔画的问题可以通过MCA解决。
表4 SCR中增强的有效性
表5 CNN和交叉注意力的比较
Effectiveness of augmentation strategy in SCR 如表4,数据增强有用,但好像也不是很明显,提升较大的是作者认为没有意义的像素级损失,难绷。
Comparison between cross-attention interaction and CNN in RSI 表5显示RSI用交叉注意力更有优势,这几乎是肯定的吧,怎么不消融一下DCN
Others Appendix 还有更多消融实验,包括SCR中VGG层特征的影响和引导系数的影响
Visualization of SCR contrastive score
图8 SCR对比分数的可视化。左边一列表示生成的样本,每行对应被选中的样本。红框标出target,蓝框是与生成风格相似的样本。字上面的颜色越深说明对比分数越大。
如图8,显示出SCR可以从一组样本中区分出target,甚至其中有相似风格的也行。意思是说对比学习有用,算出的样本间的相似度是正确的?
Conclusion
复述三个模块,说还能胜任跨语言转换任务,不足是仍然需要多步降噪才能生成图片,速度慢于基于GAN的方法。
Critique
行文有些重复,但不管是图片的说明还是模块的讲解都十分细致,甚至有些啰嗦,也算是好事吧,至少看懂了。两个阶段的训练目标似乎暗示了风格对比损失不能一开始就加进去,可能会干扰基本的重建能力。
很新奇的图片分辨率,有些偏小,才96。总体感觉中规中矩,与扩散模型的结合之前Diff-Font就做过了,只是这里点更高。