拖拽公式圖片、一鍵轉換LaTex公式,這款開(kāi)源公式識別神器比Mathpix Snip更適合你
只需要把公式圖片用鼠標拖動(dòng)到工具內,就能一鍵轉成 LaTex 公式。
寫(xiě)論文、做研究時(shí),最讓你頭疼的是什么?想必公式編輯會(huì )榜上有名。那么有沒(méi)有便捷的方法進(jìn)行公式編輯呢?這里推薦一款神器,它使用 PyTorch Lightning 可將 LaTeX 數學(xué)方程的圖像映射到 LaTeX 代碼。
它的效果是這樣的,輸入一張帶公式的圖片,它能轉換成 LaTeX 代碼形式:
而它的名字也是很直接的,就叫做「Image to LaTex Converter」,把產(chǎn)品功能寫(xiě)在了明面上。
項目地址:https://github.com/kingyiusuen/image-to-latex
網(wǎng)友表示:我太需要這個(gè)了。
也有網(wǎng)友表示,你也可以使用 CLIP 來(lái)實(shí)現,因為這個(gè)工具是將完整的方程拆分為單個(gè)字符。
此前,很多人都在用 Mathpix Snip,這個(gè)工具雖然好用,但是只能提供 50 次免費轉換。之后,一位中國開(kāi)發(fā)者也創(chuàng )建了一款類(lèi)似工具「Image2LaTeX」,用戶(hù)輸入公式截圖即可以自動(dòng)將其對應的 LaTex 文本轉換出來(lái)。效果也雖好,不過(guò)也只是提供了 1000 次從文檔中提取公式的能力。
此次項目的創(chuàng )建者為明尼蘇達大學(xué)雙城分校計量心理學(xué)博士生 King Yiu Suen,他本科畢業(yè)于香港中文大學(xué),致力于研究評估心理測試和教育評估的統計學(xué)方法,以及測試響應數據的建模。
該項目為何能夠一鍵轉換成 LaTex 公式?這要都得益于背后使用的數據集和模型。
項目背后的數據集與模型
作者也對打造過(guò)程進(jìn)行了詳細的介紹。2016 年,在 Yuntian Deng 等作者合著(zhù)的一篇 OCR 主題論文《What You Get Is What You See: A Visual Markup Decompiler》中,他們介紹了叫做「im2latex-100K」的模型(原始版本和預處理版本),這是一個(gè)由大約 100K LaTeX 數學(xué)方程圖像組成的數據集。
作者使用該數據集訓練了一個(gè)模型,使用 ResNet-18 作為具有 2D 位置編碼的編碼器,使用 Transformer 作為具有交叉熵損失的****。這個(gè)過(guò)程類(lèi)似于《Full Page Handwriting Recognition via Image to Sequence Extraction》Singh et al. (2021) 中描述的方法,不過(guò)作者只使用 ResNet up to block 3 來(lái)降低計算成本,并且去掉了行號編碼,因為它不適用于這個(gè)問(wèn)題。
Singh et al. (2021)論文中的系統架構。
最初,作者使用預處理數據集來(lái)訓練模型,因為預處理圖像被下采樣到原始大小的一半以提高效率,而且分組并填充為相似的大小以方便批處理。但結果表明,這種嚴格的預處理被證明是一個(gè)巨大的限制。盡管該模型可以在測試集(其預處理方式與訓練集相同)上取得合格的性能,但它并不能很好地泛化到數據集之外的圖像,這很可能是因為其他圖像質(zhì)量、填充和字體大小與數據集中的圖像不同。
使用相同數據集嘗試解決相同問(wèn)題的其他人也發(fā)現了這種現象。下圖這位開(kāi)發(fā)者試圖從論文中裁剪圖像,圖像與數據集中的圖像大小相似。但即使對于簡(jiǎn)單的公式,輸出也會(huì )完全失?。?/p>
為此,作者使用了原始數據集并在數據處理 pipeline 中包含了圖像增強(例如隨機縮放、高斯噪聲)以增加樣本的多樣性。此外,作者沒(méi)有按大小對圖像進(jìn)行分組,而是進(jìn)行了均勻采樣并將它們填充為批次中最大圖像的大小,以便模型必須學(xué)習如何適應不同的填充大小。
作者在使用數據集中遇到的其他問(wèn)題包括:
一些 LaTex 代碼生成了視覺(jué)上相同的輸出,比如 \left(和 \ right),看起來(lái)與 (和)) 一樣,因此做了規范化處理;
一些 LaTex 代碼用來(lái)添加空間,比如 \ vspace{2px}和 \ hspace{0.3mm})。但是,間距對于人類(lèi)來(lái)說(shuō)也很難判斷。此外,表述相同間距有很多方法,比如 1 cm = 10 mm。最后,作者比希望模型在空白圖像上生成代碼,因此刪除了這些空白圖像。
不過(guò),該項目也有一些可能需要改進(jìn)的地方:
更好地數據清理(比如刪除間距命令)
盡可能多地訓練模型(由于時(shí)間原因,只訓練了 15 個(gè) epoch 的模型,但是驗證損失依然下降)
使用集束搜索(只實(shí)現了貪婪搜索)
使用更大的模型(比如 ResNet-34 而不是 ResNet-18)
進(jìn)行一些超參數調優(yōu)
作者使用的是 Google Colab,計算資源有限,因此并沒(méi)有做到以上這些。
項目的使用與部署
在項目設置方面:首先你需要將該項目克隆到計算機,并將命令行放置到庫文件夾中:
git clone https://github.com/kingyiusuen/image-to-latex.git
cd image-to-latex
然后,創(chuàng )建一個(gè)名為 venv 的虛擬環(huán)境并安裝所需的軟件包:
make venv
make install-dev
在數據預處理方面:執行如下命令下載 im2latex-100k 數據集并進(jìn)行所有預處理任務(wù)(圖像裁剪可能需要一個(gè)小時(shí)):
python scripts/prepare_data.py
在模型訓練方面:?jiǎn)?dòng)訓練 session 的命令如下:
python scripts/run_experiment.py trainer.gpus=1 data.batch_size=32
你可以在 conf/config.yaml 中修改配置,也可以在命令行中修改。
在實(shí)驗跟蹤方面:最佳模型 checkpoint 將自動(dòng)上傳到 Weights & Biases (W&B)(在訓練開(kāi)始前你需要先進(jìn)行注冊或登錄 W&B )。如下是從 W&B 下載訓練模型 checkpoint 的示例命令:
python scripts/download_checkpoint.py RUN_PATH
將 RUN_PATH 替換為運行的路徑,運行路徑格式為 < entity>/<project>/<run_id>。如果你想查找特定實(shí)驗運行的運行路徑,請轉到 dashboard 中的 Overview 選項卡進(jìn)行查看。
例如,你可以使用如下命令下載最佳運行:
python scripts/download_checkpoint.py kingyiusuen/image-to-latex/1w1abmg1
checkpoint 將被下載到項目目錄下一個(gè)名為 artifacts 的文件夾中。
測試和持續集成方面:以下工具可用于 lint 代碼庫:
isort:對 Python 腳本中的 import 語(yǔ)句進(jìn)行排序和格式化;
black:遵循 PEP8 的代碼格式化程序;
flake8:在 Python 腳本中報告風(fēng)格問(wèn)題的代碼檢查器;
mypy:在 Python 腳本中執行靜態(tài)類(lèi)型檢查。
使用下面的命令來(lái)運行所有的檢查和格式化程序:
make lint
在部署方面:訓練好的模型通過(guò)創(chuàng )建的 API 進(jìn)行預測,啟動(dòng)和運行服務(wù)器命令如下:
make api
要運行 Streamlit 應用程序,請使用以下命令創(chuàng )建一個(gè)新的終端窗口:
make streamlit
應用程序應該在瀏覽器中自動(dòng)打開(kāi),你也可通過(guò) http://localhost:8501 / 進(jìn)行查看。想讓這個(gè)應用程序運行,你還需要下載實(shí)驗運行的工件,啟動(dòng)并運行 API。
為 API 創(chuàng )建一個(gè) Docker 映像:
make docker
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。
互感器相關(guān)文章:互感器原理
cvt相關(guān)文章:cvt原理
斷路器相關(guān)文章:斷路器原理
高壓真空斷路器相關(guān)文章:高壓真空斷路器原理 絕緣電阻測試儀相關(guān)文章:絕緣電阻測試儀原理 漏電斷路器相關(guān)文章:漏電斷路器原理