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 來生成、編譯和匯出高品質的向量圖形。

相關

  • 專案
  • 專案
  • 專案
  • 專案