📂read
🔖GAN
2022-12-25 18:03阅读: 587评论: 0推荐: 0

[论文阅读] SE-GAN Skeleton Enhanced GAN-based Model for Brush Handwriting Font Generation

pre

title: SE-GAN: Skeleton Enhanced GAN-based Model for Brush Handwriting Font Generation
accepted: ICME 2022
paper: https://arxiv.org/abs/2204.10484
code: none

亮点:毛笔、书法、skeleton

针对问题

毛笔手写体字体(brush handwriting font)生成

核心思想

简单来说就是通过抽取、生成skeleton,并将其加入损失项来提高模型性能。

具体点,从训练图片X根据非神经网络方法抽取骨架(skeleton),再分别用编码器抽取相应特征,设计一个自关注的精炼注意力模块(self-attentive refined attention module, SAttRAM),融合原图特征跟skeleton特征进而生成字形Y,同时还有个预训练好的SkeletonGAN根据Y生成对应skeleton并拿去跟最初抽取的那个计算损失

相关研究

中国书法(chirography)的风格可以被定义为skeleton结构跟笔画风格。骨架包含字符的基础信息,如笔画的组合跟位置,书写方向等等。而笔画风格代表骨架形变,如粗细、形状、书写力度(writing strength)等。

大部分字体生成研究者都着眼于标准打印字体合成(Standard Print Font Generation (SPFG)),对于毛笔手写体生成(Brush Handwriting Font Generation (BHFG))研究比较少。

图1 SPFG跟BHFG图解

如图1所示,BHFG难多了。skeleton持有的结构信息对于识别某个字很重要,使得即便风格不同也能认出字来,但大部分SPFG方法都忽视了skeleton的重要性。

Image-to-Image Translation

介绍Pix2pix, CycleGAN,StarGAN。U-GAT-IT验证了注意力模块在image translation任务上的有效性,引导模型更注重于不同域之间更重要的区域。这种用于逐像素转换的,只适合源图跟目标图形变部分很少,无法直接应用于字体生成任务。

Chinese Font Generation

大部分之前的工作都把字符图片生成当做image translation任务。介绍了Zi2zi跟其他几个只标注了论文序号没有名字的模型,而且比较早。

总之介绍了该领域模型的发展,从使用配对数据到非配对,然后加入循环一致性损失,分离分离内容跟风格。还有一些做多风格字体生成、多阶段(multi-stage)模型。

说大部分工作的源/目标风格或形状都非常相似,都集中在处理SPFG问题。

贡献

  1. 为BHFG提出新的端到端SE-GAN,设计自关注的精炼注意力模块(self-attentive refined attention module, SAttRAM)去抽取并融合来自源图片跟skeleton图片的特征
  2. 在六种字体上做了大量实验,验证了SE-GAN相对于强baseline的有效性(作者讲的)
  3. 开源了个大规模字体图片数据集

方法(模型)流程

Overview

作者为BHFG提出了一种新的端到端 Skeleton Enhanced Generative Adversarial Network (记为 SE-GAN),可以处理不同风格中巨大的几何差异。

图2 SE-GAN架构,包括转换网络,两个判别器跟一个辅助skeletonGAN网络

图2展示了带两个编码器的框架:图片编码器\(E_i\)跟skeleton编码器\(E_s\),都由4个残差块组成(图中一开始的渐变橙黄色等腰梯形)。

SRAM, CRAM是SAttRAM的两个变体,顺序堆叠来抽取skeleton增强的(skeleton enhanced)图片表达。

生成器(应该指的是黄色的解码器)接收精炼的图片表达,生成目标风格图片。

上方的第一个判别器\(D_i\)用于判断生成图片跟目标图片(经典款),下方的\(D_s\)判断生成图片的skeleton跟目标图片的skeleton是否一致。

skeleton抽取算法来自论文《A Fast Parallel Algorithm for Thinning Digital Patterns》 (IPCV, Image Processing and Computer Vision, 1984),即Zhang-Suen细化算法 / 张-孙细化算法。

通过对二值字符图片迭代进行腐蚀(erode)和膨胀(dilate),简单有效地抽取出skeleton

Self-attentive Refined Attention Module

CAM在图片生成跟分类任务中,局部化输入图片的重要区域很有效,作者用于抽取字体生成任务中风格明确(style-discriminative)的注意力热力图。

为了获得风格明确的特征\(M(x)\),将源字体x解码的特征图\(F(x)\)喂入分类器做域的分类,分类器是一个带权重\(\Omega\)的全连接层。对所有通道计算线性加权和能得到CAM的注意力热力图:

\[M(x)=\sum_{c=k}^{C}\Omega_{k}F(x)_{k} \tag{1} \]

其中\(\Omega_{k}\)表示最后一个卷积层特征图中的第k个通道的权重。

