【带文字的图像生成-附开源代码】AIGC 如何在图像中准确生成文字?字体篇(上)

24 篇文章 0 订阅
  1. 文字图像生成是什么?
    “文字图像生成(Text-image generation)”即生成带有指定文字的图像。如下图所示,市面常见的通用文生图很难准确地生成带有指定文字的图像。文字图像生成也被称为文本渲染(Text rendering)。
    上图源于论文《TextDiffuser: Diffusion Models as Text Painters》(NeurlPS 2023)

  2. 为什么重要?
    在图像生成中进行文本渲染至关重要,因为文本在海报、书籍封面和表情包等各种视觉形式等广泛应用 [ 1 ] ^{[1]} [1],这也对 AIGC 在时尚、包装、平面、logo、字体、产品等众多设计领域的真正落地至关重要。

  3. 相关研究分类
    参考排版研究论文合集(Typography Research Collection) [ 2 ] ^{[2]} [2] ,相关研究可分为视觉文字生成与编辑(Visual Text Generation and Editing)和字体风格迁移与字形生成(Font Stye Transfer and Glyph Generation)两类:

    • 第一类的输出结果是带有文字的图像,图中带有文字,文字不一定是主体。并且,输出结果大多为 .png/.jpg 等格式的位图/栅格图像(raster image)。(如文章第一张图)

    • 第二类的输出结果是纯文字的图像,或者各类创意字体,文字就是主体。并且,输出结果大多为.svg 格式的矢量图(vector image)或位图。(如下图)上图源于论文《DS-Fusion: Artistic Typography via Discriminated and Stylized Diffusion》(ICCV 2023)

  4. 本文的目标
    从开源仓库 [ 1 , 2 ] ^{[1,2]} [1,2]中筛选出近两年,附带有开源代码的工作,并概述工作的整体方法和开源代码所包含的大概内容(如是否含有训好的模型权重、是否有训练代码、数据集是否可用等)。
    避免篇幅过长,分上下两篇。上篇介绍“字体风格迁移与字形生成”(图像主体为字),下篇则介绍“视觉文字生成与编辑”(图像主体不一定是字)。

DeepVecFont-v2

  • 论文题目:DeepVecFont-v2: Exploiting Transformers to Synthesize Vector Fonts with Higher Quality(发表于 CVPR 2023)
    作者以及机构

  • 背景:矢量字体合成在计算机视觉和计算机图形领域是一个具有挑战性且持续存在的问题。最近提出的 DeepVecFont [ 3 ] ^{[3]} [3] 通过利用矢量字体的图像和序列模态的信息,实现了最佳效果。然而,它对于处理长序列数据的能力有限,并且在图像引导的轮廓细化后处理方面依赖性较强。因此,由 DeepVecFont 合成的矢量字形通常仍然会包含一些失真和瑕疵,并且无法与人类设计的结果相匹敌。

  • 方法概述:为解决上述问题,DeepVecFont-v2

    • 首先,采用Transformer而不是RNN来处理序列数据,并设计了一种放松(relaxation)表示来表示矢量轮廓,显著提高了模型合成长而复杂轮廓的能力和稳定性。
    • 其次,提出除了控制点外还采样辅助点,以精确对齐生成和目标贝塞尔曲线或线条。
    • 最后,为了减轻序列生成过程中的误差累积,作者开发了基于另一个基于Transformer的解码器的基于上下文的自我细化模块,以消除最初合成的字形中的瑕疵。

DeepVecFont-v2的整体流程

  • 整体框架:
    输入是参考字形,既包括栅格图像(Input images)又包括矢量轮廓(Input glyphs)。
    ( a ) 基于 Transformer 和 CNN 的双分支架构,旨在合成目标矢量字形。
    ( b ) 自我细化模块,旨在消除最初合成的矢量字形中的瑕疵。
    ( c ) 除了控制点外,采样辅助点通过贝塞尔曲线对齐损失将合成的字形与相应目标对齐。

