[论文阅读] CLIPVG Text-Guided Image Manipulation Using Differentiable Vector Graphics

pre

title: CLIPVG: Text-Guided Image Manipulation Using Differentiable Vector Graphics
accepted: AAAI 2023
paper: https://arxiv.org/abs/2212.02122
code: https://github.com/NetEase-GameAI/clipvg
ref: https://mp.weixin.qq.com/s/JPpnPqNS8ulb4K9GLBFnHQ

亮点:矢量图、CLIP、无需训练、无生成模型

针对问题

要让 AI 在图像编辑时”听懂”文字引导,典型方法是利用对比图文预训练(Contrastive Language-Image Pre-Training,CLIP)模型。CLIP 模型可以将文字和图像编码到可比较的隐空间中,并给出”图像是否符合文字描述”的跨模态相似度信息,从而建立起文字和图像之间的语义联系。

但仅使用 CLIP 模型很难直接对于图像编辑进行有效引导,这是因为 CLIP 主要关注于图像的高层语义信息,而对于像素级别的细节缺乏约束,导致优化过程很容易陷入到局部最优(local minimum)或者受到对抗性方案的损害?(impaired by adversarial solutions)。

因此当今基于CLIP的工作都需要额外的生成模型来保证结果的语义质量。

本文提出了CLIPVG,一个文字引导的图像编辑(manipulation)框架,使用可微矢量图,是首个不需要生成模型的、基于CLIP的图像编辑框架。

核心思想

将输入的光栅图片以多轮矢量化策略矢量化,得到图片对应的多组绘制参数(就是一个矢量图形),形状及颜色可以独立控制。

通过可微2D矢量图光栅化器(Li et al. 2020b) ,即Diffvg,将矢量图形可微地渲染为光栅图。

再把渲染出来的光栅图、原图、prompt跟固定的字符串"photo"用CLIP编码,计算基于余弦相似度的损失,然后优化那些矢量图形参数,以此修改每个几何元素(笔画或填充曲线)的颜色或形状。

注意该方法可看作 Diffvg + CLIP,它直接优化输入图片(对应的矢量图形参数),不像其他基于生成模型的方法优化的是模型参数,它没有使用生成模型,不需要训练

相关研究

Text-guided Image Manipulation

开创性的研究(Pioneering studies)建模文本跟图片的关系,作为图片生成框架的一部分。后来有了CLIP,就用它解析文字引导,再加入生成模型约束输出图片。在特定类别图片上训练的生成模型叫domain-specifc,在多种类别的大规模数据集上训练的叫domain-agnostic。

domain-specifc的例如 StyleCLIP,StyleGAN-NADA,DiffusionCLIP。这些方案利用生成模型来对图像细节进行约束,从而弥补了单独使用 CLIP 的缺陷,但同时需要更多的训练资源,并且会让图像编辑的有效范围受到训练集图片的限制。

domain-agnostic的希望做通用的图片合成,一些文字引导的图片合成方法(Ramesh et al. 2021, 2022; Dis 2022; Nichol et al. 2022; Saharia et al. 2022; Crowson 2021; Ding et al. 2021, 2022) 支持从prompt跟随机隐编码(latent code)生成图片。

为了编辑图片,DALL·E 2和Disco Diffusion加入encoder来把输入图片转换成相应latent code,它们虽然能编辑任意图片,但需要海量的数据和计算资源来训练其对应的生成模型,而且通常需要额外的上采样模型来合成高分辨率的图片。

当前唯一不依赖于生成模型的方案是 CLIPstyler,它也是domain-agnostic,在优化时会将待编辑图像分为随机小块(random patch),并在每个 patch 上利用 CLIP损失 引导加强对于图像细节的约束,并抑制对抗性伪影(adversarial artifacts)。问题是此时每个 patch 都会单独反映输入文字所定义的语义,导致该方案只能进行风格迁移(style transfer),而无法对图像进行整体的高层语义编辑。

Text-guided Vector Graphic Generation

