使用神经实现路径表示的文本到向量生成

摘要

矢量图形在数字艺术中得到广泛应用,并受到设计师的青睐,因为它们具有可缩放性和分层特性。然而,创建和编辑矢量图形需要创造力和设计专业知识,使其成为一项耗时的任务。最近在文本到矢量(T2V)生成方面的进展旨在使这个过程更加普及。然而,现有的T2V方法直接优化矢量图形路径的控制点,通常由于缺乏几何约束而产生相交或锯齿状的路径。为了克服这些限制,我们提出了一种新的神经路径表示方法,通过设计一个双分支变分自编码器(VAE),从序列和图像两种模态中学习路径潜在空间。通过优化神经路径的组合,我们可以在生成的SVG中结合几何约束的同时保持表达能力。此外,我们引入了一种两阶段路径优化方法,以改善生成SVG的视觉和拓扑质量。在第一阶段,通过变分得分蒸馏(VSD)过程,使用预训练的文本到图像扩散模型指导复杂矢量图形的初步生成。在第二阶段,我们使用分层图像矢量化策略来细化图形,以实现更清晰的元素和结构。我们通过广泛的实验证明了我们方法的有效性,并展示了各种应用。

关键词:
矢量图形、SVG、扩散模型、文本引导生成
image.png
图1. 由我们的框架生成的文本引导矢量图形示例,具有清晰和有效的分层矢量路径。

引言

矢量图形,尤其是可缩放矢量图形(SVG)格式,在数字艺术领域如剪贴画、动画和平面设计中扮演着重要角色。得益于其由几何形状组成的特性,矢量图形因其易于操作、分辨率独立和文件大小紧凑而受到设计师的广泛青睐。然而,制作高质量的矢量图形需要专业技能和大量的时间投入。随着文本到图像(T2I)生成模型(Rombach 等人,2022;Ruiz 等人,2022)的成功,最近的研究工作开始探索文本到矢量图形生成(T2V),旨在通过文本提示使创作过程更加普及。

一种常见的T2V方法是在T2I结果的基础上进行现有的图像矢量化(Selinger,2003;Dominici 等人,2020;Ma 等人,2022)。然而,T2I模型通常生成具有摄影和真实风格、复杂纹理和颜色变化的光栅图像。这在转换为矢量图形时带来了挑战,因为目标通常是实现平滑的几何形状和均匀的颜色。转换过程往往导致过于复杂的矢量元素,给后续的图形操作带来复杂性,并偏离了矢量图形所期望的简单性和清晰度。在最近的发展中,出现了一类新的T2V方法(例如,CLIPDraw(Frans 等人,2022)和VectorFusion(Jain 等人,2022))。这些方法使用大型预训练视觉-文本模型(Rombach 等人,2022)直接优化矢量图形路径。它们通过参数化形状基元(例如,三次贝塞尔曲线)表示矢量图形,并细化路径参数,如控制点。然而,直接优化控制点往往会导致路径相交或锯齿状,因为它们具有很高的自由度且缺乏几何约束。

因此,除了将矢量表示为显式的参数化路径外,开发一种能够捕捉几何关系和形状感知的有效表示变得至关重要。先前的工作已经探索了使用不同的网络架构(如循环神经网络(RNN)(Ha和Eck,2017;Lopes 等人,2019;Wang和Lian,2021)和Transformers(Carlier 等人,2020;Wang 等人,2023b))基于SVG序列学习此类潜在表示。然而,由于SVG的固有复杂性和多样性,学习全面的全局SVG级别表示具有挑战性。因此,先前的方法通常仅限于生成特定类别的SVG,如字体(Lopes 等人,2019;Wang和Lian,2021;Wang 等人,2023b)、草图(Ha和Eck,2017;Ribeiro 等人,2020)和简单的图标(Carlier 等人,2020;Cao 等人,2023;Wu 等人,2023)。

为了克服上述限制,我们提出了一种新的神经路径表示方法,该方法有效地学习了路径的有效几何属性,而不是学习全局SVG特征。这是基于发现复杂矢量图形通常由简单路径组成(Chen 等人,2023;Liu 等人,2023)的动机。这种紧凑的表示确保了简单性和表达力。为了学习神经路径表示,我们设计了一个双分支变分自编码器(VAE),以从序列和图像两种模态中学习。它们共同优化共享的路径表示,序列模态提供学习几何属性的监督,而图像模态有助于学习渲染视觉特征。

我们进一步提出了一种基于所学习的路径潜在空间的两阶段路径优化方法来进行文本到矢量生成。基本动机是在一个阶段内获得高质量的矢量可能具有挑战性。在第一阶段,我们依靠大型预训练扩散模型(Rombach 等人,2022)的生成能力来生成初始SVG。与VectorFusion(Jain 等人,2022)中使用的得分蒸馏采样(SDS)损失(Poole 等人,2022)不同,它可能会出现过度饱和、过度平滑和低多样性的问题,我们借用了变分得分蒸馏(VSD)(Wang 等人,2023a)的想法,根据文本提示优化神经路径的组合。在第二阶段,为了进一步改善最初生成的SVG的几何清晰度和分层结构,我们应用了路径简化和分层优化策略来逐步增强路径。

我们使用矢量级别、图像级别和文本级别的指标进行了广泛的实验来评估我们的方法。结果证明了我们的模型在给定输入文本提示的情况下,能够生成高质量和多样化的具有有效路径和分层属性的矢量图形。图1展示了由我们的框架生成的文本到矢量生成结果的示例。我们的模型使各种应用成为可能,除了T2V生成,如矢量图形定制、图像到SVG生成和SVG动画。我们的主要贡献如下:

• 我们引入了一种新的T2V生成管道,通过优化局部神经路径表示以生成高质量矢量图形的想法进行了创新。
• 我们提出了一个双分支VAE,用于从序列和图像两种模态中学习神经路径表示。
• 我们开发了一种两阶段的文本驱动神经路径优化方法,以指导具有有效和分层SVG路径的矢量图形的创建。
• 我们展示了我们的管道所实现的几个实际应用。
image.png图2. 我们的系统管道从通过训练一个双分支VAE来学习路径的神经表示开始。接下来,我们通过一个两阶段的路径优化过程来优化由神经路径表示的SVG,使其与提供的文本提示相一致。

相关工作

2.1. 用于T2I生成的扩散模型