但CAM缺少空间注意力,而且对于特征捕获会有过度We design two discriminators for learning target font s激活的问题(over-activation issues)。而且很难用一个CAM模块融合多模态特征。

图3 SAttRAM,两个变体的输入不同

因此提出了图3中的SAttRAM,将自注意力用作一种有效的模块,通过捕捉空间依赖来精炼(refine)逐像素的注意力热力图,精炼后的特征图如下:

\[\hat{M}(x)=f(F(x),F(x))g(M(x))+M(x) \tag{2} \]

\[f(F(x),F(x))=\sigma(\theta(F(x))^{T})\phi(F(x))) \tag{3} \]

f是一种成对的嵌入函数,计算特征空间中点积像素亲和度(affinity)作为自精炼(self-refined)注意力权重,最后通过softmax函数\(\sigma\)归一化。

总之公式3大概指的是图3左上角那两个1x1 conv,最终得到一个特征图

函数g将特征进行reshape,再根据f函数给出的相似度权重重新汇聚。图3中左下角的分支应该是先根据公式1计算M(x),再根据公式2计算出最终的\(\hat{M}(x)\)

俩变体self-refined attention module (SRAM) 和 the cross-refined attention module (CRAM),似乎对应了自注意力跟跨注意力,作者说是为了处理多模态输入特征。

SRAM捕捉输入图片的信息,CRAM捕捉模态间的交互,也就是输入图片特征\(x_i\)跟skeleton特征\(x_s\)之间的,可以进一步精炼特征图:

\[\hat{M}(x_{i},x_{s}))=f(F(x_{i}),F(x_{s}))g(M(x_{i}))+M(x_{i}) \tag{4} \]

公式4里字符编码特征被函数g嵌入残差空间,f代表\(x_i,\; x_s\)之间的像素级特征汇聚
通过CRAM将skeleton特征跟原图片特征混合在一起,但怎么知道要把风格变成什么样?(后面一看好像目标风格是固定的,想要其他风格得重新训练)

Discriminators

设计了两个判别器学习目标字体风格,Overview提到的那两个\(D_i,\; D_s\)。由于骨骼化(skeletonization)是不可微的,于是用预训练的skeleton-GAN来生成字符图片的相应skeleton。

这块利用额外的GAN根据字形图片(\(Real Y_t,\; Fake Y\))生成skeleton,判断主生成器生成的Fake Y的skeleton是否正确。整个流程skeleton从抽取、注入,再生成并用于约束生成结果,感觉是通过专门处理skeleton来告诉模型注意字形的内容跟结构。

作者提及skeletonGAN就是一个CycleGAN,没使用SAttRAM,因为骨骼化比生成字形简单。

同时\(D_s\)也能防止SE-GAN过拟合。

Loss Design

内容损失包含两部分:像素损失\(L_{pix}\),迫使生成的图片\(G_F(X_i, X_s)\)相似于目标图片\(Y_t\),以及骨架一致性损失\(L_{sc}\),确保骨架一致性,下面SG是预训练的skeletonGAN:

\[L_{p i x}( G_{F}) = \mathbb{E}_{X} [|| G_{F}( X_{i}, X_{s}) - Y_{t} | |_1] \tag{5} \]

\[L_{s c}(G_{F},S G)=\mathbb{E}_{X}[||S G(G_{F}(X_{i},X_{s}))-S G(Y_{t})||_{1}] \tag{6} \]

循环一致性损失\(L_{cycle}\)就是CycleGAN论文的原始版本。

然后为了区分图片\(X_i\)属于源/目标风格\(y_{cls}\)并促进精炼注意力模块的风格转换,引入U-GAT-IT里的CAM loss,这里叫作\(L_{adv}\)

对抗损失\(L_{adv}\)自然也是分成字形\(D_{i}\)跟骨架\(D_{s}\)两部分:

\[L_{D_{i}}(G_{F},D_{i})=\mathbb{E}_{Y}[l o g D_{i}(G_{F}(X_{i},X_{s}))] \\ +\mathbb{E}_{X}\,\lbrack{l o g}(1-D_{i}(G_{F}(X_{i},X_{s})))\rbrack \tag{7} \]

\[L_{D_{s}}(G_{F},D_{s})=\mathbb{E}_{Y}[l o g D_{s}(Y_{s})] \\ +\ \mathbb{E}_{X}[l o g(1-D_{s}(SG(c_{F}(X_{i},X_{s}))))] \tag{8} \]

最终这些损失根据\(\lambda_i\)加权成完整的目标函数:

\[\min_{G_F,G_B,RAM_p} \max_{D_1,D_2} \lambda_{1}L_{a d v}+\lambda_{2}L_{c y c l e}+\lambda_{3}L_{c l s}+\lambda_{4}L_{c o n} \]