Diffvg提出可微的光栅化器,用于把矢量图渲染为对应光栅图,反向传播时会将像素的梯度传递给连续的矢量图形参数(vector graphic parameters),如控制点和颜色。离散的拓扑结构(topology),如矢量图元素的数量跟控制点之间的联系不会改变。本文使用保存了Diffvg属性的拓扑结构来正则化(regularize)优化过程。

CLIPdraw第一次将CLIP跟Diffvg结合,用CLIP根据prompt引导一些随机初始化的笔划(stroke,这里应该指矢量图的一条线?)。StyleCLIPdraw通过一张风格图片进一步控制生成矢量图的风格。ES-CLIP用三角形而非笔划作为矢量图形元素,并使用进化策略(evolution strategy)优化三角形。

上述方法都是从随机放置的矢量图元素去生成矢量图,CLIPVG 关注如何对已有图像进行编辑,而非直接生成。

Image Vectorization

由于已有图像中的绝大多数都是像素图,需要先进行矢量化才能够利用矢量图形特性进行编辑。光栅图片矢量化或图片描摹(image tracing)在计算机图形学中已有广泛研究。Adobe illustrator是最先进的商业矢量图设计工具,提供image tracing 工具(Ado 2022)跟各种各样的控制模式、选项,默认使用Adobe Image Trace (AIT)将光栅图转换为一系列不重叠的填充曲线,精度取决于目标颜色的数量。

也有很多其他图片矢量化的方法,神经网络直接实现光栅-矢量转换可支持较简单的图片。基于笔划的、有一个矢量笔划序列的渲染也可用于拟合复杂图片,但性能受到预先定义的笔划限制。

Diffvg可以用一系列随机初始化矢量图形元素拟合输入图片,基于此,CLIPasso通过笔划数量来控制抽象级别或输出的矢量化精度。(CLIPasso生成输入图片的简笔画,挺有意思)。LIVE进一步提出了粗到细的矢量化策略。

本文采用解耦方法,首先矢量化输入图片,然后根据prompt编辑矢量化的图形,因此所有上述方法都可以用在本文的框架中。但是现存的矢量化方法都没有考虑后续的编辑需求。CLIPVG 在已有方法的基础上引入了多轮矢量化的增强手段,以针对性提高图像编辑时的鲁棒性。

贡献

  1. 第一个文字引导的矢量图编辑框架,不用CLIP以外的预训练模型就能到SOTA
  2. 鲁棒的多轮矢量化策略,使光栅图能在矢量域进行编辑
  3. 灵活的编辑系统,支持远超现有方法的控制能力,且源码公开

方法(模型)流程

Overview

图2 CLIPVG示意图。用多轮矢量化策略矢量化输入图片,再使用ROI CLIP损失引导优化,参数都被解耦,方便精细控制

如图2,先用不同矢量化精度多次矢量化输入的光栅图片。所有矢量图形元素都用Diffvg共同光栅化回像素空间。开始时光栅化后的图片是原输入图片的重建,然后沿着prompt的方向迭代优化。

图3 迭代优化过程中的输出例子。prompt是"Jocke, Heath ledger",即“小丑,希斯 · 莱杰”

Vectorization

矢量图由一系列矢量图形元素定义每个元素的参数取决于类型,如填充曲线可以如下表示:

\[\theta=\{(x_{1},y_{1}),(x_{2},y_{2}),\dots,(x_{m},y_{m}),r,g,b,a\}, \tag{1} \]

其中 \((x_i, y_i)\) 是第i个控制点坐标,m是控制点数量, \((r,g,b,a)\) 就是RGB颜色及透明度。

控制点之间的拓扑关系固定(constant connection),同时元素内的纹理均匀,这些可作为优化的天然约束(regularize)

现有的矢量化方法生成的矢量图形元素,CLIPVG可以直接用其进行优化,但有问题:

  1. 元素内部拓扑优化期间得以维持,但没有元素间的约束。两个原本紧挨着的元素优化过程中会被分离,二者间留下空隙。
  2. 目标图片可能要额外的元素来表达prompt语义,比如图1第二行,prompt"蒸汽朋克风格的建筑"应使得输入的橱柜变得更复杂(要更多的矢量元素)。但新生成一个矢量图形元素不可微,也不被优化支持。