最近,扩散模型(DM)已成为T2I生成的最先进的模型。它是一种生成模型族,涉及一个将数据与噪声扰动的正向过程和一个从噪声逐渐添加结构的逆过程(Sohl-Dickstein等人,2015;Ho等人,2020;Nichol等人,2021)。Stable Diffusion(Rombach等人,2022)进一步将图像潜在变量引入扩散模型,克服了分辨率限制,并能够生成令人惊叹的高分辨率结果。用户定义的多种条件模态使许多下游应用成为可能,如基于草图的图像生成(Zhang等人,2023b;Voynov等人,2023)、图像合成中的多模态条件(Zhan等人,2023)和各种图像到图像的生成任务(Saharia等人,2022;Zhang等人,2023a)。扩散模型还支持灵活的文本引导图像编辑(Meng等人,2021;Hertz等人,2023)和定制任务(Ruiz等人,2022;Kumari等人,2022)。为了生成个性化图像,开创性的工作DreamBooth(Ruiz等人,2022)通过微调扩散模型的权重,使用一个独特的标记来捕捉一组图像中的显著特征。后续工作重点微调网络的特定部分,包括低秩权重残差(Hu等人,2021)和交叉注意力层(Kumari等人,2022)。与旨在生成光栅图像不同,我们的方法利用强大的预训练T2I模型作为先验来指导矢量图形的生成。

2.2. 文本到矢量生成

T2V生成的一种方法是将T2I生成与图像矢量化方法相结合。传统的矢量化方法涉及基于颜色相似性将图像分割为区域(Kopf和Lischinski,2011),并拟合曲线到区域边界(Selinger,2003;Yang等人,2015;Favreau等人,2017;Hoshyari等人,2018;Dominici等人,2020)。可微分渲染技术(Li等人,2020)的出现通过启用在图像空间中使用损失函数增强了图像矢量化。LIVE(Ma等人,2022)通过输入图像的重构来优化路径参数。最近的发展已经探索了训练端到端的神经网络进行图像矢量化(Reddy等人,2021;Chen等人,2023;Rodriguez等人,2023)。然而,这种方法依赖于由预训练T2I模型生成的图像,这些模型难以产生具有清晰几何基元和平面颜色的高质量SVG风格图像。随着生成式AI的发展,一些社区制作的工具和商业产品,如Adobe Illustrator(Illustrator,2023)、Illustroke(Illustroke,2024)和Kittl(Kittl,2024),通过使用T2I方法的矢量化技术,提供了从文本提示生成矢量图形的功能。为了产生视觉上吸引人的SVG风格图像,微调预训练的T2I模型(Hu等人,2021;Ruiz等人,2022)是必要的。然而,这些微调方法严重依赖训练数据集,需要进行劳动密集型的图像和文本标签收集。

T2V生成的另一种方法是直接在预训练的视觉语言模型(如CLIP模型(Radford等人,2021)或扩散模型(Rombach等人,2022))的指导下优化SVG路径的几何和颜色参数。基于CLIP的方法(Frans等人,2022;Schaldenbrand等人,2022;Song等人,2022)利用CLIP潜在空间中的图像-文本相似性度量,从文本提示创建矢量图形。除了CLIP距离,基于T2I扩散模型的得分蒸馏采样(SDS)损失用于在各种应用中优化SVG以与文本提示对齐,如字体(Iluz等人,2023)、矢量图形(Jain等人,2022;Xing等人,2023b)和草图(Xing等人,2023a;Gal等人,2023)。然而,这些方法往往导致SVG具有杂乱和不规则的路径,因为直接优化参数路径(如三次贝塞尔曲线)的控制点缺乏基本的几何关系。

2.3. SVG的神经表示

先前的工作已经探索了学习SVG的各种表示,并设计了不同的网络架构来理解SVG数据固有的几何信息和全局感知。SketchRNN(Ha和Eck,2017)利用循环神经网络(RNN)生成草图的矢量路径。SVG-VAE(Lopes等人,2019)使用图像自编码器来捕捉字体样式特征,并使用LSTM生成矢量字体。Sketchformer(Ribeiro等人,2020)使用Transformer从光栅图像中恢复草图笔画的矢量形式。为了保持SVG中的层次关系,DeepSVG(Carlier等人,2020)使用分层Transformer基网络生成由多个路径组成的矢量图标。双模态学习框架(Wang和Lian,2021;Wang等人,2023b;Liu等人,2023)利用序列和图像特征来合成准确的矢量字体。设计了一个基于Transformer的框架,通过双模态监督来矢量化线条图(Liu等人,2022),但它在潜在空间中缺乏平滑的插值特性。虽然这些技术尚未支持文本引导的SVG创建,但IconShop(Wu等人,2023)通过将SVG表示为与文本标记结合的标记序列来实现T2V生成。

先前的工作重点是从SVG命令序列中学习SVG级别的潜在表示。然而,路径组合的巨大多样性给学习通用的全局SVG级别表示带来了挑战。因此,现有的方法主要生成特定类别的SVG,如字体(Lopes等人,2019;Wang和Lian,2021;Wang等人,2023b)、草图(Ha和Eck,2017;Ribeiro等人,2020)和简单的图标(Carlier等人,2020;Cao等人,2023;Wu等人,2023)。相比之下,我们的神经路径表示捕捉有效的路径属性,同时使从文本提示生成各种复杂的矢量图形成为可能。

概述

给定一个文本提示,我们的目标是生成一个与文本提示的语义一致且表现出令人满意的路径属性和与人类感知一致的分层结构的SVG。由于SVG由一组路径组成,表示为 S V G = { P a t h 1 , P a t h 2 , . . . , P a t h m } SVG = \{Path1, Path2, ..., Path_m\} SVG={Path1,Path2,...,Pathm},我们的目标是根据文本提示 T T T通过以下方式优化 m m m条路径:

神经路径表示学习(第4节)
路径几何由连接的三次贝塞尔曲线组成。我们的目标是通过将每条路径映射到一个表示为 z z z的潜在代码来学习神经路径表示,该代码捕捉有效的几何属性。为了实现这一点,我们提出了一个双分支VAE,它从路径的图像和序列模态中学习(参考图2(a))。

