阿里妹導讀:隨着深度學習,尤爲是CNN和RNN等技術的飛速發展,文字識別技術(OCR)近幾年獲得了迅速的提高。與此同時,在智能化終端的大趨勢下,本地化智能識別憑藉更高效快捷的體驗以及高度的隱私保護和零流量消耗等優點備受矚目和親睞,愈來愈多的應用算法開始傾向終端化完成,OCR也不例外。接下來,螞蟻金服的算法專家亦弦爲咱們剖析這個輕量而精準的移動端OCR引擎——xNN-OCR。算法
移動端OCR的優點安全
受算法效率和算法模型大小的限制和約束,目前大部分的OCR端上應用都是上傳圖片到服務端識別再將識別結果回傳到客戶端。雖然知足了部分業務需求,但一方面,對一些實效性要求較高的業務場景來講用戶體驗無疑是一個巨大的損失,尤爲是弱網環境下。另外一方面,在面臨大促業務併發請求量過大的狀況下,服務端不得不採用降級方案,而若是端上也具有識別能力的話,即可以極大地減小服務端的壓力。此外,涉及到身份證、銀行卡等重要私人證件採用OCR進行信息提取的時候,端上「識完即焚」這種方式,對這種敏感數據和隱私保護來講是自然的堡壘。所以,具有終端OCR識別能力有着極其重要的業務價值和意義。網絡
移動端OCR的難點併發
OCR採用深度學習技術使得識別精度在特定的場景下面有了必定的保障,但模型大小和速度問題在端上依然是一大難題。目前大部分的後臺OCR模型一般幾十M或者上百M,可能比整個App安裝包都要大,是不可能直接放到移動端的,而若是走實時下載的辦法,模型過大也會形成下載失敗率高、等待時間長、App佔用空間大、流量消耗大等問題。另外,如今不少OCR算法在雲端GPU上運行尚且須要幾十到上百毫秒,要在手機CPU上保持較高的運行效率是一個極大的挑戰。框架
咱們作了什麼?——xNN-OCR性能
xNN-OCR是專門針對移動端本地識別研發的的高精度、高效率、輕體量文字識別引擎,目前支持場景數字、場景英文、場景漢字以及特殊符號的識別。xNN-OCR針對移動端開發和優化了一套基於深度學習的文字檢測和文字行識別算法框架,結合xNN的網絡壓縮和加速能力,檢測和識別模型能夠壓縮到數百K級別,在中端及以上手機CPU上達到實時(最高15FPS),可結合「掃一掃」的模式在視頻流中作到所見即所得。學習
移動端OCR技術主要分爲二個方面,一是OCR算法框架的研究和優化,主要目標是探索高精度且輕量級的檢測和識別框架,確保在壓縮以前模型的大小和速度在一個適當的範圍之內,二是利用xNN對模型進行剪枝和量化壓縮到實際應用須要的大小。下圖是咱們以銀行卡檢測和識別模型爲例子展現整個壓縮流程精度和模型的變化,其餘OCR場景識別均是相似流程。測試
目前大部分的移動端OCR技術都是以傳統算法爲主,在複雜天然場景下識別率相對較低,而基於深度學習的方案能夠很好的解決這一類問題,識別率和穩定性遠超傳統算法。目前主流的深度學習OCR主要分爲文字行檢測和行識別兩大塊,下面咱們分別介紹下:字體
文字行檢測優化
在檢測方面,咱們將物體檢測的Region-CNN框架與FCN的圖像分割框架融合在一塊兒,保留了FCN的簡單框架以適應端上對模型尺寸和預測時間的要求,同時又在模型中加入了目標檢測的位置迴歸模塊,實現了對任意形狀文本的檢測能力。在基於FCN的總體框架中,爲了在精簡模型的同時不下降檢測效果,咱們採用了各類模型精簡結構(例如Separable Convolution、Group Convolution + Channel Shuffle等,以下圖),模型的尺寸雖然不斷減少,精度並未隨之降低,在知足端上對模型的苛刻限制的同時取得了較好的檢測效果。
文字行識別
在識別方面,咱們在CRNN(CNN+LSTM+CTC)框架基礎上進行了優化改進,在Densenet的基礎上結合Multiscale Feature、Channel-wise Attention等技術設計出了一套專門用於移動端文字行識別的輕量級CNN網絡,同時對LSTM內部參數採用Project技術、全鏈接層採用SVD、BTD等降維技術進一步減小參數數量(以下圖),在ICDAR2013數據集(NOFINETUNE)上,模型大小降低約50%的前提下識別率高出CRNN近4個點,這一改進優化點爲上端打下了強有力的基礎。
xNN模型壓縮
目前咱們的OCR算法模型都是基於tensorflow開發的,xNN已經增長了對TFLite模型的支持,而且在性能上已經遠超TFLite。xNN對於咱們OCR算法的模型壓縮比在10-20倍之間,不一樣的場景稍微有些區別,與此同時,壓縮後模型的精度基本保持不變。因爲OCR是一個較複雜的識別任務,算法模型一般都很是大,而且目前大部分的後臺OCR算法都是在GPU上運行,要想在端上運行,除了須要在算法層次上作不少優化外,更須要xNN強大的模型壓縮和加速能力。
OCR技術是信息提取和場景理解極其重要的技術手段之一,應用領域很是普遍。目前移動端本地OCR應用從技術角度能夠分爲2大類,一類是印刷體文字識別,主要是針對字體變化不大、背景單一的場景,例如身份證識別、名片識別、車牌識別等等,另外一類是場景類文字識別,主要是針對字體變化大且背景複雜的場景,例如銀行卡識別、燃氣表/水錶識別、門頭名識別、場景英文識別(AR翻譯)等等,這兩類場景中後者識別難度較大,面臨的挑戰性更多。咱們將xNN-OCR用於這些場景並根據場景的特色作了各類優化,取得了一系列的成果,特別是在複雜環境下面識別依然能夠保持高效和精準,具體的數據以下表。下面簡介了幾個比較重要和常見的應用場景。
xNN-OCR目前在端上已經能較好的識別場景數字、英文以及部分漢字,不管是模型大小、速度、準確度均已達到工業應用的水平,而且全面超過基於傳統算法識別的OCR端上應用,在多個實際應用項目中對比得以驗證。另外,咱們在端上全量7000多類漢字識別上也作出了一些成果,在不久的未來會分享出來,歡迎有興趣的同窗來一塊兒研究和探討。
咱們堅信,隨着深度學習的移動端化逐步加強和移動硬件設備的逐步升級,終端智能化的應用與業務將會愈來愈多,將來xNN-OCR必將會給OCR相關的業務帶來更深遠的影響和更高的價值。
本文來自雲棲社區合做夥伴「 阿里技術」,如需轉載請聯繫原做者。