部分结果

  • 代码仓库:https://github.com/yizhiwang96/deepvecfont-v2

    • 包含Trained Checkpoints, 训练和测试集。
    • 但需注意由于数据来源于方正字库,所以未经方正字库许可,不能用于任何商业用途。
  • 个人总结:一方面模型并没有用上预训练的 diffusion 模型,另一方面也可能由于矢量图的训练数据较少,所以模型能够输出的字体有限,形状变化并不是很多样。

Word-As-Image

  • 论文题目:Word-As-Image for Semantic Typography(发表于 SIGGRAPH 2023 - Honorable Mention Award)
    作者以及机构

  • 背景:单词即图像(Word-As-Image)是一种语义排版技术,其中单词的插图呈现了单词的含义的可视化,同时保持其可读性。输出的也是矢量图格式。
    论文的示例结果

  • 方法概述:

    • 作者提出了一种自动创建单词作为图像插图的方法。这项任务非常具有挑战性,因为它需要对单词的语义有深刻理解,并且需要在视觉上以一种令人愉悦和易读的方式创造性地描绘这些语义。
    • 作者基于最近的大型预训练语言-视觉模型(CLIP)的显著能力,以视觉方式提炼文本概念。研究的目标是简单、简洁、黑白设计,清晰传达语义。作者有意不改变字母的颜色或质地,也不使用装饰。
    • 该方法优化每个字母的轮廓以传达所需的概念,由预训练的 Stable Diffusion 模型引导。并加入了额外的损失项,以确保文本的可读性和字体风格的保留。

Word-As-Image的整体流程

  • 整体框架:
    • 给定输入是由一组控制点 P P P 表示的字母 l i l_{i} li(上图的原始 S 字型), 以及一个概念(显示为紫色高亮的 Surfing [冲浪]),然后迭代地优化变形字母 l i ^ \hat{l_{i}} li^(下图的 S 字型的冲浪人) 的新位置 P ^ \hat{P} P^。在每次迭代中,将集合 P ^ \hat{P} P^ 输入到可微分光栅化器(DiffVG [ 4 ] ^{[4]} [4] 标记为蓝色),该光栅化器输出光栅化的变形字母 l i ^ \hat{l_{i}} li^
    • 然后,将 l i ^ \hat{l_{i}} li^ 通过预训练的冻结 Stable Diffusion 进行增强,并使用 ∇ P ^ L LSDS ∇_{\hat{P}}\mathcal{L}_\text{LSDS} P^LLSDS 损失(1)驱动字母形状传达语义概念。
    • l i l_{i} li l i ^ \hat{l_{i}} li^ 还通过低通滤波器(LPF 标记为黄色)进行处理,以计算 L tone \mathcal{L}_\text{tone} Ltone(2),这鼓励保留字体风格的整体色调以及局部字母形状。
    • 此外,将 P P P P ^ \hat{P} P^ 通过 Delaunay 三角剖分运算符(D 标记为绿色)传递,定义 L acap \mathcal{L}_\text{acap} Lacap(3),这鼓励保留初始形状。

论文中的部分展示效果

  • 代码仓库:https://github.com/Shiriluz/Word-As-Image
    • 主要基于 diffusers 包中的 stable diffusion,以及 diffvg [ 4 ] ^{[4]} [4] 和 Live [ 5 ] ^{[5]} [5] 两个开源项目。
    • 全文并没有提及模型训练,估计是 training-free/ inference-only 的方法,所以也没有给出训练数据和训练代码。
  • 个人总结:(1)不确定复现出的真实效果,感觉实际的效果可能需要手工调整参数,并且一般只能针对某个特定的字母进行变形。(2)可能也受限于矢量图的数据集较小,没有探索更丰富的彩色创意字体。
    • 代码仓库中的例子:python code/main.py --semantic_concept "BUNNY" --optimized_letter "Y" --font "KaushanScript-Regular" --seed 0 即只针对 BUNNY 单词中的 Y 进行字体艺术变形。
    • 代码仓库中有提到如果结果不符合期望,可以尝试:
      1. 调整 L acap \mathcal{L}_\text{acap} Lacap 损失的权重 𝛼,这可以在变形后保留字母的结构。
      2. 修改 L tone \mathcal{L}_\text{tone} Ltone 损失中使用的低通滤波器的参数 𝜎,这可以限制与原始字母的偏差程度。
      3. 改变控制点的数量,因为这会影响输出结果。
      4. 尝试不同的种子,因为每个种子可能会产生略有不同的结果。
      5. 更改字体类型,因为这也会导致各种不同的输出。”