文本驱动的神经路径优化(第5节)
有了所学习的神经路径表示,SVG可以由一组潜在代码以及与每条路径相关联的颜色和变换参数表示,表示为 S V G = { θ 1 , θ 2 , . . . , θ m } SVG = \{ \theta_1, \theta_2, ..., \theta_m \} SVG={θ1,θ2,...,θm},其中 θ i = ( z i , C i , T r i ) \theta_i = (z_i, C_i, Tr_i) θi=(zi,Ci,Tri)。这里, z i z_i zi C i C_i Ci T r i Tr_i Tri分别代表第 i i i条路径( P a t h i Path_i Pathi)的潜在代码、颜色参数和变换参数。接下来,我们使用文本提示 T T T通过两个阶段来优化 m m m条路径的组合。在第一阶段,我们利用预训练的扩散模型作为先验来优化与 T T T对齐的神经路径的组合。在第二阶段,我们应用分层矢量化策略来优化路径层次结构,以确保生成的SVG中具有清晰的视觉元素和分层结构。最后,通过将优化后的潜在代码解码为贝塞尔曲线,我们得到了最终的SVG(参考图2(b))。

神经路径表示学习

先前的T2V方法直接优化参数路径的控制点。然而,这往往会导致路径相交或锯齿状,因为自由度高且缺乏几何约束。为了解决这个问题,我们提出了一种新颖的方法,在潜在空间中学习神经路径表示,捕捉路径的有效几何属性,并使在确保几何规律性的同时优化路径成为可能。为此,我们设计并训练一个双分支VAE来学习路径表示的潜在空间。

4.1. 双分支VAE

一个参数化路径(忽略颜色参数)可以定义为一系列首尾相连的三次贝塞尔曲线,表示为 P a t h = ( p 1 , p 2 , . . . , p k ) Path = (p_1, p_2, ..., p_k) Path=(p1,p2,...,pk),其中 p j p_j pj j = 1 j = 1 j=1 k k k)代表用于定义三次贝塞尔曲线的 k k k个控制点。通过使用可微分光栅化器 R R R(Li等人,2020),我们可以渲染矢量路径并获得光栅化路径图像 I = R ( P a t h ) I = R(Path) I=R(Path)。路径的序列表示包含丰富的几何信息,如路径中点的位置和连接顺序。基于点序列训练VAE可以有效地学习几何属性,但它在精确重构渲染形状方面存在困难。另一方面,图像表示在渲染后更好地捕捉视觉特征,但它不能表示控制点之间的关系,因为不同的控制点序列可能产生相同的渲染形状。为了解决这些挑战,我们提出了一个双分支编码器-解码器VAE,它从路径数据的矢量和图像模态中学习共享的潜在空间,如图2(a)所示。这种方法允许结合几何和视觉信息,实现更全面、更准确的路径学习。

编码器
我们的双分支VAE的编码器由一个序列编码器和一个图像编码器组成。序列编码器将控制点序列作为输入,并使用带有注意力机制的Transformer架构来利用控制点之间的几何关系。首先,我们将控制点序列归一化到 [ 0 , 1 ] [0, 1] [0,1]范围内,然后使用可学习的嵌入层将每个归一化的控制点投影到一个 d h dh dh维的向量中。类似于DeepSVG(Carlier等人,2020),我们使用位置编码来嵌入序列中每个点的位置。序列嵌入 e s e q ∈ R d h × k e_{seq} \in \mathbb{R}^{dh \times k} eseqRdh×k然后被输入到六个Transformer层中。每一层都由掩码多头注意力和前馈层(Vaswani等人,2017)组成。最后,应用线性投影以获得聚合的输出序列特征 z s e q ∈ R d S z_{seq} \in \mathbb{R}^{d_S} zseqRdS。为了进一步学习路径的形状感知,我们还采用了一个由六个卷积层组成的图像编码器。它将光栅化路径图像 I I I作为输入,并输出特征 z i m g ∈ R d I z_{img} \in \mathbb{R}^{d_I} zimgRdI。在我们的实现中,我们设置 d h = 64 dh = 64 dh=64 d S = 32 d_S = 32 dS=32 d I = 64 d_I = 64 dI=64

模态融合
我们融合序列和图像特征来创建路径的全面表示。具体而言,序列特征 z s e q z_{seq} zseq和图像特征 z i m g z_{img} zimg被连接起来,并通过一个线性投影层,得到一个潜在代码 z ∈ R d F z \in \mathbb{R}^{d_F} zRdF,其中 d F = 24 d_F = 24 dF=24,该代码在两种模态之间共享。

解码器
潜在代码 z z z通过两个解码分支来分别重建矢量路径和路径图像。序列解码器具有与序列编码器类似的基于Transformer的架构。它将 z z z作为输入,并输出解码的点序列 P a t h ′ = ( p 1 ′ , p 2 ′ , . . . , p k ′ ) Path^\prime = (p_1^\prime, p_2^\prime, ..., p_k^\prime) Path=(p1,p2,...,pk)。图像解码器是一个反卷积神经网络,它使用 z z z来生成重构的路径图像 I ′ I^\prime I
image.png
图3. 双分支VAE的训练损失。

4.2. 训练

损失函数
双分支VAE通过双模态损失进行端到端训练以重建输入。然而,简单地使用输入和输出控制点序列之间的均方误差(MSE)损失进行序列重建可能会导致过拟合,因为不同的控制点序列可以产生相似的形状。为了解决这个问题,我们引入了一种形状级别的损失来捕捉形状特征。如图3所示,我们首先从向量路径的每个三次贝塞尔曲线中采样 n n n个辅助点(在我们的实现中, n = 4 n=4 n=4),得到辅助点集 P a u x P_{aux} Paux。接下来,我们通过计算输入路径 P a t h Path Path和重建路径 P a t h ′ Path^\prime Path的辅助点集之间的最近对应点的距离之和,来计算Chamfer距离。这产生了Chamfer损失 L c f ( P a t h , P a t h ′ ) L_{cf}(Path, Path^\prime) Lcf(Path,Path)。图像级别的损失结合了输入图像 I I I和重建图像 I ′ I^\prime I之间的 L 1 L_1 L1损失和感知损失。具体而言,它可以表示为 L i m g = ∣ I − I ′ ∣ 1 + L p e r c e p ( I , I ′ ) L_{img} = |I - I^\prime|_1 + L_{percep}(I, I^\prime) Limg=II1+Lpercep(I,I)。除了两种模态中的重建损失外,潜在空间还通过KL散度损失 L k l L_{kl} Lkl进行正则化,它鼓励潜在代码 z z z遵循高斯分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I)

总损失函数为:

