[论文阅读] Neural Transformation Fields for Arbitrary-Styled Font Generation

Pre

title: Neural Transformation Fields for Arbitrary-Styled Font Generation
accepted: CVPR 2023
paper: https://openaccess.thecvf.com/content/CVPR2023/html/Fu_Neural_Transformation_Fields_for_Arbitrary-Styled_Font_Generation_CVPR_2023_paper.html
code: https://github.com/fubinfb/ntf
ref: https://zhuanlan.zhihu.com/p/390848839
ref: https://www.cnblogs.com/Stareven233/p/17914246.html

关键词: NeRF, neural transformation field
阅读理由:NeRF相关较为新颖, 中国科学院深圳先进技术研究院
修订:2023-12-23 11:29:55

Idea

把NeRF用于做字体生成,使用结构嵌入控制表示的汉字,将不同角度的观察表示为同一汉字的不同风格,推理时根据风格参考估计风格所在位置,然后根据位置取出目标汉字。

Motivation&Solution

图1 本文动机 (a) 字体风格间的差异主要来自形状变化和源字体的转变?,例如笔画粗细以及字形书写模式(writing pattern of glyphs) (b) 将字体生成视为源字体到目标字体的连续转变过程,涉及源图片字体像素的生成和消散

  1. 大多数方法通过寻找更强的风格表示方法来提高生成能力,而缺乏建模转换风格时的空间变换(spatial transformation) —— 将字体生成建模为连续转换过程(continuous transformation process)

Background

认为基于风格表示能将方法分类两类:

  1. 早期的,风格是全局且静态的
  2. 近来的,风格更细粒度,如组件级

图2 (a). NeRF的方法。 (b). 将字体生成期望的转换嵌入到 neural transformation field,风格估计器 E_\theta 预测每个字体风格的位置 \theta,字体生成就能看成字体像素从原始点到该位置的转变过程 (c). 因为每个 NeRF 只对应一个特定场景(每个字得单独构建一个?),不适合FFG任务。通过引入结构嵌入将NTF用于建模所有字符的转变。 (d). 最终考虑字体风格的局部特征,进一步把NTF用于局部风格表示(localized style representation)

受 Neural Radiance Field (NeRF) 在3D视角合成上进展的启发,将空间转换嵌入到 neural transformation field。如图2,NeRF构建神经辐射场,将特定的3D场景表示为5D函数,输入是三维空间点的坐标和视角方向/观察角度,而输出是RGB颜色以及volume density(不透明度?)。该函数用MLP近似,场景信息通过优化过程嵌入到参数里。为了生成新的视角,每个像素的颜色根据穿过场景的彩色光线通过 volume rendering 技术绘制(?)。

由上面的方法启发,并不直接预测像素级别的形变偏移,而是引入像素的 creation intensity \(\varphi\) 和 dissipation rate \(\tau\),将这种形变嵌入到NTF里。

如图2c,NTF的每个位置都代表一个特定的结构相关的转变,每个与期望的转变有关的字体风格都有一个特定的位置,用以在NTF里生成字体图片,使用estimator估计位置。图2d引入了局部风格表示。

不懂NeRF,看着好像是说图2a用一个物体很多视角的图片去训练模型,然后就可以产生各种不同的新视角图片,而图2b根据这一灵感,用同一个字不同风格的图片去训练模型,辅以一个估计位置的estimator,这样每种风格有个固定的位置,根据位置就能取出想要的风格的字体?

Method(Model)

Representing Font Generation as the Transformation Process of Font Pixels in NTF

继续上面图2c的推论,源字体定义为原始点,从原始点到目标点 \(\theta\) 代表一系列期望的转变,最终的字体图片可以表达为这种转变(像素的产生和消散)的累加,而该过程在本文定义为字体渲染过程。

图2c中NTF的输入是3D位置 \(\theta\) 和源汉字的结构嵌入 \(F_c\) ,输出则是该位置的 creation intensity \(\varphi\) 和 dissipation rate \(\tau\)。风格estimator \(E_\theta\) 是CNN,整个NTF函数也用CNN \(F_\Theta\) 近似:

\[(\varphi,\tau)=F_\Theta(\theta|F_{c}) \tag{1} \]

Font Rendering with Neural Transformation Field

不同字体风格的转变可以划分为两类:字体像素生成和消散过程。\(\varphi\) 代表非字体像素变为字体像素,或字体像素增强了密度;反之 \(\tau\) 表示字体像素在位置 \(\omega\) 的密度减弱。位置 \(\omega\) 的密度可表示为:

