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