1. 程式人生 > 其它 >caffe crnn windows上編譯多標籤分類版本

caffe crnn windows上編譯多標籤分類版本

  目的是解決caffe crnn+ctc識別定長字串的問題,參考程式碼地址:https://github.com/yalecyu/crnn.caffe。作者是linux+pycaffe,我嘗試改為windows+vs編譯。

  1.vs2013編譯crnn-caffe

  參考的程式碼是pycaffe實現生成驗證碼識別,無奈對python不熟悉,打算在VS2013上編譯cuda8.0+cudnn-v5的多標籤caffe.exe,輸入資料為ImageData,方便後續自動生成影象後進行訓練。

  首先需要修改caffe原始碼,我的原始碼是caffe-windows,參考的是這篇部落格:https://blog.csdn.net/u013010889/article/details/54614067

,修改相關image_data_layer程式碼,實現多標籤輸入。再把crnn.caffe工程中的continuation_indicator_layer、ctc_loss_layer、labelsequence_accuracy_layer、permute_layer以及第三方庫相關檔案複製到相對應的目錄下,包括.cpp、.cu、.hpp檔案。對比crnn-caffe和caffe原始碼caffe.proto,修改caffe.proto內容。參考VS2013編譯GPU版本caffe:https://www.cnblogs.com/xqy1205/p/10295862.html,將上述crnn的檔案新增到工程的libcaffe目錄下,進行編譯。至此,就實現了多標籤輸入的crnn-caffe.exe,在window平臺可以直接使用命令列進行訓練。使用caffe.exe time -model deploy.proto可以測試是否編譯成功。

  2.準備訓練圖  

  生成一些影象,resize到固定尺寸,生成標籤。根據修改的image_data_layer程式碼,標籤格式為 影象地址 標籤1 標籤2 標籤3,地址和標籤之間間隔一個空格。修改prototxt檔案內的路徑,參考網上教程和crnn-caffe的網路結構,修改路徑和網路引數。需要注意的是多標籤輸入為ImageData格式,引數需要增加一個label_dim;crnn網路中Reshape層的w*h引數要根據自己影象的寬高進行調整,作者預設為寬128*高32的影象經過卷積後為13*1,之後的ContinuationIndicator層、CtcLoss層time_step也要對應修改。測試使用的影象比較少,需要根據實際修改batch_size、test_interval、test_iter引數,我測試使用大概100張影象,訓練幾秒就收斂了。

  3.測試識別效果

  把crnn-caffe的examples\cpp_recognition\recognition.cpp程式碼替換caffe原始碼的classification.cpp,編譯生成classification.exe,安裝作者說明的格式,執行./build/examples/cpp_recognition/recognition.exe (your).jpg deploy.prototxt (your).caffemodel可以檢視識別結果。

參考部落格:

https://github.com/yalecyu/crnn.caffe

https://blog.csdn.net/u013010889/article/details/54614067

https://www.cnblogs.com/xqy1205/p/10295862.html

https://blog.csdn.net/pkuhyz/article/details/82427384