文字識別(OCR)CRNN(基於pytorch、python3) 實現不定長中文字符識別

 

實時姿態估計網絡:https://github.com/Sierkinhane/AtrousPose

簡單單人跟蹤:https://github.com/Sierkinhane/human_tracker(基於目標檢測與特徵映射算法)

演示視頻:https://www.bilibili.com/video/av44360925

新寫的關於人臉檢測算法MTCNN的文章https://blog.csdn.net/Sierkinhane/article/details/83308658

代碼倉庫:https://github.com/Sierkinhane/mtcnn-pytorch    

斯坦福機器學習課程資料以及算法實現https://blog.csdn.net/Sierkinhane/article/details/82883161

代碼倉庫:https://github.com/Sierkinhane/CS229-ML-Implements

 

     在六七月份參加了一個比賽,做的項目是提取圖片中的文字信息,首先是接觸了一些文本檢測算法(如CTPN,East),後研究了文本識別算法(我認爲較好的是CRNN)。代碼實現是參考算法提出者的pytorch,python3版本的crnn實現。因爲python版本的迭代,導致代碼重使用比較難,其中涉及到ctc,python編碼,中文數據集,如何將模型finetune到自己的應用場景上種種問題。實現的深度學習框架是pytorch,雖然TensorFlow也可以,但是比較多坑。其實是什麼框架實現的都沒關係,現在語法都是比較簡單,看懂不難!

     因爲自己已經踩了很多坑,也填好了這些坑,就將自己填好的項目貢獻給大家!

     https://github.com/Sierkinhane/crnn_chinese_characters_rec 代碼地址

     這次分享的是文本識別算法CRNN,具體的內容我就不涉及了,這篇文章主要是做算法代碼的實現(參考原作者),建議大家研讀算法一定要看作者發的Paper! CRNN論文地址:http://arxiv.org/abs/1507.05717作者是華中科技大學的老師

     先放一些效果圖,利用360萬的中文數據訓練集,最後可以finetune到97.7%的驗證準確率,訓練好的模型在train_models文件夾

 

 

    第一、二張圖片是最近修改的一個demo,第三、四張圖是CTPN算法和CRNN的結合,可以將圖片上的任何文字信息提取。因爲CTPN要求的環境比較複雜,所以這次只放出CRNN的代碼,因爲CRNN實現環境比較簡單。

    現在開始介紹代碼:

            

代碼的實現必須是Linux環境(因爲涉及到warp-ctc的安裝,最好是Ubuntu16.04,能跳的坑我基本都填了)

1. Warp-ctc安裝

首先得安裝warp-ctc https://github.com/SeanNaren/Warp-ctc,這是pytorch版本的ctc實現(計算序列loss,具體看論文),安裝方法按照作者的步驟即可,如果遇到問題可以私聊我。我是在Ubuntu16.04安裝的,並沒有太大問題,但是在17.04就遇到很多問題,所以最好用Ubuntu16.04作爲代碼實現環境。

現在只需將pytorch更新至1.1.0,使用其自帶的ctcloss即可。

2. 測試

    安裝好ctc後,直接運行終端輸入 python3 test.py 試下效果,測試圖片在test_images文件夾下。

3. 訓練

    正確的訓練效果如圖。

    訓練之前首先製作數據集,因爲360萬的中文數據集製作成lmdb格式的數據有十幾G,就沒直接放到Github中。

    先下載360萬中文數據集:https://pan.baidu.com/s/1ufYbnZAZ1q0AlK7yZ08cvQ

    對於數據集我想說明一下,在文字識別領域有比較多的識別場景,例如場景文本識別,比較正規的圖片信息識別,這些不同的應用場景需要對應不同的數據集訓練,這次我自己應用到的場景比較正規的字體識別,所以這個訓練集不一定能夠用到所有場景,但也確實提供了一個不錯數據集資源!還有就是訓練集最好是具有語義信息,如果只是將文字隨機的組合生成圖片作爲訓練集,模型收斂會更慢並且準確率受限!

   下圖是部分訓練集

      (這個數據是在Github中找到的,暫時沒找到他的地址,很感謝作者的奉獻!)

       數據集是隨機選取定長的字數,經過模糊、傾斜、顏色變化等操作之後生成的,比較具有一般性,能很好地提升模型的Robust。

        下載好數據集之後如果解壓出錯,不完整,可以用好壓進行修復。

        修改crnn_main_v2.py中的圖片路徑和標籤路徑,運行python crnn_main_v2.py即可

        接下來是製作lmdb格式的數據。

        圖片與之對應的標籤我鏈接:https://pan.baidu.com/s/1jfAKQVjD-SMJSffOwGhh8A 密碼:u7bo,只需要將下載好的數據集放到lmdb文件中,根據情況修改to_lmdb.py中的文件名 運行該py程序就可以製作lmdb格式的數據!(需要用Python2來運行to_lmdb.py)

          製作好數據集之後將它放到lmdb_dataset文件夾中調出終端:

       python3 crnn_main.py --train_root 訓練數據集路徑 --val_root 驗證集路徑 --cuda (如果有cuda加速可選)

       大概流程就是這樣了,最主要的還是自己看待自己琢磨!

       (不定長識別是將訓練集圖片的放縮feed到神經網絡中的尺寸應用到測試中,test.py已經標註!)

       (如果有幫助到你,可以在Github給我個star!)

       (下一篇:斯坦福機器學習課程資料以及算法實現https://blog.csdn.net/Sierkinhane/article/details/82883161

 

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章