\[{\frac{d I(\omega)}{d\omega}}=\varphi(\omega)\tau(\omega)-\tau(\omega)I(\omega). \tag{2} \]

第一项表示生成过程,而第二项代表像素的消散过程(?)该微分方程有解:

\[I(\theta)=\int_{0}^{\theta}\varphi(\omega)\tau(\omega)T(\omega)d\omega. \tag{3} \]

这就是NTF的字体渲染公式,虽然没说明,但\(I(\theta)\)应该就是目标字形图片,而\(I(0)\)应该就是内容字体风格的字形,\(0 \rightarrow \theta\)表示内容字体到目标字体风格的转变。而 \(T(\omega)\) 表示沿路径(\(\omega \rightarrow \theta\))的累计转变,表示为:

\[T(\omega)=\exp\left(-\int_{\omega}^{\theta}\tau(x)d x\right). \tag{4} \]

基于公式3,生成风格化图片需要估计积分,因此需要将其离散化来近似。从源点到未知 \(\theta\) 的间隔进行N等分,每个段i在位置 \(\theta_i = \frac{i}{N} \theta\) 取一个样本,这样公式3的积分就可以近似为:

\[I=\sum_{i=1}^{N}T_{i}\left(1-\exp\left(-\tau_{i}\xi\right)\right)\varphi_{i}, \tag{5} \]

\(T_i\) 为:

\[T_{i}=\exp\left(-\sum_{j=i+1}^{N}\tau_{i}\xi\right), \tag{6} \]

其中 \(\xi\) 是每个段i的长度,\(\xi = \frac{\theta}{N}\)

综合后面的内容推断,NeRF用来建模 \(\varphi, \tau\) 这俩函数,而根据公式,\(I(\theta)\)是积分的结果,需要离散化变成几个中间结果的和,因此需要等距采样一系列\(\theta_i\),各自通过网络得到 \(\varphi_i, \tau_i\) 然后带入公式5得到最终的字形图片。

Overall Framework

图3 所提模型的整体框架,包含...(模块),遵循之前的方法,使用一个多头投影判别器,但没画出来。

根据源图片I_c得到结构嵌入\(F_c\),根据风格参考估计3D位置\(\theta\),生成0到\(\theta\)路径的N个采样点 \(\theta_1,\ldots, \theta_N\),将每个采样路径与 \(F_c\) 结合(图3右边两种结合方法)作为NTF的输入。根据公式1可知当前结果不依赖于上一步的输出,因此可以并行计算不同位置。

最终得到所有采样位置\(\theta_i\)\(\varphi,\; \omega\),利用公式5生成字体图片。两种不同的结构好像就是一个把风格特征压成向量(图3b),另一个还留有空间结构(图3c),以及跟\(F_c\)的结合方式不同?直观来看其实跟以往的方法大同小异,都是内容风格解耦,然后二者融合来生成目标字形

NTF for Universal Style Representation: 利用AdaIN在NTF的中间层融合两个特征

\[F_{o u t,m}=\gamma_{m}\left({\frac{F_{i n,m}-\mu(F_{i n,m})}{\sigma(F_{i n,m})}}\right)+\beta_{m} \tag{7} \]

有了等距采样的\(\theta_i\),就按照图3b的方式去得到\(\gamma,\beta\),然后根据公式7用AdaIN将信息注入特征图里,最终得到\(\varphi,\tau\),提取的是全局风格信息。

NTF for Localized Style Representation: 此时预测的\(\theta\)\(F_c\)尺寸一样,直接拼接,无需AdaIN,也是得到\(\varphi,\tau\),提取的是局部风格信息。

Optimization Process

Reconstruction loss: 使用L1损失,约束生成图片跟gt以及重建源图片:

\[L_{r e c}=E\left[||y-\tilde{y}||_{1}+||I_{c}-\tilde{y}_{0}||_{1}\right]. \tag{8} \]

Adversarial loss: 对抗损失,\(\hat{y}\)试生产的图片,c,s是相应的内容和风格标签

\[\begin{align*} {\cal L}_{a d v}^D = &-E_{(y,s,c)\sim p_{data}} max\left(0, -1+D_{s,c}(y)\right) \\ &-E_{(\hat{y},s,c)\sim p_{data}} max\left(0, -1+D_{s,c}(\hat{y})\right) \\ L_{a d v}^G = &-E_{(\hat{y},s,c)\sim p_{gen}} D_{s,c}(\hat{y}) \end{align*} \tag{9} \]

