还能用 AI 生成 SVG(可缩放矢量图像)?我们来聊聊 SVG
myzbx 2025-04-26 19:43 36 浏览
文章链接:
https://mp.weixin.qq.com/s/uWu4_yM5wb-eFkBlMBD-TA
什么是 SVG
SVG(Scalable Vector Graphics,可缩放矢量图形)基于 XML 标记语言,用于描述二维图形。与我们常见的位图图像(后缀名 jpg,png 等)不同,SVG 图像本质上是通过文本形式存储对形状的描述,因此其可以缩放到任意大小而不会产生失真或降低质量。让我们通过一个例子来感受一下 SVG 图像的本质。
上图是一个 SVG 图像示例,下面的 XML 代码则对这张 SVG 图像的属性进行了描述
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.8" fill-rule="evenodd" clip-rule="evenodd" d="M12 1.25C12.4142 1.25 12.75 1.58579 12.75 2V4C12.75 4.41421 12.4142 4.75 12 4.75C11.5858 4.75 11.25 4.41421 11.25 4V2C11.25 1.58579 11.5858 1.25 12 1.25ZM1.25 12C1.25 11.5858 1.58579 11.25 2 11.25H4C4.41421 11.25 4.75 11.5858 4.75 12C4.75 12.4142 4.41421 12.75 4 12.75H2C1.58579 12.75 1.25 12.4142 1.25 12ZM19.25 12C19.25 11.5858 19.5858 11.25 20 11.25H22C22.4142 11.25 22.75 11.5858 22.75 12C22.75 12.4142 22.4142 12.75 22 12.75H20C19.5858 12.75 19.25 12.4142 19.25 12ZM12 19.25C12.4142 19.25 12.75 19.5858 12.75 20V22C12.75 22.4142 12.4142 22.75 12 22.75C11.5858 22.75 11.25 22.4142 11.25 22V20C11.25 19.5858 11.5858 19.25 12 19.25Z" fill="#1C274C"/>
<g opacity="0.5">
<path d="M5.46967 5.46967C5.76256 5.17678 6.23744 5.17678 6.53033 5.46967L6.87359 5.81293C7.16648 6.10583 7.16648 6.5807 6.87359 6.87359C6.5807 7.16648 6.10583 7.16648 5.81293 6.87359L5.46967 6.53033C5.17678 6.23744 5.17678 5.76256 5.46967 5.46967Z" fill="#1C274C"/>
<path d="M18.5303 5.46967C18.8232 5.76256 18.8232 6.23744 18.5303 6.53033L18.1871 6.87359C17.8942 7.16648 17.4193 7.16648 17.1264 6.87359C16.8335 6.5807 16.8335 6.10583 17.1264 5.81293L17.4697 5.46967C17.7626 5.17678 18.2374 5.17678 18.5303 5.46967Z" fill="#1C274C"/>
<path d="M6.87338 17.1266C7.16627 17.4195 7.16627 17.8944 6.87338 18.1873L6.53033 18.5303C6.23744 18.8232 5.76256 18.8232 5.46967 18.5303C5.17678 18.2374 5.17678 17.7626 5.46967 17.4697L5.81272 17.1266C6.10561 16.8337 6.58048 16.8337 6.87338 17.1266Z" fill="#1C274C"/>
<path d="M17.1266 17.1266C17.4195 16.8337 17.8944 16.8337 18.1873 17.1266L18.5303 17.4697C18.8232 17.7626 18.8232 18.2374 18.5303 18.5303C18.2374 18.8232 17.7626 18.8232 17.4697 18.5303L17.1266 18.1873C16.8337 17.8944 16.8337 17.4195 17.1266 17.1266Z" fill="#1C274C"/>
</g>
<path d="M7 11.0595C7 13.6018 9.00971 14.9566 10.4809 16.1692C11 16.5971 11.5 17 12 17C12.5 17 13 16.5971 13.5191 16.1692C14.9903 14.9566 17 13.6018 17 11.0595C17 8.51718 14.2499 6.71421 12 9.15837C9.75008 6.71421 7 8.51718 7 11.0595Z" fill="#1C274C"/>
</svg>可以看到,这样的一张 SVG 图像就是由这些代码所描述的,其中的每个 <path></path> 都是一条路径。
随着图像领域 AIGC 的飞速发展,我们难免会问,是否可以通过 AIGC 技术来生成 SVG 图像呢?答案是肯定的。接下来,我们将介绍几篇 SVG 图像生成方面的论文。
SVG 图像生成
DeepSVG
作为 SVG 图像生成的早期工作,DeepSVG 选用了与 VAE(Variational Autoencoder,变分自编码器) 类似的架构。但不同的一点是,DeepSVG 使用了分层编码器与分层解码器。
编码器部分分为 , 用来为每条路径生成相应的隐变量,而 则根据所有路径的隐变量生成一个最终的隐变量,作为编码器部分的最终输出。
解码器部分与编码器部分类似,分为 。 接收编码器部分输出的隐变量,都解码出每一条路径的隐变量,而 则是接收每条路径的隐变量,解码出最终结果。
但是,由于 SVG 图像有着路径间无顺序的特点,DeepSVG 使用了一个 来指派这种顺序,具体有字典序和匈牙利算法两种。
Im2Vec
说完了 DeepSVG,我们来看 Im2Vec。很明显,DeepSVG 的训练过程需要 SVG 图像来作为训练数据与监督信号,这并不有利于更大规模的模型的训练。因此,Im2Vec 提出了使用位图来监督 SVG 图像生成的方法。
Im2Vec 的结构如上图所示。位图会首先通过一个 Encoder 得到一个全局的隐变量,然后通过一个 RNN 为每条路径生成一个隐变量和一个深度信息。每条路径的隐变量会通过 PathDecoder 来得到向量化的输出。然后每一部分的向量化输出会经过光栅化转换为位图,并根据深度信息进行叠加,输出重建后的位图。这样一来,便实现了输入和输出均为位图的自监督方法。
PathDecoder 包含两个 1D circular 卷积。首先根据隐变量在圆上均匀采样一些点,第一个卷积来实现自适应密度采样,以调整采样点的密度,实现更多细节;第二个卷积来实现采样点的位移。
ClipGen
ClipGen 则是采用了与 Clip 类似的方法,在生成过程中融入了类别信息。ClipGen 的整体逻辑是自回归式生成,其中 target shape 是可选项。
当前画布会首先通过一个函数以获得曲线信息,曲线信息和类别信息会一起输入到 CNN 中,输出接下来要绘画的内容的概率图,并决定是否增加新图层。如果增加新图层,那么曲线信息、类别信息、概率图会一起输入给下一个 Network,得到新图层的绘画结果,并叠加到原画布上。
StarVector
StarVector 则是使用了 CLIP+CodeLLM 的 MLLM 来生成构成 SVG 图像的代码。
在训练时,位图和对应的 SVG 版本的代码会分别通过 CLIP 和 tokenizer 转换为 token,然后使用 next token prediction 的方法进行训练。
而在推理时,由于输入只有 image 部分,因此输入变为 image 转换为 token,由 CodeLLM 来预测 SVG 代码部分的所有 token,实现输出 SVG 的效果。
SVGDreamer
SVGDreamer 则是使用了文生图的 Diffusion Model 来实现这一过程。首先根据文本提示生成出相应的图片,并根据相应文本 token 得到注意力 heatmap。再根据 heatmap 对控制点、起止点进行采样,并使用 SIVE 损失函数进行优化,最终得到分层的 SVG 图片。
然后对 SVG 图片中的每条路径进行随机选择,并进行光栅化,然后在使用 LoRA 微调原文生图模型的过程中,使用 VPSD 优化对 SVG 图的路径进行优化。
T2V-NPR
T2V-NPR 也是使用了 Diffusion Model,但思路构建上却与 SVGDreamer 不一样。
T2V-NRP 首先构建了一个 VAE 架构的模型,来初步训练 Diffusion,如上图 a 部分。SVG 图会渲染为位图,并提取为隐变量。隐变量会通过两个 Diffusion 以分别生成 SVG 图的重建以及位图的重建。
将第一步中的 SVG Diffusion 拿出来,在第二步中使用 VSD 方法对 SVG 的路径进行优化,这一部分与 SVGDreamer 中的 VPSD 过程是类似的。
最后,SVG 的路径会在第三步中迎来逐层优化,最终得到更好观感的 SVG 图。
参考文献:
[1] DeepSVG,NIPS 2020,https://arxiv.org/abs/2007.11301
[2] Im2Vec, CVPR 2021 Oral, https://arxiv.org/abs/2102.02798
[3] ClipGen, TVCG 2021, https://arxiv.org/abs/2106.04912
[4] StarVector, Arxiv 2023, https://arxiv.org/abs/2312.11556
[5] SVGDreamer, CVPR 2024, https://arxiv.org/abs/2312.16476
[6] T2V-NPR, SIGGRAPH 2024, https://arxiv.org/abs/2405.10317
相关推荐
- 如何设计一个优秀的电子商务产品详情页
-
加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...
- 怎么在JS中使用Ajax进行异步请求?
-
大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...
- 中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革
-
前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...
- 前端监控 SDK 开发分享_前端监控系统 开源
-
一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...
- Ajax 会被 fetch 取代吗?Axios 怎么办?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...
- 前端面试题《AJAX》_前端面试ajax考点汇总
-
1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...
- Ajax 详细介绍_ajax
-
1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...
- 6款可替代dreamweaver的工具_替代powerdesigner的工具
-
dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...
- 我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊
-
接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...
- 福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光
-
时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...
- 2021年超详细的java学习路线总结—纯干货分享
-
本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...
- 不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!
-
Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...
- 2025 年 Python 爬虫四大前沿技术:从异步到 AI
-
作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...
- 最贱超级英雄《死侍》来了!_死侍超燃
-
死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...
- 停止javascript的ajax请求,取消axios请求,取消reactfetch请求
-
一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)