因此提出多轮矢量化策略,对一张光栅图片以不同精度矢量化多次,每轮导出一组唯一的矢量图形元素集:

\[\Theta_{i}=\{\theta_{1}^{i},\theta_{2}^{i},\dots,\theta_{N_{i}}^{i}\}, \tag{2} \]

\(N_{i}\) 是元素数量,\(\theta_{j}^{i}\) 是第i轮矢量化的第j个元素。矢量化精度每轮增加,通常会使得结果包含的元素数量增加,即 \(N_{i+1} > N_{i}\)。通过对某个特殊区域进行另一轮矢量化,如图2里的人脸部分,可以进一步强化一个关键区域。

将第i+1轮元素集放在第i轮元素集上面(叠加成一个整体),就得到n轮完整的参数集:

\[\Theta=\{\Theta_{1},\Theta_{2},\dots,\Theta_{n}\}. \tag{3} \]

作者说这种多轮策略可以用于强化任何现存的矢量化方法,额外的矢量化图像元素允许CLIPVG根据prompt产生更精细的细节,而且两个矢量化图像元素间的空隙也可以由冗余元素来填充。直观地看就是将多种不同精度的矢量图形叠在一起,以避免上述提到的两个问题:出现空隙、元素不够用

Loss Function

类似于 StyleGAN-NADA 和 CLIPstyler,作者引入有向的CLIP损失(directional CLIP loss),用于对齐文本和图片隐空间方向:

\[\Delta T = E_{T} (t_{p r}) - E_{T}(t_{r e f}), \\ \Delta I = E_{I} (I_{gen}) - E_{I}(I_{src}), \\ L_{d i r}(t_{p r},t_{r e f},I_{g e n},I_{s r c}) = 1 - \frac{\Delta I\cdot \Delta T}{|\Delta I||\Delta T|}, \tag{4} \]

其中 \(t_{pr}\) 表示输入的prompt。\(t_{ref}\) 是一个固定的参考文本,在 CLIPVG 中设为 "photo",\(I_{gen}\) 是生成的图像(要优化的对象)。\(I_{src}\)是原始图像。\(E_{T}, E_{I}\) 分别是 CLIP 的文字和图像编解码器。 \(\Delta T, \Delta I\) 分别表示文字和图像的隐空间方向。后面的公式中会忽略固定不变的 \(t_{ref}\) ,损失记为 \(L_{d i r}(t_{p r} ,I_{g e n},I_{s r c})\)

优化该损失函数的目的是使得图像编辑后的语义变化方向符合文字的描述, \(\Delta T\) 表示基础文本"photo"的编码要加上什么才能变成prompt的编码, \(\Delta I\) 则是生成结果跟原图的差值。公式4用1减去二者的余弦相似度,因此二者越相似,余弦相似度越大,则损失越小。

CLIPVG 支持输入多个prompt,对每一个 ROI 分配不同的prompt,可以看图2最左边输入图上三种不同颜色的框。可以定义ROI CLIP 损失如下:

\[L_{d i r}(\Theta,t_{p r}^{i},A_{i}) = L_{d i r}(t_{p r}^{i},C_{A_{i}}(R(\Theta)),C_{A_{i}}(I_{i n i t})), \tag{5} \]

其中 \(A_{i}\) 是第i个ROI, \(t_{p r}^{i}\) 是该ROI关联的prompt。R 是可微矢量渲染器, \(R(\Theta)\) 是渲染出来的整张图像。 \(I_{i n i t}\) 是输入的整张图像。 \(C_{A_{i}}(I)\) 代表一个裁剪操作,从图像I中将区域 \(A_{i}\) 裁剪出来。

CLIPstyle从每个ROI中进一步随机裁剪出多个patch增强局部纹理,本框架将其用作数据增强,每个ROI剪切出来的patch共享同一个prompt,可根据公式5计算每个patch的损失,总体损失如下:

\[L_{t o t a l} = \sum_{i=1}^{h} w_{i} L_{d i r}(\Theta, t_{p r}^{i}, A_{i}), \tag{6} \]

