日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OCR算法:CNN+BLSTM+CTC架构(VS15)

發布時間:2023/12/31 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OCR算法:CNN+BLSTM+CTC架构(VS15) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:OCR算法-CNN+BLSTM+CTC架構

由于作者使用了Boost1.57-Vc14,而1.57的VC14版本作者沒有給出下載鏈接,因此需要自行編譯,建議換掉作者的第三方庫,使用其他的庫,比如:這篇文章:VS編譯Caffe非常簡單。網盤:3rdlibVC14。

有少量的改動,如有疑問,請移步原文,直接到作者GitHub界面...鏈接:https://github.com/senlinuc/caffe_ocr

另外一篇使用TensorFlow-LSTM的方法:TensorFlow-LSTM+CTC方法;代碼在Github上。

實驗結果:

?????? 實測結果inception的準確率要比resnet高一些,ResNet把熱情識別為然情,把溫柔識別成溫采.

主流ocr算法研究實驗性的項目,目前實現了CNN+BLSTM+CTC架構

ocrlstmctcres-lstmdensenet

  • ?41?commits
  • ?1?branch
  • ?0?releases
  • ?1?contributor
  • ?C++?87.2%
  • ?Cuda?12.6%
  • ?Other?0.2%
  • C++Cuda Other

    Clone or download Find file

    Latest commit?93775fd?4 days ago

    ?senlinuc?Update README.md

    ?3rdparty1. add openblas; 2.add vs2015 projecta month ago
    ?caffe-vsprojremove ctc_loss_layera month ago
    ?examplesadd full-res-blstm networka month ago
    ?includefix reshape bug (batch size change)5 days ago
    ?srcfix reshape bug (batch size change)6 days ago
    ?toolscommit main codea month ago
    ?README.mdUpdate README.md4 days ago

    ?README.md

    簡介

    caffe_ocr是一個對現有主流ocr算法研究實驗性的項目,目前實現了CNN+BLSTM+CTC的識別架構,并在數據準備、網絡設計、調參等方面進行了諸多的實驗。代碼包含了對lstm、warp-ctc、multi-label等的適配和修改,還有基于inception、restnet、densenet的網絡結構。代碼是針對windows平臺的,linux平臺下只需要合并相關的修改到caffe代碼中即可。

    caffe代碼修改

    ?1. data layer增加了對multi-label的支持
    ?2. lstm使用的是junhyukoh實現的lstm版本(lstm_layer_Junhyuk.cpp/cu),原版不支持變長輸入的識別。輸入的shape由(TxN)xH改為TxNxH以適應ctc的輸入結構。
    ?3. WarpCTCLossLayer去掉了對sequence indicators依賴(訓練時CNN輸出的結構是固定的),簡化了網絡結構(不需要sequence indicator layer)。
    ?4. densenet修改了對Reshape沒有正確響應的bug,實現了對變長輸入預測的支持。
    ?5. 增加transpose_layer、reverse_layer,實現對CNN feature map與lstm輸入shape的適配

    編譯

    ? 1. 安裝opencv,boost,cuda,其它依賴庫在3rdparty下(包含debug版的lib:http://pan.baidu.com/s/1nvIFojJ)
    ? 2. caffe-vsproj下為vs2015的工程,配置好依賴庫的路徑即可編譯,編譯后會在tools_bin目錄下生成訓練程序caffe.exe
    ? 3. 相關的依賴dll可從百度網盤下載(http://pan.baidu.com/s/1boOiscJ)

    實驗

  • 數據準備
    ?(1)VGG Synthetic Word Dataset
    ?(2)合成的中文數據(http://pan.baidu.com/s/1c2fHpvE?)(包含中文語料庫)
    ????
    • ? 數據為利用中文語料庫(新聞+文言文),通過字體、大小、灰度、模糊、透視、拉伸等變化隨機生成。
    • ? 字典中包含漢字、標點、英文、數字共5990個字符(語料字頻統計,全角半角合并)
    • ? 每個樣本固定10個字符,字符隨機截取自語料庫中的句子
    • ? 圖片分辨率統一為280x32
    • ? 共生成約360萬張圖片,按9:1分成訓練集、驗證集(暫時沒有分測試集)
  • 網絡設計:網絡結構在examples/ocr目錄下
  • 主要實驗結果
    • 英文數據集 VGG Synthetic Word Dataset:
    網格結構predict-CPUpredict-GPU準確率-no lexicon準確率-lexicon-minctcloss模型大小
    crnn67.13ms10.28ms0.84350.916332MB
    inception-bn-res-blstm41.62ms8.68ms0.73530.860915MB
    densenet-res-blstmN/A6.07ms0.75480.89311MB
    • 中文數據集:
    網格結構predict-CPUpredict-GPU準確率模型大小
    inception-bn-res-blstm65.4ms11.2ms0.9226.9MB
    resnet-res-blstm64ms10.75ms0.9123.2MB
    densenet-res-blstmN/A7.73ms0.96522.9MB
    densenet-no-blstmN/A2.4ms0.975.6MB
    densenet-sum-blstm-full-res-blstmN/A7.83ms0.980515.5MB
    densenet-no-blstm-vertical-featureN/A3.05ms0.98169.6MB

    中文數據集上訓練好的模型:http://pan.baidu.com/s/1i5d5zdN

    說明:

    • ? CPU是Xeon E3 1230, GPU是1080TI
    • ? densenet使用的是memory-efficient版本,其CPU代碼并沒有使用blas庫,只是實現了原始的卷積操作,速度非常慢,待優化后再做對比。
    • ? “res-blstm”表示殘差形式的blstm,“no-blstm”表示沒有lstm層,CNN直接對接CTC
    • ? 準確率是指整串正確的比例,在驗證集上統計,"準確率-no lexicon"表示沒用詞典的準確率,"準確率-lexicon-minctcloss"指先在詞典中查找Edit Distance <=2的單詞,再選擇ctcloss最小的單詞作為識別結果
    • ? predict-CPU/GPU為單張圖片的預測時間,predict-CPU的后端是openblas,MKL比openblas快約一倍。中文數據集上圖片分辨率為280x32,英文數據集100x32
    • ? densenet-sum-blstm-full-res-blstm相對于densenet-res-blstm有兩點改動:(1)兩個lstm結合成blstm的方式由concat改為sum;(2)兩層blstm都采用殘差方式連接(CNN最后的Channel數改為與blstm結點數相同),最后得到了最高的準確率。
    • ? densenet-no-blstm-vertical-feature相對于densenet-no-blstm去掉了1x4的pooling層,使得CNN最后一層的feature maps的高度為4,更好的保留筆畫在垂直方向的變化信息,再reshape BxCxHxW --> Bx(CxH)x1xW串成高度為1的feature maps, 最后準確率上略好于之前的最好結果,可見CNN feature方面還有很多可挖掘的地方。
  • 一些tricks
    ?(1) 殘差形式的blstm可顯著提升準確率,中文數據集上0.94-->0.965,兩層BLSTM都用殘差后又提升到了0.9805
    ?(2) 網絡的CNN部分相對于BLSTM部分可以設置更高的學習率,這樣可以顯著增加收斂速度
  • 疑問
    ?(1)去掉blstm,直接用CNN+CTC的結構,在中文數據集上也可以取得很高的準確率(densenet-no-blstm),為什么?
    ? ? ?可能的原因:a)CNN最后一層得到的特征對于字符級別的建模已經具有很好表征,b)lstm收斂較慢,需要更長的時間才能達到相同的精度。
  • 現存的問題
    ?(1)寬度較小的數字、英文字符會出現丟字的情況,如“11”、“ll”,應該是因為CNN特征感受野過大沒有看到文字間隙的緣故。
  • 提高準確率TODO

    ?1. 數據方面: 增大數據量,語料庫均勻采樣(https://yq.aliyun.com/articles/109555?t=t1)
    ?2. 網絡方面:增大網絡(train、test loss很接近,現有網絡沒有過擬合),Attention,STN,輔助loss

    引用

  • crnn(https://arxiv.org/abs/1507.05717)
  • multi-label的支持(http://blog.csdn.net/hubin232/article/details/50960201)
  • junhyukoh實現的lstm版本(https://github.com/junhyukoh/caffe-lstm)
  • caffe-warp-ctc(https://github.com/BVLC/caffe/pull/4681)
  • memory-efficient densenet(https://github.com/Tongcheng/caffe/)
  • 總結

    以上是生活随笔為你收集整理的OCR算法:CNN+BLSTM+CTC架构(VS15)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。