DS-Fusion

  • 论文题目:DS-Fusion: Artistic Typography via Discriminated and Stylized Diffusion
    (发表于 ICCV 2023)

作者,单位以及效果图

  • 背景:作者通过将一个或多个字母字体进行风格化,自动生成艺术排版,以视觉方式传达输入单词的语义,同时确保输出保持可读性。
  • 方法概述:
    • 为了解决此任务中的一系列挑战,包括相互冲突的目标(艺术风格化与可读性)、缺乏真实样本(grounth truth)和庞大的搜索空间,该方法利用大型语言模型(LLM)来连接文本和视觉图像,进行风格化,并构建一个基于扩散模型的无监督生成模型。
    • 具体而言,作者采用了潜在扩散模型(LDM)中的去噪生成器,并关键性地添加了一个基于CNN的鉴别器,以将输入样式适应到输入文本上。
    • 鉴别器则使用给定字母/单词字体的栅格化图像作为真实样本,使用去噪生成器的输出作为伪样本。
    • 该模型被称为 DS-Fusion,即鉴别和风格化扩散(discriminated
      and stylized diffusion)。
  • 结论:通过大量示例、定性和定量评估以及消融研究展示了该方法的质量和多功能性。与强基线模型(包括CLIP-Draw和DALL-E 2)以及艺术家制作的排版进行的用户研究表明,DS-Fusion 具有很强的性能。

DS-Fusion的整体流程

  • DS-Fusion 的输入是风格提示词(Style Prompt)和字形图像(Glyph Image)。风格图像(Style Images)是根据风格词和属性生成的。
  • DS-Fusion首先利用潜在扩散过程 [ 6 ] ^{[6]} [6]构建给定风格的潜在空间,然后引入一个鉴别器将风格融入字形中。
  • 如果在模块的右下角有一个锁的图标,则该模块的参数是预先训练和冻结的。
  • “+” 模块表示扩散模型的迭代噪声注入过程。

单字母艺术化排版的结果。第一行是每个字母都进行了风格化,第二行是部分选中的字母进行风格化。
单词整体艺术化的结果
可根据不同的输入字体(左)和不同的风格(右)进行自动的风格化适配

  • 代码仓库:https://github.com/tmaham/DS-Fusion
    • 给出了对 Stable Diffusion 的 finetune 代码,以及 finetune 好的 checkpoint
    • 单字母风格化中,只能对大写字母和数字进行变换。
    • 自定义风格化字体的话,需要输入 .ttf 格式的字体文件 python script_basic.py -s "DRAGON" -t "R" --custom_font "TlwgTypist-Bold.ttf" --white_bg "True" --cartoon "True" --ckpt_path "ckpt/model.ckpt"
    • 具体的代码实现主要基于Stable Diffusion/Latent Diffusion 源码 [ 7 ] ^{[7]} [7]。鉴别器结构参考DC-GAN
  • 个人总结:因为用上了 Stable Diffusion ,生成的结果比前两个更丰富、颜色也多样。但同样也因为是用的 SD,所以输出结果是 .png 或者 .jpg 的位图,而非矢量图,那么在真正应用过程中,字体内部的空白像素扣取需要后处理一下。