(1) L = λ c f L c f + λ i m g L i m g + λ k l L k l L = \lambda_{cf} L_{cf} + \lambda_{img} L_{img} + \lambda_{kl} L_{kl} L=λcfLcf+λimgLimg+λklLkl
其中 λ c f \lambda_{cf} λcf λ i m g \lambda_{img} λimg λ k l \lambda_{kl} λkl是每个损失项的权重。在我们的实现中,我们设置 λ c f = 1 \lambda_{cf} = 1 λcf=1 λ i m g = 0.1 \lambda_{img} = 0.1 λimg=0.1 λ k l = 0.01 \lambda_{kl} = 0.01 λkl=0.01

训练细节
我们在FIGR-8-SVG数据集(Clouâtre和Demers,2019)上训练我们的双分支VAE,该数据集由黑白矢量图标组成。为了预处理数据,我们按照IconShop(Wu等人,2023)的相同步骤来获取有效的SVG数据。我们从SVG中提取路径并删除重复的形状。在图4中,我们展示了数据集中一些路径的示例。对于原始输入,由于每个路径中控制点序列的长度可以不同,我们用零填充点序列到固定长度(在我们的实现中, k = 50 k=50 k=50),并过滤掉长度更长的序列。这导致了200,000个样本用于模型训练。训练VAE的图像分辨率为 64 × 64 64 \times 64 64×64。为了训练模型,我们使用初始学习率为0.001的Adam优化器。我们采用了线性预热和衰减技术。所有Transformer层中的dropout率设置为0.1。我们训练双分支网络100个epoch。

训练完成后,我们得到了一个由两种模态共享的平滑潜在空间。在图4中,我们展示了从所学习的潜在空间中的随机样本解码出的路径,以及平滑的路径插值。
image.png
图4. 路径样本和潜在插值。(a) 数据集的路径示例。(b) 从潜在空间中的随机向量解码的路径样本。© 在四个给定样本(用红色标记)之间的潜在插值。

文本驱动的神经路径优化

通过学习到的神经路径表示,SVG可以通过潜在空间中 m m m条路径的组合来表示,表示为 S V G = { θ 1 , θ 2 , . . . , θ m } SVG = \{ \theta_1, \theta_2, ..., \theta_m \} SVG={θ1,θ2,...,θm},其中 θ i = ( z i , C i , T r i ) \theta_i = (z_i, C_i, Tr_i) θi=(zi,Ci,Tri)。这里,潜在代码 z i z_i zi定义了形状, C i C_i Ci定义了颜色, T r i Tr_i Tri定义了 p a t h i path_i pathi的仿射变换。我们通过从均值为零的高斯分布中随机抽取来初始化潜在代码。我们的目标是根据给定的文本提示 T T T来优化这些参数。与之前的方法(Jain等人,2022;Xing等人,2023b)不同,这些方法明确优化控制点,我们在学习到的空间内优化潜在代码 z z z,以确保结果中每个路径的规律性。优化后,我们可以使用我们的序列解码器解码 z i z_i zi并使用 T r i Tr_i Tri变换点来获得路径的控制点,即 P a t h i = T r i ⋅ S e q D e c ( z i ) Path_i = Tr_i \cdot SeqDec(z_i) Pathi=TriSeqDec(zi)

此外,之前的工作(Jain等人,2022;Frans等人,2022)在单个阶段内同时优化SVG的所有路径,导致路径杂乱无章,层级结构混乱。为了解决这个挑战,我们开发了一个两阶段的神经路径优化过程,如图2(b)所示。在第一阶段,我们使用定义在预训练的文本到图像扩散模型上的VSD来优化路径,从而得到一个与 T T T对齐的初始SVG。在第二阶段,从初始SVG开始,我们应用分层矢量化策略来分层优化路径组合,确保结果SVG中具有清晰的视觉元素和良好的分层结构。接下来,我们介绍这两个阶段。

5.1. 使用变分得分蒸馏的优化

在这个阶段,我们根据文本提示 T T T来优化一个初始SVG。我们从VectorFusion(Jain等人,2022)中获得启发,它利用预训练的文本到图像扩散模型作为先验,通过得分蒸馏采样(SDS)过程来优化路径参数。该过程从一个具有随机初始化路径参数 θ \theta θ的SVG开始,在每次迭代中,使用可微分光栅化器 R R R将SVG渲染为光栅图像 I S V G = R ( S V G ) I_{SVG} = R(SVG) ISVG=R(SVG)。扩散模型的预训练编码器将 I S V G I_{SVG} ISVG编码为潜在特征 x = E ( I S V G ) x = \mathcal{E}(I_{SVG}) x=E(ISVG),并将高斯噪声 ϵ ∈ N ( 0 , I ) \epsilon \in \mathcal{N}(0, I) ϵN(0,I)添加到 x x x中,得到正向扩散过程时间 t t t处的 x t x_t xt。最后,SDS损失被定义为添加的噪声 ϵ \epsilon ϵ和使用预训练扩散模型预测的噪声 ϵ ϕ \epsilon_\phi ϵϕ之间的距离,其关于 θ \theta θ的梯度可以估计如下:

(2) ∇ θ L S D S ≡ E t , ϵ [ w ( t ) ⋅ ( ϵ ϕ ( x t ; T , t ) − ϵ ) ⋅ ∂ x ∂ θ ] \nabla_\theta \mathcal{L}_{SDS} \equiv \mathbb{E}_{t, \epsilon} [w(t) \cdot (\epsilon_\phi(x_t; T, t) - \epsilon) \cdot \frac{\partial x}{\partial \theta}] θLSDSEt,ϵ[w(t)(ϵϕ(xt;T,t)ϵ)θx]
其中, w ( t ) w(t) w(t)是一个时间相关的权重函数。

尽管取得了成功,但经验观察表明,从SDS优化得到的结果存在过度饱和、过度平滑和缺乏多样性等问题。这些问题源于SDS将参数 θ \theta θ视为单个点,并使用单个点来近似扩散模型输出的分布。鉴于此,我们利用ProlificDreamer(Wang等人,2023a)提出的VSD损失来替代我们优化中的SDS。与SDS不同,VSD将参数 θ \theta θ建模为分布,因此,由参数 θ \theta θ的SVG渲染的图像也是分布。按照ProlificDreamer的做法,我们使用预训练扩散模型的LoRA(低秩自适应)(Hu等人,2021)来建模渲染图像的分布。因此,VSD损失被定义为预训练扩散模型和LoRA模型预测的噪声之间的距离。其关于 θ \theta θ的梯度可以表示如下:

