拖拽公式圖片、一鍵轉換LaTex公式,這款開源公式識別神器比Mathpix Snip更適合你

機器之心編輯部

只需要把公式圖片用滑鼠拖動到工具內,就能一鍵轉成 LaTex 公式。

寫論文、做研究時,最讓你頭疼的是什麼?想必公式編輯會榜上有名。那麼有沒有便捷的方法進行公式編輯呢?這裡推薦一款神器,它使用 PyTorch Lightning 可將 LaTeX 數學方程的圖像對映到 LaTeX 程式碼。

它的效果是這樣的,輸入一張帶公式的圖片,它能轉換成 LaTeX 程式碼形式:

而它的名字也是很直接的,就叫做「Image to LaTex Converter」,把產品功能寫在了明面上。

項目地址:https://github.com/kingyiusuen/image-to-latex

網友表示:我太需要這個了。

也有網友表示,你也可以使用 CLIP 來實現,因為這個工具是將完整的方程拆分為單個字符。

此前,很多人都在用 Mathpix Snip,這個工具雖然好用,但是只能提供 50 次免費轉換。之後,一位中國開發者也創建了一款類似工具「Image2LaTeX」,使用者輸入公式截圖即可以自動將其對應的 LaTex 文字轉換出來。效果也雖好,不過也只是提供了 1000 次從文件中提取公式的能力。

此次項目的創建者為明尼蘇達大學雙城分校計量心理學博士生 King Yiu Suen,他本科畢業於香港中文大學,致力於研究評估心理測試和教育評估的統計學方法,以及測試響應資料的建模。

該項目為何能夠一鍵轉換成 LaTex 公式?這要都得益於背後使用的資料集和模型。

項目背後的資料集與模型

作者也對打造過程進行了詳細的介紹。2016 年,在 Yuntian Deng 等作者合著的一篇 OCR 主題論文《What You Get Is What You See: A Visual Markup Decompiler》中,他們介紹了叫做「im2latex-100K」的模型(原始版本和預處理版本),這是一個由大約 100K LaTeX 數學方程圖像組成的資料集。

作者使用該資料集訓練了一個模型,使用 ResNet-18 作為具有 2D 位置編碼的編碼器,使用 Transformer 作為具有交叉熵損失的解碼器。這個過程類似於《Full Page Handwriting Recognition via Image to Sequence Extraction》Singh et al. (2021) 中描述的方法,不過作者只使用 ResNet up to block 3 來降低計算成本,並且去掉了行號編碼,因為它不適用於這個問題。

Singh et al. (2021)論文中的系統架構。

最初,作者使用預處理資料集來訓練模型,因為預處理圖像被下采樣到原始大小的一半以提高效率,而且分組並填充為相似的大小以方便批處理。但結果表明,這種嚴格的預處理被證明是一個巨大的限制。儘管該模型可以在測試集(其預處理方式與訓練集相同)上取得合格的性能,但它並不能很好地泛化到資料集之外的圖像,這很可能是因為其他圖像質量、填充和字型大小與資料集中的圖像不同。

使用相同資料集嘗試解決相同問題的其他人也發現了這種現象。下圖這位開發者試圖從論文中裁剪圖像,圖像與資料集中的圖像大小相似。但即使對於簡單的公式,輸出也會完全失敗:

為此,作者使用了原始資料集並在資料處理 pipeline 中包含了圖像增強(例如隨機縮放、高斯噪聲)以增加樣本的多樣性。此外,作者沒有按大小對圖像進行分組,而是進行了均勻取樣並將它們填充為批次中最大圖像的大小,以便模型必須學習如何適應不同的填充大小。

作者在使用資料集中遇到的其他問題包括:

  • 一些 LaTex 程式碼生成了視覺上相同的輸出,比如 \left(和 \ right),看起來與 (和)) 一樣,因此做了規範化處理;

  • 一些 LaTex 程式碼用來添加空間,比如 \ vspace{2px}和 \ hspace{0.3mm})。但是,間距對於人類來說也很難判斷。此外,表述相同間距有很多方法,比如 1 cm = 10 mm。最後,作者比希望模型在空白圖像上生成程式碼,因此刪除了這些空白圖像。

不過,該項目也有一些可能需要改進的地方:

  • 更好地資料清理(比如刪除間距命令)

  • 儘可能多地訓練模型(由於時間原因,只訓練了 15 個 epoch 的模型,但是驗證損失依然下降)

  • 使用集束搜尋(只實現了貪婪搜尋)

  • 使用更大的模型(比如 ResNet-34 而不是 ResNet-18)

  • 進行一些超參數調優

作者使用的是 Google Colab,計算資源有限,因此並沒有做到以上這些。

項目的使用與部署

在項目設置方面:首先你需要將該項目克隆到計算機,並將命令列放置到庫檔案夾中:

    git clone https://github.com/kingyiusuen/image-to-latex.gitcd image-to-latex

    然後,創建一個名為 venv 的虛擬環境並安裝所需的軟體包:

      make venvmake install-dev

      在資料預處理方面:執行如下命令下載 im2latex-100k 資料集並進行所有預處理任務(圖像裁剪可能需要一個小時):

        python scripts/prepare_data.py

        在模型訓練方面:啟動訓練 session 的命令如下:

          python scripts/run_experiment.py trainer.gpus=1 data.batch_size=32

          你可以在 conf/config.yaml 中修改配置,也可以在命令列中修改。

          在實驗跟蹤方面:最佳模型 checkpoint 將自動上傳到 Weights & Biases (W&B)(在訓練開始前你需要先進行註冊或登入 W&B )。如下是從 W&B 下載訓練模型 checkpoint 的示例命令:

            python scripts/download_checkpoint.py RUN_PATH

            將 RUN_PATH 替換為運行的路徑,運行路徑格式為 //。如果你想查找特定實驗運行的運行路徑,請轉到 dashboard 中的 Overview 選項卡進行查看。

            例如,你可以使用如下命令下載最佳運行:

              python scripts/download_checkpoint.py kingyiusuen/image-to-latex/1w1abmg1

              checkpoint 將被下載到項目目錄下一個名為 artifacts 的檔案夾中。

              測試和持續集成方面:以下工具可用於 lint 程式碼庫:

              • isort:對 Python 腳本中的 import 語句進行排序和格式化;

              • black:遵循 PEP8 的程式碼格式化程序;

              • flake8:在 Python 腳本中報告風格問題的程式碼檢查器;

              • mypy:在 Python 腳本中執行靜態類型檢查。

              使用下面的命令來運行所有的檢查和格式化程序:

                make lint

                在部署方面:訓練好的模型通過創建的 API 進行預測,啟動和運行伺服器命令如下:

                  make api

                  要運行 Streamlit 應用程序,請使用以下命令創建一個新的終端窗口:

                    make streamlit

                    應用程序應該在瀏覽器中自動打開,你也可通過 http://localhost:8501 / 進行查看。想讓這個應用程序運行,你還需要下載實驗運行的工件,啟動並運行 API。

                    為 API 創建一個 Docker 映像:

                      make docker

                      相關文章

                      誰在害怕ChatGPT?

                      誰在害怕ChatGPT?

                      任何新生事物出來,總有人詆譭; 任何新生科技爆發,總有人說不過如此; 任何新生概念出現,總有人說泡沫。 其實可以試著先去了解,去試用,然後再...