FontDiffuser

  • 论文题目:FontDiffuser: One-Shot Font Generation via Denoising Diffusion with Multi-Scale Content Aggregation and Style Contrastive Learning(发表于 AAAI2024)
    作者以及单位
    前文都是针对英文字母的工作,很大程度上得益于英文相对简单(总共就 26 个字母,最多加上大小写 x2 也才 52 个)。但中文的字非常多,还有如生僻字、笔锋笔画等细节问题,FontDiffuser 则是针对复杂汉字、风格化程度较大的情况。
    复杂汉字的字体生成

  • 背景:自动字体生成是一项模仿任务,旨在创建一个字体库,模仿参考图像的风格,同时保留源图像的内容。虽然现有的字体生成方法已经取得了令人满意的性能,但它们在处理复杂字符和大范围风格变化时仍然存在困难。

  • 方法概述:

    • 为了解决这些问题,作者提出了FontDiffuser,这是一种基于扩散的图像到图像一次性字体生成方法,创新地将字体模仿任务建模为噪声到去噪的范式。
    • 该方法引入了一个多尺度内容聚合(MCA)块,它有效地组合了不同尺度上的全局和局部内容线索,从而增强了复杂字符的复杂笔画的保留。
    • 此外,为了更好地处理风格转移中的大幅变化,作者提出了一个风格对比细化(SCR)模块,这是一种新颖的结构,用于风格表示学习。
    • 它利用一个风格提取器从图像中提取/解缠(disentangle)风格,随后通过风格对比损失对扩散模型进行监督。
  • 结论:广泛的实验表明 FontDiffuser 在生成多样化字符和风格方面达到了最先进的性能。与先前的方法相比,它在处理复杂字符和大幅风格变化方面表现出色。

FontDiffuser的整体流程

  • (a) 条件扩散模型是一个基于 UNet 的网络,由内容编码器 E c E_{c} Ec和样式编码器 E s E_{s} Es 组成。
    • 参考图像(reference) x s x_{s} xs 分别通过样式编码器 E s E_{s} Es 和内容编码器 E c E_{c} Ec ,得到样式嵌入 e s e_{s} es 和结构映射 F s F_{s} Fs
    • 源图像由内容编码器 E c E_{c} Ec 编码。为了获得多尺度特征 F c F_{c} Fc,模型从 E c E_{c} Ec 的不同层次中推导输出,并将每个输出通过 MCA 块(粉色)注入其中。
    • RSI 块(灰色)则用于从参考结构特征 F s F_{s} Fs 进行空间变形。
  • (b) 风格对比细化模块用于解缠图像中的不同风格,并为扩散模型提供指导。

与各类现有方法进行对比
FontDiffuser得到的结果可以进一步作为InstrucPix2Pix等模型等输入

  • 代码仓库:https://github.com/yeungchenwa/FontDiffuser
    • 包含了 phase1 和 phase2 分别的训练代码。
      • 其中,phase1 主要使用标准的 MSE 扩散损失来优化 FontDiffuser,不包括 SCR 模块。这确保了生成器获得了字体重建的基本能力。
      • 而 phase2 主要实现了 SCR 模块,结合风格对比损失,为全局和局部提供风格模仿指导,从而在第 2 阶段优化条件扩散模型。
    • 也包含推理(sampling)的代码和训练好的各个模块,即 ckpt (包括 unet.pth, content_encoder.pth, style_encoder.pth)。
    • 也支持了简单的 gradio webui。
  • 个人总结:输入是两个文字,一个作为文字的内容、另一个则作为文字的字体风格,属于典型的风格迁移任务。最终输出和 DS-Fusion 一样,都是位图,需要进行分割(去掉空白像素)以及风格化等进一步处理。

[1] https://github.com/PRIV-Creation/Awesome-Controllable-T2I-Diffusion-Models?tab=readme-ov-file#text-rendering
[2] https://github.com/IShengFang/TypographyResearchCollection
[3] https://github.com/yizhiwang96/deepvecfont
[4] https://github.com/BachiLi/diffvg
[5] https://github.com/Picsart-AI-Research/LIVE-Layerwise-Image-Vectorization
[6] https://github.com/CompVis/latent-diffusion
[7] https://github.com/CompVis/stable-diffusion

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值