(3) ∇ θ L V S D ≡ E t , ϵ [ w ( t ) ⋅ ( ϵ ϕ ( x t ; T , t ) − ϵ L o R A ( x t ; T , t ) ) ⋅ ∂ x ∂ θ ] \nabla_\theta \mathcal{L}_{VSD} \equiv \mathbb{E}_{t, \epsilon} [w(t) \cdot (\epsilon_\phi(x_t; T, t) - \epsilon_{LoRA}(x_t; T, t)) \cdot \frac{\partial x}{\partial \theta}] θLVSDEt,ϵ[w(t)(ϵϕ(xt;T,t)ϵLoRA(xt;T,t))θx]
使用VSD有助于生成质量更高、多样性更好的SVG。我们将这一阶段优化得到的SVG表示为 S V G 0 SVG_0 SVG0,它将指导下一阶段的分层细化。
image.png
图5. 分层优化策略。

5.2. 使用分层矢量化的优化

虽然VSD优化在使SVG与文本提示对齐方面是有效的,但它经常导致路径杂乱和堆叠。这可能会引入伪影,并在SVG中导致组织混乱的层结构,使后续的编辑和修改变得复杂。为了增强生成的SVG中矢量元素的清晰度和层次结构,我们引入了基于前一阶段获得的 S V G 0 SVG_0 SVG0的第二级优化。这一阶段包括一个路径简化步骤,以获得简化的路径集,以及一个分层矢量化策略,以在指导图像的帮助下分层优化路径组合。这一阶段可以提高最终SVG的整体质量和组织性,使其更容易编辑和重用。

路径简化
我们删除 S V G 0 SVG_0 SVG0中不透明度低于0.05或面积小于10像素的路径,并将具有相同颜色的重叠路径(使用5像素的重叠阈值)合并为一条路径。这些步骤将路径的数量从 m m m减少到 n n n。然后,我们使用序列编码器将简化的路径集的序列表示逆变换到潜在空间中,得到一组新的潜在代码,从而得到一个新的SVG, S V G 0 ′ SVG_0^\prime SVG0

分层优化策略
简化后,我们使用指导图像来进一步细化 S V G 0 ′ SVG_0^\prime SVG0,以获得更好的视觉清晰度和层级结构。指导图像是通过首先将 S V G 0 ′ SVG_0^\prime SVG0渲染为图像 I S V G 0 I_{SVG_0} ISVG0,然后向 I S V G 0 I_{SVG_0} ISVG0添加高斯噪声(噪声强度设置为0.4),并使用预训练的扩散模型逐渐去除噪声而获得的。这个过程有助于减少初始SVG中的伪影,并产生一个具有更清晰和更精确的视觉元素的指导图像 I g I_g Ig

I g I_g Ig的帮助下,我们引入了一个分层优化策略。具体来说,我们按照面积对 S V G 0 ′ SVG_0^\prime SVG0中的路径进行排序,然后在每次迭代中优化具有最大面积的前 k k k条路径。一个递归管道根据路径数量计划逐步添加路径,从而从粗到细地优化SVG,如图5所示。

在每次迭代中,我们优化 θ 0 ′ \theta_0^\prime θ0中的前 k k k条路径的参数,表示为 S V G k = { θ 1 , θ 2 , . . . , θ k } SVG_k = \{ \theta_1, \theta_2, ..., \theta_k \} SVGk={θ1,θ2,...,θk}。优化基于 S V G k SVG_k SVGk和指导图像 I g I_g Ig之间的CLIP损失和IoU损失。CLIP损失是通过计算CLIP模型中间层激活之间的 L 2 L_2 L2距离之和来计算的:

(4) L C L I P = ∑ l ∥ C L I P l ( I g ) − C L I P l ( R ( S V G k ) ) ∥ 2 2 L_{CLIP} = \sum_l \|CLIP_l(I_g) - CLIP_l(R(SVG_k))\|_2^2 LCLIP=lCLIPl(Ig)CLIPl(R(SVGk))22
其中, C L I P l CLIP_l CLIPl表示CLIP编码器在第 l l l层的激活。它评估图像级别的相似性,并鼓励 S V G k SVG_k SVGk的渲染结果忠实于指导图像 I g I_g Ig。此外,为了鼓励有限的路径数量尽可能多地覆盖指导图像的内容,我们在 S V G k SVG_k SVGk的渲染轮廓和 I g I_g Ig的前景区域之间应用交并比(IoU)损失。总损失函数定义为 L l r y = L C L I P + λ I o U L I o U L_{lry} = L_{CLIP} + \lambda_{IoU} L_{IoU} Llry=LCLIP+λIoULIoU,其中 λ I o U \lambda_{IoU} λIoU设置为0.01。

随着迭代的进行,更多的路径参与到优化过程中,SVG逐渐添加细节。当所有路径都被优化后,我们得到最终结果,即具有 n n n条路径的 S V G n SVG_n SVGn

实验

实验设置
为了评估我们的方法,我们从Stable Diffusion Prompts数据集(Dehouche和Kullathida,2023)中收集了160个文本提示,包括各种角色、动作和场景。对于每个提示,我们生成5个SVG,总共生成800个矢量图形。为了鼓励生成扁平的矢量风格,我们在每个提示后面添加短语“最小扁平2D矢量”。在VSD优化过程中,我们使用官方的“SD-v1-5”检查点1,指导尺度为10,时间步长 t ∼ U ( 50 , 950 ) t \sim \mathcal{U}(50, 950) tU(50,950)是均匀采样的。

6.1. 评估指标

我们从矢量级别、图像级别和文本级别的角度评估我们的结果质量。

矢量级别
根据先前关于矢量图形感知的研究标准(Favreau等人,2017;Dominici等人,2020),一个好的SVG应该最小化冗余路径以保持紧凑性和可编辑性。基于这个指导原则,我们使用以下指标来评估矢量化质量:(a) 平滑度:生成的SVG中路径的平均曲率变化的倒数。(b) 简单性:生成的矢量图形的平均路径数量。© 分层语义:通过比较在随机删除30%的SVG路径之前和之后的SVG渲染结果与相应文本提示之间的CLIP相似性下降来评估路径的语义。下降越大,表示每个路径具有更具体的语义。

