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。
  • GhostscriptPoppler – 用于将编译后的 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-v2nllg/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 来生成、编译和导出高质量的矢量图形。

相关

  • 项目
  • 项目
  • 项目
  • 项目