跳到內容。

Tesseract 4.00 中新的神經網路系統概述

簡介

Tesseract 4.00 包含一個新的神經網路子系統,配置為文字行辨識器。它起源於 OCRopus 的 基於 Python 的 LSTM 實作,但已在 Tesseract 中以 C++ 完全重新設計。 Tesseract 中的神經網路系統早於 TensorFlow,但與之相容,因為存在一種稱為 變數圖規格語言 (VGSL) 的網路描述語言,該語言也適用於 TensorFlow。請參閱 https://github.com/tensorflow/models/tree/master/research/street

VGSL 的想法是,有可能建立一個神經網路並訓練它,而無需學習太多東西。無需學習 Python、TensorFlow,甚至無需編寫任何 C++ 程式碼。僅需充分理解 VGSL 規格語言,以建立符合語法的正確網路描述。對於各種神經網路層類型以及它們如何組合的一些基本知識將會非常有幫助。

與 Tesseract 的整合

Tesseract 4.00 神經網路子系統作為行辨識器整合到 Tesseract 中。它可以與現有的佈局分析一起使用,以辨識大型文件中的文字,或者它可以與外部文字偵測器結合使用,以辨識單一文字行圖像中的文字。

神經網路引擎是 4.00 的預設引擎。要從單一文字行圖像辨識文字,請使用 SetPageSegMode(PSM_RAW_LINE)。這可以從命令列使用 -psm 13

神經網路引擎已整合以啟用與 Tesseract 3.04 一起使用的多語言模式,但這將在未來的版本中改進。現在支援中文、日文和韓文的垂直文字,並且應自動偵測到。

硬體和 CPU 需求

Tesseract 4.00 神經網路子系統是高度計算密集型的,使用的 CPU 資源約為基本 Tesseract 的十倍,但如果您的平台支援,則可以減輕影響,如下所示

在具有多個核心和 AVX 的機器上,簡單的英文圖像可能需要兩倍的實際時間,並使用 7 倍於基本 Tesseract 的 CPU,而印地語則比基本 Tesseract 使用更多的 CPU,但實際上在實際時間方面運行速度更快。

如果缺少上述元件,則有一個較慢的純 C++ 實作,使程式碼仍然可以工作。

支援小端和大端系統。

給開源貢獻者

初始實作缺少以下內容

實作基礎

所有網路層類型都衍生自 Network 基底類別。Plumbing 子類別是操作其他層的層的基底類別,例如,透過重新調整其輸入/輸出或組織一組層。

輸入/輸出資料「張量」是 NetworkIO,權重儲存在 WeightMatrix 中,兩者都包含一個 Tesseract GENERIC_2D_ARRAY 來保存資料。 LSTMRecognizer 提供將文字行圖像轉換為一系列 tesseract WERD_RES 類別的更高級別抽象。LSTMTrainer 同樣處理在具有 UTF-8 字串「真值」的文字行圖像上訓練網路的抽象。NetworkBuilder 負責將 VGSL 規格語言轉換為網路元素的圖表。

新增新的層類型

新的層類別必須衍生自 NetworkPlumbing,並至少實作以下虛擬方法

具有權重的層也必須實作 Update,以使用一組梯度更新權重。根據新層的特定要求,可能需要實作相當多的其他方法。請參閱 network.h,以獲取有關可能需要實作的方法的更多資訊。