图像级别
为了评估矢量图形的视觉质量和多样性,我们从iconfont2收集了800个设计良好的矢量图形数据集,包括各种类别,如角色、动物和场景。这些样本作为SVG渲染图像FID指标计算的基准。

文本级别
为了计算生成的SVG是否与输入文本提示对齐,我们通过计算文本提示和SVG渲染结果之间的CLIP余弦相似性(Radford等人,2021)来定义文本级别的相似性。

6.2. 基准方法

我们将我们提出的管道与两种类型的T2V管道进行比较。

使用T2I的矢量化
我们首先使用扩散模型从文本提示生成图像,然后使用两种不同的矢量化方法将图像转换为SVG:(a) Potrace(Selinger,2003):一种传统的矢量化方法,涉及图像分割和曲线拟合,将光栅图像转换为SVG。(b) LIVE(Ma等人,2022):一种深度学习方法,通过在图像空间中定义损失函数来优化路径,从而生成SVG。我们使用与我们的方法相同数量的路径。

文本引导的SVG优化
我们将我们的方法与基于CLIP和扩散的优化方法进行比较:© CLIPDraw(Frans等人,2022):一种利用CLIP的图像-文本相似性度量来从提示优化SVG的方法。(d) Diffsketcher(Xing等人,2023a)
image.png

6.3. 比较

我们通过定性和定量的比较来评估我们方法的性能。定量结果如表1所示,定性结果如图6和图17所示。如表1所示,我们的方法从全面的角度来看,都优于其他方法。

与使用T2I方法的比较
尽管使用了矢量风格的提示后缀,T2I模型仍然经常生成具有复杂纹理和颜色变化的光栅图像。这在转换为具有平滑几何形状和均匀颜色的矢量图形时带来了挑战。如图6所示,使用Potrace的矢量化结果表现出过于复杂的矢量元素。这导致了路径数量的增加(表1中的简单性得分较高),以及这些路径之间缺乏层级组织,导致路径语义降低(表1中的分层语义得分较低)。此外,这种矢量化结果往往偏离了精心设计的SVG的风格,如表1中的FID得分较低所示。LIVE面临类似的挑战。当路径数量与我们的方法相同时,LIVE由于受限的路径数量通常不足以准确地重构T2I模型生成的图像,而得到了次优的矢量化结果。此外,如表1中的平滑度得分所示,LIVE生成的SVG中存在许多不规则和断开的路径。

LoRA(Hu等人,2021)是一种流行的技术,用于微调预训练的T2I模型以适应特定风格。为了生成SVG风格的图像,我们使用在基础扩散模型“SD-v1-5”上微调的“Vector Illustration”LoRA3,然后将生成的图像转换为使用Potrace的矢量图形。由于这个LoRA模型是在与我们用于评估的iconfont数据集相似的精心设计的矢量图形图像上进行微调的,所以生成的结果具有较低的FID得分。然而,如图6(c)所示,虽然这个基准实现了令人愉悦的视觉效果,但它仍然难以处理过于复杂和组织混乱的路径,这是传统图像矢量化方法中常见的问题。相比之下,我们的方法生成了具有平滑路径和分层结构的视觉上吸引人的SVG。
image.png图6. 与使用T2I方法的定性比较。

与文本引导SVG优化方法的比较
这些方法直接优化参数路径的控制点。然而,由于它们具有很高的自由度和缺乏几何约束,控制点经常会经历复杂的变换来生成与文本提示对齐的SVG。这导致路径平滑度较低,如表1中的平滑得分较低所示。图17中的放大插图突出了相交和锯齿状路径的问题,导致视觉效果不佳。此外,生成的SVG通常包含复杂和冗余的形状,使得它们难以编辑。相比之下,我们的神经路径表示有效地捕捉了路径的有效几何属性。通过在受限的潜在空间内实现文本引导优化,我们的方法促进了具有平滑路径的SVG的生成。

此外,VectorFusion在单个阶段内同时优化所有路径,这通常会导致路径杂乱和层级结构混乱。相比之下,我们的管道采用了两阶段的文本驱动神经路径优化方法,生成具有清晰和有效分层矢量路径的矢量图形。尽管使用了更少的路径,我们的方法仍然能够生成与文本提示保持语义一致的SVG。这表明我们的路径具有更好的语义意义,这一点在表1中更高的分层语义得分中得到了进一步支持。
image.png
图7. 用户研究。我们展示了人类偏好的百分比。
表2. 关于神经路径表示学习和文本驱动的神经路径优化模块的消融研究。
image.png

6.4. 用户研究

我们进行了一项感知研究,从两个方面评估我们的文本到矢量生成:整体SVG质量和与文本提示的一致性。我们从测试集中随机选择了20个文本提示,并使用第6.2节中描述的基准方法和我们的方法生成SVG。为了收集反馈,我们通过大学邮件列表招募了32名参与者(17名男性和15名女性)。参与者年龄各异,平均年龄为24岁,设计经验水平也不同。每个问题以随机顺序呈现不同方法的结果,参与者有无限的时间从每个评估指标的五个选项中选择最佳结果。如图7所示,我们的方法在两个评估指标中都获得了最高的偏好,表现出了优越的性能。具体而言,我们的方法在整体SVG质量方面获得了81.1%的选票,在文本一致性方面获得了69.2%的选票。这些结果表明,我们的方法在从文本提示生成高质量SVG方面是有效的,这些SVG更符合人类的感知。

6.5. 消融研究

我们进行了消融研究,以验证我们管道中关键组件的有效性。

6.5.1. 神经路径表示学习的消融研究

为了说明我们神经路径表示学习模块的有效性和我们双分支VAE的设计选择,我们将其与两个基准进行了比较。

第一个基准直接使用我们的文本驱动优化模块优化参数路径的控制点(无NPR)。没有神经路径表示,优化的路径经常会出现相交和突然的曲率变化。因此,这种方法生成的SVG路径质量较差,如表2所示,平滑度得分较低,如图8(a)所示。

在另一个基准中,我们用一个具有单模态表示的序列VAE替换我们的双分支VAE(序列)。然而,仅依赖序列表示被证明不足以捕捉准确重构渲染形状所需的视觉特征。图8(b)展示了重构过程中出现的问题。为了评估重构的准确性,我们计算指导图像和SVG渲染结果在RGB空间中的图像相似性 S i m g S_{img} Simg。结果显示,序列VAE相比于我们的双分支VAE, S i m g S_{img} Simg得分较低(表2)。