实验

数据集

提出了个大规模的毛笔手写字体图片数据集,六种字体,15,799张高分辨率图片。每个子集的尺寸从1,419到3,958。

实验中按照8:1:1比例将每个子集分为train/dev/test集。源域选择标准打印字体Liukai,分别将六种字体作为目标域(这样岂不是要训练六次?,无法自由地更换转换目标啊)

指标

内容准确度Acc跟Frechet Inception Distance (FID)

表1 字体图片生成上的评估 Acc表示字符识别的内容准确率(DF-Font标错了,应该是DG-Font)

实验结果

表2 数据集中六种字体的统计数据

跟四个有代表性的生成模型对比,zi2zi, CycleGAN, StarGAN, 和 DGFont,见表1。
得分其实不算很突出,比较毛笔字还是很难模拟的,对比的baseline并不算强,前两个是很早的东西,StarGAN并非专用于字体生成,DG-Font也更突出可变形卷积的使用,在自己的论文中得分也不算高。

统计数据见表2(文章里讲的是看表1)

Quantitative analysis.
下面吹嘘了一番自己的模型。甚至DG-Font一直拼成DF-Font(本文后续均进行改正),说它内容准确度高,因为生成结果变化不大,跟输入很像,因此FID也比较低。

图4 不同baseline跟SE-GAN生产的样本比较

Qualitative analysis.
看图4,SE-GAN的样本更好辨认,书法风格更加一致。然后挑了些其他baseline的错误,但总觉得这SE-GAN也就略好一些,还是有很重的原图气息,虽说懂得加上一些连笔。

Ablation Study.
去掉了skeleton输入、skeleton判别器,见表1。去掉这俩准确度有所下降,证明skeleton有用。同时去掉后还能超越CycleGAN,说明SAttRAM有用。

图5 (a)消融模型生成的样本 (b)不同注意力模块的可视化

如图5(a)所示,缺少skeleton会导致笔画残缺或过分夸大,去掉\(D_s\)一些组件就会混在一起

看图5(b),SRAM 和 CRAM 比 CAM 更少出现过激活(over-activations),同时覆盖范围更完整。CRAM学到的字体形状比SRAM更加准确,验证了skeleton的作用

表3 不同模型的用户调查结果

User Study.
两种用户调查,跳过DG-Font因为它在表1中表现不好(但感觉还是比zi2zi强吧,甚至觉得是放进去会在用户调查中超越SE-GAN)。叫了60个3年书法经验的美术生参加,表3可以看到本文的模型最好

表3两行分别是那两个实验:用户偏好分数、跟人书写的样本混在一起让受试者挑选好看的(应该是被选中的几率)

总结

提出了毛笔字生成的SE-GAN,加入了skeleton信息,设计两个编码器、新的自注意力模块,还有skeleton判别器。实验表明模型超越了几个强baseline(尬吹,那几个哪能算得上强啊),然后说将来计划探索预训练image tranlation模型的使用(这不早就被人做光了吗,从zi2zi的pix2pix到最近的FUNIT,感觉终归不如专为字体生成任务设计的模型,还是说继续探索替换的是skeletonGAN?也说不通吧,明明说不需要太复杂的)

评价

其实感觉挺水的,看着skeleton点进来的,没有想象中的效果,效果可能不如FontRL,文章倒是挺清晰,有一些细节错误

将skeleton加入自己的模型中加强对连笔的学习

待解明

SAttRAM模块看着跟自注意力真挺像,为什么不能直接用呢?

本文作者:心有所向,日复一日,必有精进

本文链接:https://www.cnblogs.com/Stareven233/p/16979438.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   NoNoe  阅读(587)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 Relaxロウきゅーぶ 渡辺剛
  2. 2 カントリーマーチ 栗コーダーカルテット
  3. 3 BGM-M7 かみむら周平
  4. 4 八百万の風が吹く Foxtail-Grass Studio
  5. 5 雲流れ Foxtail-Grass Studio
  6. 6 Melody 梶浦由記
  7. 7 ロック风アレンジ Angel Beats
  8. 8 ヨスガノソラ メインテーマ -遠い空へ- Bruno Wen-li
  9. 9 Servante du feu Matthieu Ladouce
  10. 10 Lost my pieces (Piano Ver.) 橋本由香利
  11. 11 潮鳴り 折戸伸治
  12. 12 雪風 Foxtail-Grass Studio
  13. 13 Bloom of Youth 清水淳一
  14. 14 落月随山隐 饭碗的彼岸,夜莺与玫瑰
  15. 15 Autumn Journey Eric Chiryoku
  16. 16 Alpha C418
  17. 17 Money之歌 神楽Mea
Lost my pieces (Piano Ver.) - 橋本由香利
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

暂无歌词