PaddlePaddle車牌識別實戰和心得

PaddlePaddle發表於2019-01-24

車牌識別作為一種常見的影象識別的應用場景,已經是一個非常成熟的業務了,在傳統的車牌識別中,可以使用字元分割+字元識別的方式來進行車牌識別,而深度學習興起後,出現了很多端到端的車牌識別模型,不用分割字元,直接輸入車牌圖片即可識別出車牌字元。2019年1月5日百度深度學習線下技術公開課PaddlePaddle TechDay第一期演講則邀請了百度認證佈道師胡曉曼老師分享基於PaddlePaddle最新版本Fluid作用於車牌識別模型訓練的實踐。

以下為胡曉曼講師的演講實錄:

PaddlePaddle Fluid和TensorFlow的設計理念有何不同?

  • 執行流程不是“先定義再執行”,而是“先編譯再執行”,通過寫一個 Transpiler把Protobuf Message翻譯成C++程式,然後用NCVV、ICC、GCC編譯成二進位制程式碼,可以直接執行在伺服器和手機上。

  • 拋棄靜態圖思想,採用Program設計思想,原始的Program在平臺內部轉換成ProgramDesc,python的Executor接收ProgramDesc後,傳遞給Transpiler,輸出一段C++可執行的Program。

基於此,Fluid直譯器極大的加快了執行Program的速度,PaddlePaddle Fluid執行速度也會更快。

按步驟來,你也能創造自己的車牌識別資料集

1.資料準備

資料準備是做訓練的第一步,往往大家第一印象都是去網上下載車牌資料集,但是會有很多問題,如資料集不方便下載,大部分需要花錢等等。但其實除了收集真實場景的車牌資料,我們也可以自己用程式的方式生成車牌資料:

1.1生成車牌資料

1.1.1定義車牌所需字元

PaddlePaddle車牌識別實戰和心得

1.1.2生成中英文字元

一個車牌第一個字母都是中文,後面是英文和資料集合。 

PaddlePaddle車牌識別實戰和心得

1.1.3資料增強:新增畸變、噪音和模糊處理

字元生成後,需要對車牌資料進行一些資料增強,因為直接生成的資料是非常乾淨和清晰的車牌資料,跟真實場景的資料有一定差距,直接拿來用的訓練結果會非常好,但是自然場景裡,噪音、畸變、模糊等問題會影響真實圖片的效果,最後實際應用依然達不到預期。因此,我們需要對這些資料進行畸變、噪音、模糊處理,儘量貼近現實場景的圖片。

PaddlePaddle車牌識別實戰和心得

1.1.4生成車牌背景——加入背景圖片,生成車牌字串list和label,並存為圖片格式。

車牌目前有藍牌、綠牌、白牌、黑牌,常見的是藍牌和綠牌,車牌數字搞定後需要加入背景圖片,使其跟真實車牌更相近。 

PaddlePaddle車牌識別實戰和心得

1.1.5批量生成

生成字元後加入背景圖片,用函式的使其可以批量生成,做測試最好生成數量越多越好,起碼幾十萬張起。

PaddlePaddle車牌識別實戰和心得

1.2.6車牌生成效果

PaddlePaddle車牌識別實戰和心得

2.Fluid資料讀取

支援兩種傳入資料的方式:

PaddlePaddle車牌識別實戰和心得

 以PythonReader同步讀取方式為例(注:batch_size:Fluid中Tensor的第0維度固定為batch_size,在上面程式碼段中,影象輸入x的形狀為[3,32,32],分別代表:channel數目,影象的高度和寬度。如果不指定batch_size,那麼data運算元會根據實際資料來推斷batch_size的大小,如果需要自定義batch_size,就需要在第0維指定維度即可):PaddlePaddle車牌識別實戰和心得

3.Fluid網路模型

採用PaddlePaddle Fluid提供的vgg19模型來進行訓練,完整程式碼請見:

https://github.com/huxiaoman7/PaddlePaddle_code/tree/master/plate_recognition

這個模型的好處是把vgg9所有的網路模型都寫進去了。 

4.啟動訓練-引數初始化

啟動訓練的時候如何進行引數初始化,可以選擇是否使用GPU。初始化完成後,需要把資料灌進來,啟動資料模型並輸入資料。

PaddlePaddle車牌識別實戰和心得

PaddlePaddle車牌識別實戰和心得

5.模型測試並輸出日誌

PaddlePaddle車牌識別實戰和心得

 列印日誌

列印的日誌,pass表示第一次迭代,batch表示第一次batch,Loss是第一次迭代,第一次迭代裡面是98,acc是0.08,一直迭代到後面,loss值在不斷的下降。Loss值不斷下降可以畫成一張圖,根據它下降的幅度,可以幫助我們偵查這個模型訓練是否有問題。PaddlePaddle車牌識別實戰和心得 儲存模型

建立一個儲存模型的路徑,通過呼叫Fluidio這個模組,將這個模型儲存下來。PaddlePaddle車牌識別實戰和心得 6.預測模型

儲存好的模型不一定要在這臺機器上使用,在其他機器和容器裡面,也是可以進行使用的。提前將這個網路和模型載入進來,放入測試資料,就可以進行測試,預測模型。PaddlePaddle車牌識別實戰和心得

 預測結果(測試圖片)

這張圖片是預測的新能源的車牌圖片,豫GD17926,預測之後把模型載入進來,測試圖片,結果是豫GD17826,9變成8,沒有想象中的效果好,原因是隻迭代了2000次,沒有迭代太多的時間,如果模型並沒有完全收斂,大家可以在自主構建過程當中,增加迭代次數,看是否能夠達到收斂的狀態。當然,實際應用落地中,還是要看具體的業務場景。

PaddlePaddle車牌識別實戰和心得PaddlePaddle車牌識別實戰和心得

最後,曉曼老師也根據自身經驗,給初學者提出幾點關於深度學習的建議:

1.不要過於追求高大上的模型和數學名詞,做工業應用實踐,要做好最基本的工作,不要深究理論;

2.不要隨便調參,理論有助於我們懂得如何更快速、更高效調參,使其以最快的方式達到最優的狀態;

3.不要只依賴機器,機器的資源是有限的,我們更應該考慮如何把模型進行效能優化,這樣可以加速模型進行訓練;

4.提高工程能力,多看程式碼,多寫程式碼,論文多復現,以此提高自己的工程能力。

相關文章