如何訓練Tesseract 4.0
阿新 • • 發佈:2019-01-11
原文:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00
tesseract 4.0之後開始使用機器學習來進行字元識別,其訓練模型的方法與以前的版本有所不同,現將其官網的手冊翻譯如下 (未完成) 一、引言 Tesseract 4.0中包含了一個新的基於神經元網路的識別引擎,使得識別的精度比以前的版本大大提高了,相應的,對機器的計算能力要求也有了一個顯著的提高。當然對於複雜的語言,它實際上比基本Tesseract要執行得更快 和基本的Tesseract相比,神經元網路要求大量的訓練資料,訓練速度也慢了很多。對於拉丁語系的語言,版本中提供的訓練好的模型是在400000個文字行,4500種字型上訓練得到的。對於 其他語言,可能沒有這麼多 的字型,但它們訓練的文字行數是差不多的。Tesseract的訓練將需要幾天到2周的時間,而不是幾分鐘到幾個小時。即使使用了這麼多的訓練資料,你可能還是發現,它並不適合你特定的問題,因此你還需要重新訓練模型 訓練有幾個可選項:- Fine tune:從一個已經訓練過的語言開始,訓練你特定的資料。對那種和已有訓練資料很接近、但在一些細微的地方有差別,如特定的不常用的字型的場景,這種方式是一種好的選擇。即使只有少量的訓練資料,這種方式也可以執行得很好
- 去掉網路的最上層(或任意層)重新訓練一個新的最上層,並使用新的資料。如果fine tuning不能很好地工作,這可能是一個最好選項。對於訓練一個全新的語言,如果你從一種看上去相似的語言開始的話,去掉網路的最上層仍然可以工作。
- 從零開始訓練。這是一個艱鉅的任務,除非你有非常充分的理由和大量的訓練集。如果不是,你可能最終得到一個過擬合的網路模型,它在訓練資料上表現得很好,但在實際資料上表現很差
標誌 | 型別 | 預設值 | 說明 |
U | string | 無 | 指向到unicharset的路徑 |
script_dir | string | 無 | 指向langdata路徑,用來獲取unicharset和基本筆畫表 |
net_spec | string | 無 | 指定網路拓撲結構 |
model_output | string | 無 | 輸出檔案/檢查點的輸出的基本路徑 |
max_image_MB | int | 6000 | 緩衝影象時使用的最大記憶體 |
learning_rate | double | 1e-4 | SGD演算法的初始學習率 |
train_mode | int | 80 | 訓練模型,64為壓縮的unicharset,16用於迴圈訓練 |
net_mode | int | 192 | 網路模型 |
perfect_sample_delay | int | 4 | 當網路變好,僅僅反向傳播一個好的樣本在很多不好的樣本被看到之後,從上一個好的樣本允許通過 |
debug_interval | int | 0 | 如果不為0,則每過這麼多輪後顯示除錯資訊 |
weight_range | double | 0.1 | 初始權重的隨機數取值範圍 |
momentum | double | 0.9 | alpha平滑梯度時的動量值 |
max_iterations | int | 0 | 經過這麼多輪訓練後停止 |
target_error_rate | double | 0.01 | 如果平均錯誤率低於此值,則停止訓練 |
continue_from | string | none | 指向之前的檢查點以便繼續訓練或fine tune |
stop_training | bool | false | 轉換訓練中的檢查點到一個識別模型 |
append_index | int | -1 | 去掉網路的上面幾層,追加上--net_spec指定的網張來代替 |
train_listfile | string | none | 訓練資料檔案的列表檔案 |
eval_listfile | string | none | 驗證資料檔案的列表檔案,用來獨立於訓練資料對模型進行評估 |