一个区域(region)可以是一个 ROI, 或是从中裁剪出来的一个patch。\(w_i\)是第i个区域对应的 loss 权重,h是区域的数量。

Optimization

使用Diffvg优化参数 \(\Theta\) 的集合以减小公式6的总损失。形状和颜色参数在公式1中天然解耦,可以用两个不同的学习率分别优化,这可以实现形状或颜色不变的图片编辑。也就是说本文直接对图片进行优化,而不是以往对可学习的参数进行优化!

也可以只编辑矢量图形元素的一个子集,与某个子区域相交的元素组成该子集。本文的框架允许可编辑元素在迭代优化过程中部分或完全移出子区域,保证子区域跟图片其他部分无缝连接。

实验

Implementation

多轮矢量化策略可以使用任意的矢量化工具,如AIT, Diffvg, LIVE,这里设置AIT为默认工具,因为它在本实验中的重建结果最精确。默认是两轮矢量化,第一轮 \(N_c = 10\),第二轮\(N_c = 30\),这里 \(N_c\) 是AIT中目标颜色的数量。此外对人脸区域以\(N_c = 30\)进行了另一轮的矢量化。

每次迭代时随机裁剪,每个ROI切出\(N_{patch} = 64\)个块。对于每个prompt相关的ROI,默认的CLIP损失权重设置为30.0,而每个patch设置为 \(80.0 / N_{patch}\)。patch尺寸固定为ROI区域长边的80%,比如对于500x300的ROI,尺寸为400x400,必要时使用0-padding。类似CLIPstyler,也用了随机透视增强(random perspective augmentation)。

类似(Kwon and Ye 2021; Patashnik et al. 2021),用ViT-B/32 CLIP模型,选Adam优化器,默认形状参数的学习率0.2,颜色参数学习率0.01。迭代150轮,运行时信息(running time information)见补充材料。

Baseline Methods

矢量图形方面没有现存的文本引导编辑方法,因此主要对比基于光栅图片的SOTA方法。

选取两个domain-agnostic baseline:Disco Diffusion v5.6 和 CLIPstyler,前者基于通常的扩散模型(general diffusion model),后者是CLIP引导的风格迁移方法,不依赖任何生成模型。

选三个domain specific方法:StyleCLIP,StyleGAN-NADA和DiffusionCLIP,前两个基于StyleGAN,后一个基于扩散模型。

所有baseline使用官方代码跟默认配置,输入图片分辨率为512x512。

Ablation

图4 多轮策略对图片矢量化和编辑的影响

图5 使用不同patch大小的随机裁剪增强,CLIPVG跟CLIPstyler的结果,prompt是"Doctor Strange"

Multi-Round Vectorization. 图4中将多轮矢量化策略跟one-shot方法比较,one-shot矢量化由AIT实现,有 \(N_c = 10, \;N_c = 30\) 两个版本。多轮矢量化的图片由one-shot方案的所有元素构成,还加上了该图片脸部的元素集。图4a可以看出多轮矢量化策略重建精度最高,因为矢量图形元素更多。图像编辑后,one-shot方案会出现不需要的空白,这些区域不被任何元素覆盖。图4b中多轮矢量化策略可以很好地缓解空白的问题,同时比起one-shot方案,编辑后的图片细节也更加丰富。

Random Cropping Enhancement. 图5展示了patch大小在 128x128, 224x224, 410x410以及不进行随机裁剪结果。CLIPstyler也做了类似的研究并选择128x128作为默认patch大小。之所以重新做这个实验是因为:

  1. CLIPstyler用的prompt基本跟低级纹理相关,如"a cubism style painting",而本文的prompt包含高级语义编辑,如图5的"Doctor Strange"。
  2. 本文中低级纹理可以通过矢量图形特定正则化(vector graphic specific regularization),不需要patch级别的损失来实现

图5的原图在图1第一行。patch较小的时候,即128/224,CLIPVG跟CLIPstyler结果都有明显的局部伪影,以及奇异博士经典的红蓝配色。伪影表示小patch无法胜任高级语义编辑任务。

