基於深度學習的自然場景文字檢測及端到端的OCR中文文字識別
實現功能 ● 文字方向檢測 0、90、180、270度檢測 ● 文字檢測 後期將切換到keras版本文字檢測 實現keras端到端的文字檢測及識別 ● 不定長OCR識別 環境部署 Bash ##GPU環境 sh setup.sh ##CPU環境 sh setup-cpu.sh ##CPU python3環境 sh setup-python3.sh 使用環境:python3.6+tensorflow1.7+cpu/gpu
模型訓練
● 一共分為3個網路 ● 1. 文字方向檢測網路-Classify(vgg16) ● 2. 文字區域檢測網路-CTPN(CNN+RNN) ● 3. EndToEnd文字識別網路-CRNN(CNN+GRU/LSTM+CTC) 文字方向檢測-vgg分類
基於影象分類,在VGG16模型的基礎上,訓練0、90、180、270度檢測的分類模型. 詳細程式碼參考angle/predict.py檔案,訓練圖片8000張,準確率88.23% 模型地址 文字區域檢測CTPN 支援CPU、GPU環境,一鍵部署 文字檢測訓練參考 https://github.com/eragonruan/text-detection-ctpn OCR 端到端識別:CRNN ocr識別採用GRU+CTC端到到識別技術,實現不分隔識別不定長文字 提供keras 與pytorch版本的訓練程式碼,在理解keras的基礎上,可以切換到pytorch版本,此版本更穩定 如果你只是測試一下 執行demo.py 寫入測試圖片的路徑即可, 如果想要顯示ctpn的結果, 修改檔案./ctpn/ctpn/other.py 的draw_boxes函式的最後部分, cv2.inwrite('dest_path',img),如此, 可以得到ctpn檢測的文字區域框以及影象的ocr識別結果 如果你想訓練這個網路 1 對ctpn進行訓練 ● 定位到路徑--./ctpn/ctpn/train_net.py ● 預訓練的vgg網路路徑VGG_imagenet.npy將預訓練權重下載下來,pretrained_model指向該路徑即可, 此外整個模型的預訓練權重checkpoint ● ctpn資料集還是百度雲資料集下載完成並解壓後,將.ctpn/lib/datasets/pascal_voc.py 檔案中的pascal_voc 類中的引數self.devkit_path指向資料集的路徑即可 2 對crnn進行訓練 ● keras版本 ./train/keras_train/train_batch.py model_path--指向預訓練權重位置 MODEL_PATH---指向模型訓練儲存的位置keras模型預訓練權重 ● pythorch版本./train/pytorch-train/crnn_main.py
parser.add_argument( '--crnn', help="path to crnn (to continue training)", default=預訓練權重的路徑,看你下載的預訓練權重在哪啦) parser.add_argument( '--experiment', help='Where to store samples and models', default=模型訓練的權重儲存位置,這個自己指定) 識別結果展示 文字檢測及OCR識別結果
主要是因為訓練的時候,只包含中文和英文字母,因此很多公式結構是識別不出來的 看看純文字的
可以看到,對於純文字的識別結果還是闊以的呢,感覺可以在crnn網路在加以改進,現在的crnn中的cnn有點淺,並且rnn層為單層雙向+attention,目前正在針對這個地方進行改動,使用遷移學習,以restnet為特徵提取層,使用多層雙向動態rnn+attention+ctc的機制,將模型加深,目前正在進行模型搭建,結果好的話就發上來。
原文釋出時間為:2018-09-29 本文來自雲棲社群合作伙伴“大資料探勘DT機器學習”,瞭解相關資訊可以關注“大資料探勘DT機器學習”。