我们的神经路径表示被证明在路径优化方面更有效,生成更准确的路径和更好的SVG视觉质量。
image.png
图8. 神经路径表示学习的消融实验。
image.png
图9. 变分评分蒸馏优化消融实验。
image.png
图10. 分层向量化优化的消融实验。

6.5.2. 文本驱动神经路径优化的消融研究

在本小节中,我们将研究文本驱动神经路径优化模块的有效性。

首先,我们探索VSD优化(第一阶段)的效果。我们使用T2I模型生成图像,并使用我们的神经路径表示通过分层优化策略将光栅图像转换为SVG(无VSD)。然而,T2I模型通常生成具有摄影和真实风格的光栅图像,这与由平滑几何形状和平面颜色所定义的所需SVG风格不符。优化过程中缺少第一阶段会导致生成的SVG过于复杂(图9)。

我们还将VSD损失与在第一阶段使用的SDS损失进行比较。虽然SDS往往会导致过度平滑和缺乏多样性,但VSD生成具有更清晰细节和更高视觉质量的SVG,如图9所示。

我们通过删除第二阶段(仅VSD)来评估分层矢量化优化的影响。没有这个阶段,我们观察到SVG往往具有杂乱和堆叠的路径。这不仅会创建视觉伪影,还会导致SVG内部层级结构混乱,使其难以编辑和修改,如图10所示。

最后,我们将我们的分层矢量化策略与全局矢量化策略进行比较,后者涉及在第二阶段一起优化所有路径(无分层)。虽然全局矢量化可以有效地拟合图像,但它往往无法保持SVG的拓扑完整性。相比之下,我们的分层矢量化策略捕捉到SVG的层次层级结构,生成更清晰、结构更好的矢量图形,如图10所示。

应用

我们通过各种应用来展示我们方法的有效性,包括生成具有可调节细节级别和不同风格的SVG,SVG定制,图像到SVG生成以及SVG动画。

7.1. 具有可调节细节级别的SVG生成

通过调整路径数量,我们的方法可以生成不同抽象级别的矢量图形。图11展示了使用20、40和80条路径生成矢量图形的结果。使用较少的路径会产生更简单、更扁平风格的SVG,而增加路径数量则会添加更多细节和复杂性。
image.png
图11. 可控的文本到向量转换,具有不同的细节级别。

7.2. 不同风格的SVG生成

我们的方法可以通过修改文本提示中的风格相关关键词(例如,“水彩画”或“动漫风格”),或者通过约束路径参数(如填充颜色和路径数量)来生成具有多样风格的矢量图形。如图12所示,我们在提示词后附加不同的后缀,以生成符合所需美学的剪贴画和图标。为了进一步增强对线条艺术的支持,我们在一个包含清理过的草图数据集(Yan等,2020)上微调了我们的路径VAE,该数据集具有开放形式的路径。然后,通过使用黑色并在文本提示中加入“线条画”,我们的方法可以有效地生成线条艺术。
image.png
图12. 多样化风格的文本到向量生成。

7.3.SVG定制

给定一个示例SVG,我们的方法可以基于文本提示定制SVG,同时保留示例的视觉特征。为实现这一点,我们遵循(Kumari et al., 2022)中描述的方法,对预训练的扩散模型进行微调,使用示例图像(从示例SVG渲染)和包含特殊标记𝑉∗的文本提示。这个标记从示例图像中学习概念。随后,我们应用我们的方法,根据新的提示优化SVG,例如“𝑉∗拿着笔记本”或“𝑉∗风格的树”,从而生成反映所需对象或风格定制的SVG。图13展示了使用不同文本提示定制示例SVG的结果,证明了我们方法的灵活性和创造性。
image.png
图13. 文字引导的SVG定制。示例SVG:第一行来自Envato Elements创作者©Telllu;第二行来自©Freepik。
image.png
图14. 图像到SVG生成。

7.4 图像到SVG生成

我们的框架允许超越文本提示的灵活控制,这对希望从自然图像中寻找SVG风格设计灵感的设计师特别有用。例如,如图14所示,我们的方法可以从自然图像生成矢量图标。这是通过将ControlNet(Zhang等,2023b)集成到VSD优化过程中实现的,确保优化方向既尊重图像的原始结构又符合输入的文本提示。

7.5 SVG动画

我们的框架可以通过根据描述所需运动的文本提示对初始SVG进行动画处理来扩展到SVG动画。我们首先使用我们的流程生成一个静态SVG,然后通过优化一系列时间顺序的路径到视频帧来对其进行动画处理,表示为视频 = {SVG1, SVG2, …, SVGk} = {路径ij},其中i属于m,j属于k,与文本提示中描述的运动一致。具体来说,我们采用类似的两阶段优化过程。在VSD优化阶段,我们利用预训练的文本到视频扩散模型ModelScope(Wang等,2023c)来替代文本到图像模型。在逐层矢量化阶段,我们根据初始SVG序列生成一个指导视频(Geyer等,2023),其中包含k个指导图像。如图15所示,我们的方法通过平滑的运动对SVG进行动画处理,展示了我们神经路径表示的有效性。
image.png
图15. 与描述的动作对齐的SVG动画。
image.png
图16. 失败案例。

结论

在本文中,我们提出了一种新的文本到矢量管道,用于生成与给定文本提示的语义一致的矢量图形。我们的框架在潜在空间中学习神经路径表示,以捕捉路径的有效几何属性。通过采用两阶段的文本驱动神经路径优化,我们的方法能够有效地生成具有令人满意的路径属性和分层结构的矢量图形。

虽然我们的方法实现了高质量的SVG结果,但仍存在一些限制,如图16所示。首先,我们的方法依赖于扩散模型的生成能力,因此过于详细的文本提示可能导致SVG结果不准确。例如,如图16(a)所示,“乒乓球桌”和“烟灰缸”等语义元素可能会丢失。其次,我们的方法倾向于将具有复杂边界的形状简化为更平滑的路径,因为它们超出了我们路径潜在空间的表示能力。例如,图16(b)中熊的身体的详细边缘被平滑,导致原始复杂性的丢失。这可以通过收集包含更复杂路径的更大路径数据集来改进,我们将其作为未来的工作。第三,与CLIPDraw和VectorFusion等其他文本引导SVG优化方法类似,我们的方法通常由于迭代优化过程而速度较慢。在NVIDIA-3090上优化128条路径大约需要13分钟,而使用T2I方法的矢量化可以在几秒钟内完成。尽管目前速度较慢,但我们的神经路径表示为训练快速前馈T2V网络以在未来工作中取代迭代优化奠定了基础。这种方法也可能对图形布局、字体和CAD模型的生成带来好处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/635128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型的工程技巧(二)——混合精度训练

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 混合精度训练的示例请参考如下链接:regression2chatgpt/ch11_llm/gpt2_lora_optimum.ipynb 本文将讨论如何利用混合…