使用大patch或不进行随机裁剪时局部伪影会减少,CLIPVG用410大小的patch可以根据prompt有效改变发型跟脸部特征。如果去除随机裁剪,则语义编辑效果和细节清晰度都会有所下降,说明 patch 增强对总体质量依然有正面效果。

不同于 CLIPVG,CLIPstyler 在 patch 较大或去除 patch 时都不能实现有效的语义变化,而只是改变了整体颜色和一些局部纹理。原因是 patch size 放大后像素域的方法失去了底层约束,而陷入到局部最优(所以CLIPstyler只能用小patch改改纹理,做不了语义变化)。

这一组对比说明 CLIPVG 能够有效利用矢量域对于细节的约束,结合较大的 CLIP 作用范围 (patch size) 实现高层语义编辑,这是像素域方法难以做到的。最终对512x512的区域选择410x410的patch大小。

数据集

附录中作者说除了CLIP外不依赖任何其他数据集或预训练模型,训练时用的可能是CLIP那个数据集吧,作者并未明说。

指标

见附录,CLIP分数:定义为prompt跟输出图片的CLIP嵌入向量间的余弦相似度,即2个向量的内积除以2个向量的模长乘积。这个实际上跟公式4的损失很像。

实验结果

图1 文字引导的编辑结果,来自CLIPVG跟另两个baseline,如Disco Diffusion和CLIPstyler

不同于之前的像素域方法,CLIPVG 方案在矢量空间对图像细节进行约束,由于矢量图元素天然可作为局部形状和颜色的某种正则化,因此优化过程比起像素,在矢量图元素(颜色、线宽、控制点等)参数上的优化更加稳定,这种正则化甚至可以跟用了大规模预训练生成模型比较。

如图1所示,CLIPVG更符合文字语义,比Disco Diffusion产生更少的视觉伪影(artifact),Disco Diffusion基于扩散模型,在ImageNet上训练。

CLIPVG比其他框架更加灵活:

  1. 因为用矢量图,它的图片分辨率没有限制(resolution-independent),允许对每个矢量图元素的颜色或形状进行单独编辑。
  2. 应用范围更广,如面部属性编辑、角色设计(character design)、字体设计、重新上色等,因为它不限于某一预训练生成模型的域(domain),能完全解放CLIP在图像编辑的能力。
  3. 允许同时对图片不同区域应用不同prompt

图6 与domain-agnostic方法的比较

图7 与domain-specific方法的比较

Domain-Agnostic Methods. 在图6中跟Disco Diffusion以及CLIPstyler比较,CLIPVG效果好,对于第一行 "Self-Portrait of Vincent van Gogh" 的例子,CLIPVG 是唯一能够同时对人物身份(identity)和绘画风格(texture change)进行编辑,而其他方法只能处理其中的一项。对于第二行 "Gypsophila",CLIPVG 相对方法能更精确地编辑花瓣的数量和形状

Disco Diffusion的结果相对不稳定,如 "Jocker, Heath Ledger" 例子里生成的头位置不正确,还在 "A Ford Mustang" 例子中真的生成了个野马的头,这可被作为像素级编辑的一种局部最优方法。结果表明尽管使用大规模预训练模型,domain agnostic图像编辑问题仍十分具有挑战。

CLIPstyler 由于严格的patch级约束总是局限于局部的纹理跟颜色改变,比起这些基于光栅图片的方法,CLIPVG能够聚焦于全局语义,并通过矢量图形特定正则化抑制局部区域的过度编辑。

Domain-Specific Methods. 图7里跟StyleCLIP, StyleGAN-NADA 还有 DiffusionCLIP 比较,类似于Domain-Agnostic的情况,CLIPVG结果正确反映了prompt的语义,StyleCLIP当期望的改变超出原始StyleGAN模型的域时,生成结果几乎无法匹配prompt。

StyleGAN-NADA 和 DiffusionCLIP通过用prompt微调生成模型可较好实现语义改变,CLIPVG的语义编辑有时比这两个模型更加彻底详细,比如"Doctor Strange"prompt,衣服的颜色变化更准确。或许是因为这两个倾向于根据从图片集学来的通用域知识去生成结果,对每张输入图片的关注不如CLIPVG那么多。

