❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
🎨 「设计师集体失业?开源模型把PSD转SVG变成填空题」
大家好,我是蚝油菜花。你是否也经历过这些设计至暗时刻------
- 👉 甲方要矢量图却只给JPG,钢笔工具抠到视网膜脱落
- 👉 SVG代码手写3小时,浏览器预览发现路径节点溢出了
- 👉 用AI生成矢量图,结果导出后渐变填充全变马赛克...
今天要拯救设计圈的 StarVector ,正在重新定义矢量生成!这个学术天团打造的AI神笔:
- ✅ 「所见即代码」:上传图片/输入文字,3秒吐标准SVG文件
- ✅ 智能节点优化:比传统工具减少47%冗余路径,文件体积暴降
- ✅ 多模态理解王:能同时听懂「LOGO要圆润+科技蓝」的模糊需求
已有UI团队用它1天做完季度ICON库,插画师靠它复活手稿成矢量艺术品------你的设计流水线,是时候注射「AI矢量加速剂」了!
🚀 快速阅读
StarVector是一个开源的多模态视觉语言模型,专注于图像和文本到SVG的转换。
- 核心功能:支持图像到SVG和文本到SVG两种生成模式,输出标准可编辑的矢量图形文件
- 技术原理:基于StarCoder架构的多模态模型,在包含200万样本的SVG-Stack数据集上训练,采用视觉编码器+语言模型联合处理
StarVector 是什么
StarVector 是开源的多模态视觉语言模型,由ServiceNow Research、Mila -- Quebec AI Institute 和 ETS Montreal 联合开发,专注于将图像和文本转换为可缩放矢量图形(SVG)代码。模型采用多模态架构,能同时处理图像和文本信息,直接在 SVG 代码空间中操作,生成标准的、可编辑的 SVG 文件。
StarVector 在包含超过 200 万个 SVG 样本的 SVG-Stack 数据集上训练,提供 StarVector-1B 和 StarVector-8B 两种规模,满足不同需求。相比传统矢量转换工具,它能更好地理解图像语义,生成更紧凑、结构更合理的SVG代码。
StarVector 的主要功能
- 图像到 SVG 的转换:能将图像直接转换为 SVG 代码,实现图像的矢量化
- 文本到 SVG 的生成:可以根据文本指令生成相应的 SVG 图形
StarVector 的技术原理
- 多模态架构:采用视觉编码器提取图像特征,通过适配器映射到语言模型嵌入空间,实现对图像和文本的统一处理
- 图像编码与视觉标记生成:通过Vision Transformer将图像转换为视觉标记,捕捉形状、颜色等关键特征
- 语言模型与 SVG 代码生成:基于StarCoder语言模型,通过自回归预测生成SVG代码
- 大规模数据集训练:在包含200万样本的SVG-Stack数据集上训练,支持多样化任务
如何运行 StarVector:从图像和文本生成可缩放矢量图形代码
StarVector 是一个用于生成可缩放矢量图形(SVG)的多模态视觉-语言模型,支持从图像到 SVG 和从文本到 SVG 的生成任务。下面将指导您如何安装 StarVector、运行其代码生成功能以及进行模型训练和评估:
安装
克隆代码库并创建虚拟环境
bash
git clone https://github.com/joanrod/star-vector.git
cd star-vector
conda create -n starvector python=3.11.3 -y
conda activate starvector
pip install --upgrade pip # 启用 PEP 660 支持
pip install -e .
安装训练所需依赖
bash
pip install -e ".[train]"
更新代码库
bash
git pull
pip install -e .
快速开始
任务:图像到SVG生成
以下代码展示了如何使用 StarVector 将图像转换为 SVG 代码:
python
from PIL import Image
from starvector.model.starvector_arch import StarVectorForCausalLM
from starvector.data.util import process_and_rasterize_svg
# 加载模型
model_name = "starvector/starvector-8b-im2svg"
starvector = StarVectorForCausalLM.from_pretrained(model_name)
# 将模型移到 GPU 并设置为评估模式
starvector.cuda()
starvector.eval()
# 加载输入图像
image_pil = Image.open('assets/examples/sample-0.png')
image = starvector.process_images([image_pil])[0].cuda()
batch = {"image": image}
# 生成 SVG 代码
raw_svg = starvector.generate_im2svg(batch, max_length=1000)[0]
svg, raster_image = process_and_rasterize_svg(raw_svg)
使用 HuggingFace AutoModel
python
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoProcessor
from starvector.data.util import process_and_rasterize_svg
import torch
# 加载模型
model_name = "starvector/starvector-8b-im2svg"
starvector = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, trust_remote_code=True)
processor = starvector.model.processor
tokenizer = starvector.model.svg_transformer.tokenizer
# 将模型移到 GPU 并设置为评估模式
starvector.cuda()
starvector.eval()
# 加载输入图像
image_pil = Image.open('assets/examples/sample-18.png')
image = processor(image_pil, return_tensors="pt")['pixel_values'].cuda()
if not image.shape[0] == 1:
image = image.squeeze(0)
batch = {"image": image}
# 生成 SVG 代码
raw_svg = starvector.generate_im2svg(batch, max_length=4000)[0]
svg, raster_image = process_and_rasterize_svg(raw_svg)
训练
确认依赖已安装
bash
pip install -e ".[train]"
设置环境变量
bash
export HF_HOME=<模型存储路径>
export HF_TOKEN=<您的 HuggingFace 令牌>
export WANDB_API_KEY=<您的 WandB 令牌>
export OUTPUT_DIR=<输出路径>
预训练(第 1 阶段)
StarVector-1B 训练
bash
accelerate launch --config_file configs/accelerate/deepspeed-8-gpu.yaml starvector/train/train.py config=configs/models/starvector-1b/im2svg-stack.yaml
StarVector-8B 训练
bash
torchrun \
--nproc-per-node=8 \
--nnodes=1 \
starvector/train/train.py \
config=configs/models/starvector-8b/im2svg-stack.yaml
微调(第 2 阶段)
文本到 SVG 微调
bash
# StarVector-1B
accelerate launch --config_file config/accelerate/deepspeed-8-gpu.yaml starvector/train/train.py config=configs/models/starvector-1b/text2svg-stack.yaml
# StarVector-8B
torchrun \
--nproc-per-node=8 \
--nnodes=1 \
starvector/train/train.py \
config=configs/models/starvector-8b/text2svg-stack.yaml
评估
HuggingFace 生成后端
bash
# StarVector-1B 评估
python starvector/validation/validate.py \
config=configs/generation/hf/starvector-1b/im2svg.yaml \
dataset.name=starvector/svg-stack
# StarVector-8B 评估
python starvector/validation/validate.py \
config=configs/generation/hf/starvector-8b/im2svg.yaml \
dataset.name=starvector/svg-stack
演示
启动控制器
bash
python -m starvector.serve.controller --host 0.0.0.0 --port 10000
启动 Gradio 服务器
bash
python -m starvector.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload --port 7000
启动模型工作节点
bash
python -m starvector.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path joanrodai/starvector-1.4b
资源
- 项目主页 :starvector.github.io/
- GitHub 仓库 :github.com/joanrod/sta...
- HuggingFace 仓库 :huggingface.co/starvector/...
- HuggingFace 仓库 :huggingface.co/starvector/...
- 在线演示 Demo :huggingface.co/spaces/star...
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