vue.js状态管理和服务端渲染

状态管理 vuejs状态管理的几种方式 组件内管理状态:通过data,computed等属性管理组件内部状态 父子组件通信:通过props和自定义事件实现父子组件状态的通信和传递 事件总线eventBus:通过new Vue()实例,实现跨组件通…

个人博客网站开发笔记2

文章目录 前言p2 hexo安装与使用安装 Nodejs安装 GitGit Bash的使用,代码克隆Clone p3 写作一级标题二级标题三级标题四级标题五级标题六级标题 前言 现在继续看教程 p2 hexo安装与使用 link 啊有点难受,开幕就是需要自己先安装Nodejs和Git&#xff…

git使用介绍

一、为什么做版本控制(git是版本控制工具) 为了保留之前所以的版本,以便回滚和修改 二、点击安装 三、基础操作 1、初步认识 想要让git对一个目录进行版本控制需要以下步骤: 进入要管理的文件夹进行初始化命令 git init管理…

el-table 组件实现 “合并单元格 + N行数据小计” 功能

目录 需求 - 要实现的效果初始代码代码升级(可供多个表格使用)CommonTable.vue 子组件 使用子组件1 - 父组件 - 图1~图3使用效果展示 使用子组件2 - 父组件 - 图4使用效果展示 注意【代码优化 - 解决bug】 需求 - 要实现的效果 父组件中 info 数据示例 …

Redis篇 浅谈分布式系统

分布式系统 一. 单机架构二.分布式系统引入三.引入更多的应用服务器四.读写分离五.引入缓存服务器六. 将数据库服务器拆分七.微服务架构 一. 单机架构 单机架构,就是用一台服务器,完成所有的工作. 这时候就需要我们引入分布式系统了. 分布式系统是什么含义呢?就是由一台主机服…

MySQL实战——主从异步复制搭建(一主一从)

一、搭建前的准备 主库 192.168.1.76 从库 192.168.1.77 二、搭建 1、编辑配置文件 vi /etc/my.cnf 主库 [mysqld] log-binmysql-bin server-id1 从库 [mysqld] server-id2 2、在主库创建复制用户 create user repl192.168.1.77 identified by repl123; grant replic…

9、QT—SQLite使用小记

前言 开发平台:Win10 64位 开发环境:Qt Creator 13.0.0 构建环境:Qt 5.15.2 MSVC2019 64位 sqlite版本:sqlite3 文章目录 一、Sqlite是什么二、sqlite使用步骤2.1 下载2.2 安装2.3 使用 三、Qt集成sqlite33.1 关键问题3.2 封装sql…

C#, PCANBasicd.dll库读写CAN设备数据

PCAN-Basic是一个简单的 PCAN 系统编程接口。 通过 PCAN-Basic Dll,可以将自己的应用程序连接到设备驱动程序和 PCAN 硬件,以与 CAN 总线进行通信。支持C、C++、C#、Delphi、JAVA、VB、Python等语言。 PCAN-Basic库和驱动下载地址 ​ ​https://www.peak-system.com/filead…

【C#】未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景错误提示分析原因解决方法Chromium知识点相关文章 背景 最近在使…

LeetCode 131题详解:高效分割回文串的递归与动态规划方法

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

Shell编程之条件判断语句

目录 一、条件判断 1、test命令 2、文件测试 3、整数值比较 4、字符串判断 5、逻辑测试 二、if语句 1、if单分支语句 2、双分支语句 3、多分之语句 4、case 分支语句 一、条件判断 Shell环境根据命令执行后的返回状态值(echo $?)来判断是否执行成…

力扣刷题---1748.唯一元素的和【简单】

题目描述 给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1: 输入:nums [1,2,3,2] 输出:4 解释:唯一元素为 [1,3] ,和为 4 。 示例 2:…

基于BERT的医学影像报告语料库构建

大模型时代,任何行业,任何企业的数据治理未来将会以“语料库”的自动化构建为基石。因此这一系列精选的论文还是围绕在语料库的建设以及自动化的构建。 通读该系列的文章,犹如八仙过海,百花齐放。非结构的提取无外乎关注于非结构…

电路笔记 :元器件焊接相关 酒精灯松香浴加热取芯片

记录一下只使用松香和小火源加热(如酒精灯、小蜡烛)从电路板中取芯片。 过程 多放松香 让松香淹没芯片尽量均匀加热,等芯片旁边的松香开始从芯片里冒细小的“泡泡”,就差不多了 注:这种方法也可以用于焊接&#xff0…

UBUNTU22.04无法安装nvidia-driver-550 依赖于 nvidia-dkms-550 (<= 550.54.15-1)

类似的报错信息,就是卡在了nvidia-dkms-550无法安装 Loading new nvidia-550.40.07 DKMS files… Building for 6.5.0-15-generic Building for architecture x86_64 Building initial module for 6.5.0-15-generic ERROR: Cannot create report: [Errno 17] File e…

VLAN创建及配置

V-- 虚拟 LAN ---局域网 ---地理覆盖范围较小的网络 MAN ---城域网 WAN ---广域网 VLAN ---虚拟局域网 --- 交换机和路由器协同工作后,将原先的一个广播域,逻辑上切分为多个 第一步:创建VLAN [Huawei]display vlan---查看VLAN信息 VID -- VLAN ID ----…

DNS域名解析与智能选路

要开始访问公网了!! 你在访问百度的时候,你也不知道百度的IP地址是啥,你只知道他的域名是baidu AD这台设备可以做入站的负载平衡,AD来选择你访问的时候是用联通网还是电信网,避免卡顿 pc并不会域名解析&…

[算法] 优先算法(二): 双指针算法(下)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

Python TCP编程简单实例

客户端:创建TCP链接时,主动发起连接的叫做客户端 服务端:接收客户端的连接 连接其他服务器 可以通过tcp连接其他服务器。 示例: import socket# 1.创建一个socket # 参数1:指定协议 AF_INET(ipv4&#…