[论文阅读] DG-Font Deformable Generative Networks for Unsupervised Font Generation
pre
title: DG-Font: Deformable Generative Networks for Unsupervised Font Generation
accepted: CVPR 2021
paper: https://openaccess.thecvf.com/content/CVPR2021/html/Xie_DG-Font_Deformable_Generative_Networks_for_Unsupervised_Font_Generation_CVPR_2021_paper.html
code: https://github.com/ecnuycxie/DG-Font
ref: https://zhuanlan.zhihu.com/p/463907942
关键词:字体生成、可变形卷积、无监督学习、可视化
阅读理由:Diff-Font跟它比较,DG-Font++也有了,重新认真看下
注:2023.1.7重置
针对问题
大多数方法以监督学习的方式,需要大量的配对数据。且I2I模型将风格定义为纹理跟颜色的集合,无法直接用于字体生成。而字体的style往往是指几何形状、笔画粗细、笔锋和连笔书写方式(geometric transformation, stroke thickness, tips, and joined-up writing pattern)。
不同字体的同一个字,通常每个笔画是相对应的,由此提出可变形生成网络做无监督字体生成,即DG-Font,不需要大量配对数据或标注,而且是无监督的形式。
核心思想
不同字体同一个字的笔画具有对应关系,可看作变形而来,因此提出FDSC模块,利用可变形卷积对内容分支进行特征抽取,并结合风格分支的特征进行目标字符生成。
相关研究
Image-to-Image Translation
image-to-image迁移的任务,是学习一个从source domain到target domain的映射关系。其可以用于艺术风格迁移、语义分割、图像动画化(image animation)、物体变形(object
transfiguration)和视频插帧(video frames generation)等。
Pix2Pix是第一个基于cGAN做Image-to-Image迁移任务。CycleGAN通过循环一致性损失实现无监督学习。但它们只能实现一个域到另一个域的转换。
近来部分工作根据给定输入同时生成多种风格输出,Gated-GAN提出门控transformer在一个模型中实现了多种风格的转换。FUNIT使用AdaIN将内容和风格特征结合,TUNIT进一步用引导网络作为无监督域分类器自动为给定图片生成域标签,DUNIT为全局映像和实例提取单独的表示,以保存对象实例的详细内容。
但这种I2I方法不能直接用于字体生成,因为即使consistent contrains能保留字形结构,但仍然有模糊、丢失笔画等问题。AdaIN-based方法是在统计学上对齐特征来迁移图像风格,倾向于转换纹理和颜色,不适合局部风格模式(如几何形变)
为了学习几何形变的映射,有的引入空洞卷积跟多尺度感知损失去表示对象基本性质的误差,也有将图像空间解耦到外观与几何隐空间的笛卡尔积。
Font Generation
字体生成目标是自动的能够生成某种特定字体的字符,并且创造一个字体库。
从字母表语言所有字母的学习开始,Rewrite、zi2zi通过上千对匹配的字符,基于GAN进行了有监督学习,这之后,很多文章基于zi2zi进行了生成质量的改进。PEGAN利用多尺度图像金字塔在refinement连接中传递信息。HAN设计层次损失跟跳跃连接来改进zi2zi。AEGG添加了另一个网络来精炼训练过程。DC-Font引入风格分类器以得到更好地风格表示。还有个EMD也属于这类。但这些都是有监督,需要大量配对数据。
一些其他工作利用辅助信息(auxiliary annotations),如笔画、组件去生成高质量字体。SA-VAE解耦字体的内容和风格(content & style)的表示,并把汉字编码为高频字符结构布局(configuration)和组件(radical)。CalliGAN 进一步将字符分解为组件,并提供包括笔画顺序在内的低级结构信息来指导生成过程。RD-GAN提出组件抽取模块来抽粗糙的组件,可改进判别器的性能,实现few-shot汉字字体生成。
有一些方法用序列的DenseNet块实现无监督字体生成,《GAN-Based Unpaired Chinese Character Image Translation via Skeleton Transformation and Stroke Rendering》提出快速skeleton抽取方法,并利用其促进字体生成。
列举了DM-Font、LF-Font等。说这些依赖先验知识,只能应用于特定的书写系统(特定语言?)像笔画、skeleton等label可以由算法估计。SC-Font给每个笔画打上标签,来通过书写轨迹的合成,生成字的图像。DM-Font提出解纠缠策略来解纠缠复杂的字形结构,这有助于在富文本设计中捕获局部细节。它们需要大量数据跟标注,或是额外的算法来引导字体生成,算法的估计误差会降低生成质量。
Deformable convolution v1
Task 上的难点
视觉任务中一个难点就是如何 model 物体的几何变换,比如由于物体大小,pose, viewpoint 引起的。一般两类做法:
- 让 training dataset 就包含所有可能的集合变换。通过 affine transformation 去做 augmentation
- 另一种设计 transformation-invariant (对那些几何变换不变)的 feature 和算法。比如 SIFT 和 sliding window 的方式。
而上述两种方式有问题,几何变换我们是事先知道的,这种不能 generalize 到其它场景和任务中。
CNN 的缺陷
当前的 CNN 主要是通过 data augmentation 和一些手工设计,比如 max-pooling 解决的(max-pooling 只能解决一些很小程度的变化,比如字母 A 稍微倾斜了一下)。因为CNN的kernel大小固定,每个点的 receptive field 是一样大的,对 high-level 的语义不太好,不擅长建模几何形变。
Controbution & Details
主要提出了两个模块,Deformable Conv 和 Deformable Pooling。他们的优点是很方便的嵌入的已有的模型中,不需要额外的监督信号。
《Deformable Convolutional Networks》图1 3x3标准卷积跟可变形卷积采样位置示例 a标准卷积的常规采样网格(绿点) b可变形卷积中变形的采样位置(深蓝色点),以及增强偏移(浅蓝色箭头) cd是b的特殊形式,表示可变形卷积泛化各种尺度的形变,(各向异性的)宽高比跟旋转
可变形卷积以额外的偏移增强了模块中空间采样位置,对原本3x3卷积的位置做出了改变,从 kernel 的角度看,输入的 feature 相当于发生了形变(局部的)。
可变形卷积应用于几个高层视觉任务,如物体检测、视频物体检测采样、语义分割和人类姿态估计。进来一些方法将其用在图片生成任务上。TDAN用它对齐连个连续帧并输出高分辨率的帧,以处理超分辨率任务。还有的在给定视角条件矢量(view condition vectors)去合成新颖的视图图像(novel view
images)。而本文中偏移是通过学习到的隐风格编码来估计的。
Deformable convolution v2
v1 版本使用了 deformable conv 后,还是会覆盖到 irrelevant context, 影响performance,v2 的 contribution 基本上围绕如何消除 irrelevant context 的影响
modulated deformable conv: 为了减少 irrelevant 区域的影响,在学习 offset 的同时,又学习一个权重,它对每个 location 不同的,我们可以让这些区域的 weight 变得比较小。
可变形卷积Deformable Convolution,其加强了CNN的变换建模能力,它通过额外的偏移量增加了模块中的空间采样位置。在DG-Font 中,可变形卷积的偏移量是通过 learned latent style code来进行估计的
方法(模型)流程
Overview
图2 方法综述
图2里风格编码器跟判别器有所简化,细节看附录A。
Style Encoder 从输入图像中学习Style Representation。具体而言,其将一个Style Image作为输入,将其映射至一个Style Latent Vector \(Z_s\)。
Content Encoder 提取Content Images的结构特征,将其映射到一个空间特征图 \(Z_c\)。它由三个可变形卷积块跟两个残差块组成,对同一个字可以产生风格不变的特征
Mixer 通过混合\(Z_c\)和\(Z_s\)来生成输出字符,使用AdaIN方法将style特征注入Mixer。
FDSC( feature deformation skip connection modules) 对内容编码器的低维特征应用变换卷积(transformation convolution),并将结果注入mixer
Multi-Task Discriminator :当字符图像从生成网络生成后,该判别器用来对每个风格同时执行判断任务。对于每一个style来说, Discriminator的输出是一个二分类,即图片是真是假。因为训练集中有多种不同的字体,所以判别器的输出是二元向量,每个元素表示对应图片是真的还是生成的,长度为风格数量。
这里作者提出了可变形生成网络(Deformable Generative Networks)来做非监督的字体生成,利用提供的目标字体图像(style image input)来将一种字体的字符变形和转换为目标字体,属于经典的解耦风格内容再结合生成那种。
其核心模块为一个叫做FDSC(feature deformation skip connection)的东西,可以用来预测一个位移映射map然后使用位移映射map去对low-level的特征图做变形卷积。然后FDSC的输出被送入一个混合器,然后生成最终的结果。利用字体的空间联系可以用FDSC进行空间变形,有效确保生成图片具有完整结构。
FDSC模块将会对内容图像的低层级特征进行变换,其能够保留文字本身的模式,比如笔画和偏旁部首信息。因为对于内容相同的两种不同风格的字体,它们的每一笔画通常都是对应的(如图3所示)。利用字体的空间关系,利用FDSC进行空间变形,有效地保证了生成的字符具有完整的结构。
为了区分不同风格,用多任务判别器去训练模型,其保证了每种风格被独立判别。此外还引入另外两个重建损失去约束生成图片跟内容图片间的域不变特征。
Feature Deformation Skip Connection
图3 两种字体间的几何形变,每个笔画都有对应
FDSC根据引导码(guidance code)预测偏移去指导可变形卷积层对低维特征进行几何形变,如图2所示,FDSC的输入由两部分构成:来自内容图片的\(K_c\)跟mixer里提取的\(K_s\),这个\(K_s\)是风格编码\(Z_s\)注入后才得到的,然后输出又注入回mixer,因此图中FDSC右侧有个往返箭头。该模块估计的采样参数如下:
这里\(f_\theta\)表示卷积层,\(\Theta = \{\Delta p_{k}, \Delta m_{k} | k=1, \ldots,|\mathcal{R}|\}\)是卷积核的偏移跟mask,其中\({\mathcal R}=\{(-1,-1),(-1,0),\ldots,(0,1),(1,1)\}\)是3x3核的常规网格(regular grid)。
基于可变形卷积\(f_{D C}(\cdot)\)就能获得变形后的特征图:
具体来说对于\(K_{c}^{'}\)里的每个位置p,可如下应用可变形卷积:
其中 \(w(p_{k})\) 表示可变形卷积核在第k个位置的权重,该卷积在非常规的位置\(p_{k}+\Delta p_{k}\)进行,同时\(\Delta p_{k}\)可能是分数。根据前人经验,该操作通过双线性插值(bilinear interpolation)实现。最终FDSC输出喂回mixer,然后 \(K_{c}^{'}\) 像常用的跳跃连接一般跟\(K_s\)拼接(concatenate)。
总之公式3看起来就是公式2的详细版,进行了个可变形卷积操作,偏移的参数来自公式1的计算,因此输出应该是提取的特征。
字形图片中有许多相同颜色的区域,比如背景色跟字的颜色,使用可变形卷积可以把相同颜色的区域关联现在一起。由于难以优化非唯一解(non-unique solution),因此给偏移\(\Delta p\)施加约束,,就是加了个损失项,细节在下一小节中。
众所周知,低维特征比高维的含有更多的空间信息,因此选择哪个级别的特征进行转换就很关键。本文用的是前两层卷积的输出作为FDSC输入,附录B分析了不同FDSC模块数的模型性能。
Loss Function
Adversarial loss 经典对抗损失
Content consistent loss 对抗损失使模型生成的图片真实,但忽略了内容准确度。为了预防模式坍塌,并相同内容提取的特征内容一致,就是让内容图跟生成的图片用内容编码器提取的特征图一致:
Image Reconstruction loss 重建损失,保持域不变的特征(如内容),就是风格内容都用同一张图片的,试着重新生成该图片:
Deformation offset normalization 给可变形卷积的偏移施加限制,因为同一个字即便风格不同,对应笔画所需的形变不会太多:
其中\(\Delta p\)是偏移,\(|\mathcal{R}|\)是卷积核的数量,看起来就是希望偏移尽可能小
Overall Objective loss 所有\(\lambda\)都是超参数,生成器最小化损失,判别器最大化
实验
稍微介绍了下用于比较的模型,提到一个没见过的GANimorph,它跟CycleGAN一样采用循环图片转换框架,判别器使用空洞卷积使得生成器更加上下文感知(context-aware),其他都很常见,而且也比较经典(古早),略。
宋体作为源字体。EMD, TUNIT用400个字体训练,而Cycle-GAN 跟 GANimorph一次只能训练两个字体的转换,因此训练了399个Cycle-GAN,每次学习宋体到另一种字体的转换。作者实验发现用400种字体训练的Zi2zi比单独用两种字体训练更差,因此也训练了399个模型。
别的不说至少DG-Font严谨认真,训399个模型也不容易,StrokeGAN过于离谱。
数据集
搜集了410个字体,包括手写跟印刷体,每个字体990个常用汉字,图片分辨率为80x80。随机划分训练集、测试集,训练集有400字体,每种字体随机挑选800字。测试集由两部分组成,一个是那400个字体剩下的190个字,另一部分用于测试泛化能力的剩余10种字体。
指标
L1 loss, RMSE, SSIM, LPIPS, FID
实验结果
图1 无监督字体生成结果。左边的参考是书法家写的唐诗,右侧的模仿结果是模型生成的另一首唐诗,细节丰富,如笔锋、连笔跟笔画粗细
表1 整个数据集上的定量评估
图4 与SOTA的比较
Quantitative comparison. 表1看定量结果,在像素级评估指标上,如L1 loss, RMSE, SSIM,DG-Font能取得有竞争力的结果。说这些指标注重像素级别的比较,忽视了更接近人类感官的特征相似度。在感知级指标FID、LPIPS上DG-Font就能取得SOTA
Qualitative comparison. 为了验证对源字符模式(笔画、skeleton)变形、转换的能力,图4展示了两组可视化对比。图4a是简单字体的对比,跟印刷体接近且没有牵丝连带(cursive writing),图4b的字体比较难,有丰富的细节跟连笔。作者说DG-Font效果好,而且学到了连笔技巧,但事实上跟target比有明显差距,况且图4b的字体也不难,至于连笔更像是学到了部分笔画的弯折效果,这些所谓的连笔跟其他部分是脱节的,不存在衔接。
Ablation Study
图5 方法中不同组件的影响 a内容编码器前三层普通卷积换成可变形卷积 b加入FDSC-1模块(没有normalization,公式7那个) c给 FDSC-1模块施加normalization d加入FDSC-2(完整模型)
表2 跟U-Net的skip-connection(SC)比较,将DG-Font的两个FDSC换成了SC 再跟 DG-Font比较
在187个手写体上进行实验,将DG-Font的可变形卷积换成常规卷积再去掉FDSC就是这里的baseline,比较看图5。
后面是每个消融部分的说明讲解,总之验证了它们的有效性。图5c加了偏移标准化,生成图片跟目标更加接近,不太理解的是这个标准化限制了偏移不能太大,生成结果应该更接近原图才对,为啥会接近目标图片?
此外还把FDSC跟U-Net的skip-connection比较。skip-connection常用于编码器解码器之间转移不同分辨率的特征图,这对于语义分割、照片艺术化(photo-to-art)很有效,它们输入输出的内容具有相同结构。然而字体生成是需要几何形变的,比较见表2。
Visualization
图6 特征可视化 可视化FDSC-1模块的$K'_{c}$。特征图中越白越亮的说明激活值越大
图7 可视化学到的偏移。源图跟生成图片分别用蓝色跟绿色表示。
通过可视化FDSC-1模块的特征图来展示该模块的有效性。如图6,特征图\(K'_{c}\)很好的维持了字符的模式,有助于生成结果结构完整。另一方面看到FDSC有效地转换了内容编码器抽出的特征(特征图跟内容字有较大差别)。
此外可视化了学到的偏移,使用光流跟字符流(optical flow and character flow)两种形式。为了清晰地可视化偏移,FDSC里的可变形卷积核设定为1x1。如图7所示,学到的偏移主要影响字符区域,背景的偏移值趋近于0(第二列光流部分仅字符区域有光亮色彩,第三列箭头指示笔画方向),证明公式7偏移损失的有效性。
对于字符流(第三列),可以看到大多数偏移矢量从目标字符的笔画指向相应的源笔画。结果显示卷积过程中,目标字符的采样位置倾向于偏移到源字符相应的位置,(是说给定目标风格,懂得在源图相应笔画处去提取特征?)
总结
提出一种有效的无监督字体生成模型,无需配对数据,可以泛化到未知字体。为了生成字符的集成(integration),提出FDSC。此外还应用内容编码器的可变形卷积层去学风格不变特征。做了大量实验证明模型有效。
评价
性能其实挺一般的,毕竟是无监督,而且只用了可变形卷积这一个点。但idea较有新意,可视化也蛮好,而且代码开源,若结合上其他trick应该还有提升空间
待解明
- 3.2. Feature Deformation Skip Connection: Compelled this observation