Overall objective loss: 实验中\(\lambda_{a d v}=1.0,\; \lambda_{r e c}=0.1\)

\[\min_{G}\max_{D}\lambda_{a d v}(L_{a d v}^{D}+L_{a d v}^{G})+\lambda_{r e c}L_{r e c}, \tag{10} \]

Experiment

Training Detail

图片尺寸H=W=128,推理阶段需要8张风格参考图片。训练 800k iterations,单张3090

Dataset

403个字体,其中353个做训练,剩余50个测试;随机采样800个用以优化模型,另214个汉字取作测试集(Unseen Fonts Unseen Contents (UFUC) testing set,),800字里再抽200个做 Unseen Fonts Seen Contents (UFSC)

Ablation Study

Ablation Study on Style Representations

表1 两种风格表征的消融研究(不是单纯的对比实验?),标粗的是最好的。

公式5里的N取15,NTF-Loc更好,后面的实验也用它来

The Number of Sampling Points for Font Rendering

表2 采样点数量的消融研究

图4 对应表2的可视化结果,框出的是异常像素或结构

base是传统的字体生成过程(诶不是NTF在N=1的情况吗),采样点要多,但也不能太多,否则会受到字体渲染过程中噪声积累的影响(公式3的积分)

图5 沿积分路径从原点到估计的位置的中间渲染过程可视化

如图5所示,生成的字体图片逐渐从原风格转变为目标风格,源图片中不相关的像素会消散,目标图片需要的像素会产生,观察生成过程,首先产生字体骨架,然后增加细节,汉字结构逐渐变得平滑与完整

Comparison with the Stateoftheart Methods

用于比较的一些模型都是作者自己的数据集从头训练,并且在推理阶段用的参考图片也是一样的

表3 FFG上的性能比较

UFSC上SSIM结果也没FsFont高啊,怎么就标粗了?不过表3还是本文模型效果最好,附录中跟CG-GAN对比了one-shot场景,比较有意思的是这里 FsFont > DG-Font,现在看来也就只有隔壁那个CF-Font的结论是反过来的,很难不怀疑它有精心的cherry-picking。

图6 NTF-Loc 与其他SOTA在自己数据集上的可视化比较

图6的实验用的UFUC,也就是完全没见过的数据,看起来NTF-Loc效果很好,亮眼的是能把连笔也学到。其他结果见附录。

supplemental

link: https://openaccess.thecvf.com/content/CVPR2023/supplemental/Fu_Neural_Transformation_Fields_CVPR_2023_supplemental.pdf

img
附录表2 推理时长(FPS)、参数量(\(N_p\)),和计算复杂性(MACs)的定量比较

img
附录图2 字体转换过程中创建和消散的可视化结果。中间那几列是转换的中间结果(类似于插值?)

img
附录图5 花哨字体的可视化结果

NTF有几点不足:

  1. 如表2所示,增加采样点数量会导致计算复杂性和推理时间的增加(原文是“inference running time will decrease”),但作者说本文也不用那么多点,还是能算实时生成
  2. 由于参考样本数量少且没有覆盖所有笔画,少样本字体生成很困难,一些局部细节不完美,而且如图5那种太花哨的字体会丢失装饰和局部细节。

Conclusion

构建了NTF,其中每个位置表示一个特定结构相关的转换,从源点(内容图提取的)到该位置(风格图提取的)对应源字体到目标字体的转换过程。然后用了风格估计器(style estimator)来估计参考图片字体风格的位置,结构编码器则用于抽取源图片的结构信息。有了估计的位置,就可以采样一系列点去计算中间转变,把中间结果累积起来就能产生最终字体图片。

Critique

写作不行,内容编排有问题,概念先出现再引入介绍,看着难受,而且一句话到处反复一遍遍无休无止地讲,搁这水字数呢。虽然不是很清楚NeRF,但感觉本文在把一件简单的事情复杂化。要求读者有NeRF的前置知识,在论文并无介绍。

总体感觉是方法新奇了一些,没有其他创新点,结果还行,但至少分辨率比今年其他俩CVPR都大。

posted @ 2023-08-07 16:47  NoNoe  阅读(203)  评论(0编辑  收藏  举报