图8 初步试验(pilot study)中不同方法的平均用户评分

图11 初步试验中Domain-agnostic的比较

Quantitative Results. 要求用户从两个角度比较方法:语义准确度,即输出图片跟prompt契合程度,以及图片质量,细节见补充材料。

结果见图8,CLIPVG在图8a中完全超越另两个,在图8b中取得跟SOTA domain-specific方法比具有竞争力的结果。该实验证明了CLIPVG强语义编辑能力以及鲁棒性,这得益于矢量图形特定正则化和多轮矢量化。

注意到domain-specific方法中,StyleCLIP倾向于高质量低语义准确度,因为它严格限制输出落在预训练StyleGAN模型的域里面(需要输出符合预训练时见过的图片分布?)。另两个更加平衡,因为基于输入的prompt作了微调,而CLIPVG不需要额外努力就能取得如此平衡。

除了该初步研究,还在补充材料中展示了对语义准确度进一步评估的CLIP分数(一种评估指标)。

Fine-Grained Control

本框架很灵活,支持对ROI设置特定prompt、对参数进行独立控制。

图9 有无 ROI prompt 的文本引导的编辑结果。(a)中 A1 到 A7 区域对应的描述分别为 1. "Justice League Six"(正义联盟),2. "Aquaman"(海王),3. "Superman"(超人),4. "Wonder Woman"(神奇女侠),5. "Cyborg"(钢骨),6. "Flash,DC Superhero"(闪电侠,DC) 和 7. "Batman"(蝙蝠侠)。(c)的prompt由所有prompt拼接而来。

图10 参数独立控制。a 优化特定子区域的参数。b 优化形状参数。 c 优化颜色参数

ROI Prompts. ROI CLIP引导可以为不同物体定义不同目标。如图9所示,每个人物分配不同prompt,图9b开启ROI prompt,即每个人单独一个ROI-prompt对去优化,可以对各个人物进行分别编辑。而图9c那样的全局prompt导致每个人物的特征都十分模糊。由于各个 ROI 互相之间是有重叠的,使用domain-specific方法对每个人物单独编辑并不实际。

Separate Control. CLIPVG默认同时优化所有矢量图形元素的形状和颜色,但可以用mask定义目标子区域,如图10a所示,只优化子区域内的矢量图形元素。图10b中通过修改元素形状且保持颜色不变,可以修改字体风格。而图10c只优化颜色参数来重新上色。

总结

CLIPVG是第一个基于矢量图形的文本引导图像编辑模型,由于矢量图形特定正则化,优化过程很稳定。不需要额外预训练模型,支持domain-agnostic的图像编辑。提出鲁棒的多轮矢量化策略和一系列精细控制方法,支持许多应用。大量实验和人工评估证明其优越的语义转换性能和鲁棒性。

限制(附录的内容)
本方法依赖于迭代优化过程(轮次多,慢),每张图都需要花上几分钟。有几种可能的办法来加速优化过程,如根据CLIP损失实现早停(early-stopping)。另一个限制是矢量化过程中不可避免的量化误差,具体来说,矢量化过程中高频信息会部分丢失。但另一方面,这个影响不大,因为原图的高频信息通常会被图像编辑过程所忽略。

评价

挺惊艳,优化矢量图让人耳目一新,但细看的话可能是由于矢量图形元素数量有限,感觉比较粗糙,特别是涉及到人物时,图片很明显是一个个色块拼合的,颜色之间缺少过渡,但毫无疑问比起比较的其他模型是强上不少的。

能实现字体风格迁移也十分好评,不过风格转换后的字体感觉主要结构(形状粗细大小等)并未改变,只是笔刷改变了。而且它看起来是把很多个字放在一张图里一口气进行编辑,但并非对每个字都进行生硬的一致处理,适合较为规律、有明确主题、偏重文理的字体设计。

同时附录非常长,大部分是生成的样本展示,挺有意思。这里就放一张,图11

待解明

posted @ 2023-02-27 14:26  NoNoe  阅读(396)  评论(0编辑  收藏  举报