potamides/DeTikZify
Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ.
什么是 DeTikZify?
DeTikZify 是一个开源的多模态语言模型,可将草图或光栅科学图形转换为 TikZ 代码——这是一种基于 LaTeX 的语言,用于绘制高质量的矢量图形。换句话说,您提供图表、图形或草图的图像,它会输出一个语义化、可编辑的 TikZ 程序来重现该图形。该系统还通过配套的 TikZero 适配器支持*文本转 TikZ 生成。
为什么重要
- 可编辑图形 – 与 PNG 或 PDF 不同,TikZ 代码可以在不损失质量的情况下进行编辑、调整大小和设置样式。
- 自动化 – 省去了将图形手动转录为 TikZ 的繁琐过程,这在学术写作中很常见。
- 迭代优化 – 使用蒙特卡洛树搜索(MCTS)推理循环来改进生成的程序,无需额外训练。
- 开源且可重现 – 模型权重、数据集和训练脚本已在 Hugging Face 上发布;代码采用 MIT 许可证。
核心组件
| 组件 | 角色 |
|---|---|
| DeTikZify 模型(v2.5‑8b、v2‑8b、v1‑1b 等) | 多模态 LLM,将输入图像(或文本)映射到 TikZ 源代码。 |
| TikZero 适配器 | 轻量模块,在基础模型之上添加零样本文本条件。 |
| MCTS 推理引擎 | 搜索可能的 token 序列,对编译后的 TikZ 程序进行正确性和视觉相似性评分。 |
| Web UI / CLI | 简单的前端,用于交互式生成、编译、光栅化和保存 TikZ 文件。 |
| 数据集脚本(DaTikZ) | 用于重建完整 DaTikZ 训练数据的工具(原始数据因许可问题需修剪)。 |
快速开始
1. 安装包
# 直接从仓库安装(为示例添加可选的额外功能)
pip install 'detikzify[legacy] @ git+https://github.com/potamides/DeTikZify'
[legacy] 额外功能仅在旧版 v1 模型需要;如果您只使用 v2,请省略。
2. 系统要求
- TeX Live 2023(完整安装)– 用于将 TikZ 编译为 PDF。
- Ghostscript 和 Poppler – 用于将编译后的 PDF 光栅化。
- 具有至少 8 GB VRAM 的 GPU,用于 80 亿参数模型(1‑b 模型仅需 CPU)。
3. 快速入门 CLI
# 启动轻量级 Web UI(通过 --help 添加有用的标志)
python -m detikzify.webui --light
UI 可让您拖放图像或输入标题、查看生成的 TikZ,并下载 .tex 文件。
最小 Python 示例(图像 → TikZ)
from operator import itemgetter
from detikzify.model import load
from detikzify.infer import DetikzifyPipeline
# 加载最新的 8‑b 模型(自动跨 GPU 调度)
pipeline = DetikzifyPipeline(*load(
model_name_or_path="nllg/detikzify-v2.5-8b",
device_map="auto",
torch_dtype="bfloat16",
))
# 提供图像 URL(任何光栅图形或手绘草图)
fig = pipeline.sample(image="https://w.wiki/A7Cc")
# 如果程序可编译,则渲染并显示
if fig.is_rasterizable:
fig.rasterize().show()
# 执行 MCTS 10 分钟以探索多个候选方案
candidates = set()
for score, candidate in pipeline.simulate(image="https://w.wiki/A7Cc", timeout=600):
candidates.add((score, candidate))
# 保留得分最高的 TikZ 程序
best = sorted(candidates, key=itemgetter(0))[-1][1]
best.save("figure.tex")
sample 调用给出单一猜测;simulate 执行 MCTS 搜索,返回 (score, TikZFigure) 元组的流。
使用 TikZero 进行文本转 TikZ
from detikzify.model import load, load_adapter
from detikzify.infer import DetikzifyPipeline
caption = "具有两个隐藏层的多层感知器。"
pipeline = DetikzifyPipeline(
*load_adapter(
*load(
model_name_or_path="nllg/detikzify-v2-8b",
device_map="auto",
torch_dtype="bfloat16",
),
adapter_name_or_path="nllg/tikzero-adapter",
)
)
fig = pipeline.sample(text=caption)
if fig.is_rasterizable:
fig.rasterize().show()
适配器添加了一个文本编码器,因此您可以描述图表,而无需提供图片。
在哪里找到模型与数据
- 模型中心 – 所有发布的检查点都位于 Hugging Face 上的
nllg命名空间下(例如nllg/detikzify-v2.5-8b)。 - 数据集 –
nllg/datikz-v2和nllg/datikz-v3包含用于训练的成对图像‑TikZ 数据。仓库还提供了DaTikZ脚本,可从 arXiv 来源重建完整数据集。
文档与社区
- 论文 – DeTikZify: Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ(NeurIPS 2024 spotlight)。PDF 可通过 OpenReview 徽章获取。
- 演示 – 公开的 Hugging Face Space(
nllg/DeTikZify)可让您无需安装即可试用模型。如果队列很长,您可以复制该 space 以使用私有 GPU。 - Colab 笔记本 – README 中链接的快速入门笔记本,可在免费套餐上进行一键推理(仅支持 1‑b 模型)。
- GitHub issues – 关于安装问题、数据集重建和扩展 MCTS 参数的活跃讨论。
TL;DR
DeTikZify 使用大型多模态 LLM 和基于 MCTS 的搜索,将科学图表的图片或文字描述转换为可编辑的 TikZ 代码。通过 pip 安装,从 Hugging Face 加载模型,然后调用 Python API 或提供的 Web UI 来生成、编译和导出高质量的矢量图形。
相关
- 项目
- 项目
- 项目
- 项目