首页 > 其他分享 >[论文阅读] Neural Transformation Fields for Arbitrary-Styled Font Generation

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

时间:2023-08-07 16:56:44浏览次数:39  
标签:风格 Neural Generation Fields 像素 字体 theta omega NTF

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

关键词: NeRF, neural transformation field, 晦涩
阅读理由:CVPR 2023, 中国科学院深圳先进技术研究院

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:https://zhuanlan.zhihu.com/p/390848839

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

Method(Model)

Overview

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). \]

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

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

这就是NTF的字体渲染公式,\(T(\omega)\) 表示沿路径(\(\omega \rightarrow \theta\))的累计转变,表示为:

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

基于公式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}, \]

而 \(T_i\) 为:

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

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

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生成字体图片。两种不同的结果好像就是一个把风格特征压成向量,另一个还留有空间结构,以及跟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} \]

NTF for Localized Style Representation: 此时预测的\(\theta\)跟\(F_c\)尺寸一样,直接拼接,无需AdaIN

Optimization Process

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

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

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*} \]

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}, \]

Experiment

Training Detail

图片尺寸H=W=128,推理阶段需要8张风格参考图片

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上的性能比较

可以看到表3是本文模型效果最好,可惜的是没有跟CG-GAN进行对比,比较有意思的是这里 FsFont > DG-Font,现在看来也就只有隔壁那个CF-Font的结论是反过来的,很难不怀疑它有精心的cherry-picking。

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

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

Conclusion

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

Critique

写作不行,内容编排有问题,概念先出现再引入介绍,看着难受,而且一句话到处反复一遍遍无休无止地讲,搁这水字数呢。虽然不是很清楚NeRF,但感觉本文在把一件简单的事情复杂化。兜圈子到最后总结都还是没看明白,也可能是对NeRF的前置知识要求较高。

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

Unknown

  • I表示生成的目标字吗?
  • 怎么生成目标字的还是没懂
  • 为啥中间要采样一系列点?
  • 找不到附录啊?

标签:风格,Neural,Generation,Fields,像素,字体,theta,omega,NTF
From: https://www.cnblogs.com/Stareven233/p/17565173.html

相关文章

  • NNs(Neural Networks,神经网络)和Polynomial Regression(多项式回归)等价性之思考,以及深度
    NNs(NeuralNetworks,神经网络)和PolynomialRegression(多项式回归)等价性之思考,以及深度模型可解释性原理研究与案例1.MainPoint0x1:行文框架第二章:我们会分别介绍NNs神经网络和PR多项式回归各自的定义和应用场景。第三章:讨论NNs和PR在数学公式上的等价性,NNs......
  • Neural Network 初学
    参数:机器学习的内容超参数:人手动设置的数值,比如学习率、训练轮数MLP在inputlayer和outputlayer之间有一堆hiddenlayer,每两层之间可以理解成一张完全二分图,二分图的邻接矩阵上有一些权重,随机初始化。将图片的每个像素点抽出来变成向量之后在二分图上矩阵乘法得到第一层......
  • 机器翻译 | Improving Neural Machine Translation Robustness via Data Augmentation
    论文地址:https://arxiv.org/abs/1910.03009动机神经机器翻译(NMT)模型在翻译干净文本时已被证明是强大的,但它们对输入中的噪声非常敏感。改进NMT模型的鲁棒性可以看作是对噪声的“域”适应的一种形式。最先进的方法严重依赖于大量的反向翻译数据。最近创建的基于噪声文本的机......
  • Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
    目录概符号说明RAGRetriever:DPRGenerator:BARTLewisP.andPerezE.,etal.Retrieval-augmentedgenerationforknowledge-intensivenlptasks.NIPS,2020.概RAG:赋予模型检索的能力.符号说明\(\bm{x}\),输入序列;\(\bm{y}\),输出序列,长度为\(N\);RAG......
  • 机器翻译 | Improving Neural Machine Translation Robustness via Data Augmentation
    摘要神经机器翻译(NMT)模型在翻译干净文本时已被证明是强大的,但它们对输入中的噪声非常敏感。改进NMT模型的鲁棒性可以看作是对噪声的“域”适应的一种形式。最近创建的基于噪声文本的机器翻译任务语料库为一些语言对提供了噪声清洁的并行数据,但这些数据在大小和多样性方面非常有......
  • Elasticsearch:使用 runtime fields 探索你的数据
    Elasticsearch考虑要提取字段的大量日志数据。为数据建立索引非常耗时,并且会占用大量磁盘空间,而你只想探索数据结构而无需预先提交schema。你知道你的日志数据包含你要提取的特定字段。在这种情况下,我们要关注@timestamp和消息字段。通过使用运行时字段(runtimefields),你可以......
  • element 新增修改公用一个弹窗,表单resetFields不生效
    编辑时表单赋值使用 this.$nextTick即可this.$nextTick(()=>{this.formData={id:row.id,taskCode:row.taskCode,fullName:row.fullName,priority:row.priority,taskType:row.taskType,robotId:row.robotId,starTtime......
  • CoDi: Any-to-Any Generation via Composable Diffusion
    我们介绍了一种名为可组合扩散(CoDi)的新型生成模型,能够从任意输入模态的任意组合中生成任意组合的输出模态,例如语言、图像、视频或音频。与现有的生成人工智能系统不同,CoDi能够同时生成多个模态,并且其输入不限于文本或图像等子集模态。尽管许多模态组合缺乏训练数据集,我们提出......
  • Exploiting Noise as a Resource for Computation and Learning in Spiking Neural Ne
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!https://arxiv.org/abs/2305.16044 Summary Keywords Introduction  ResultsNoisyspikingneuralnetworkandnoise-drivenlearning NSNNleadstohigh-performancespikingneuralmodels NSNN......
  • argocd + kustomize 报错“rpc error: code = Unknown desc = Manifest generation er
    argocd+kustomize报错“rpcerror:code=Unknowndesc=Manifestgenerationerror(cached)” 报错内容报错内容为:rpcerror:code=Unknowndesc=Manifestgenerationerror(cached):`kustomizebuild.xiaowangTech/4.0/frontend/dingding-pc/manifests/overla......