螞蟻自研移動端 xNN-OCR 技術演進與能力開放

阿里巴巴移動技術發表於2021-12-27

作者:張偉辰(璟銘)

隨著手機效能的不斷提升,在手機端進行復雜的AI計算已經成為各大廠商的核心發展方向,在此之上產生了大量的端智慧應用。這種端側AI計算的模式,使得大量牽涉時效性、成本和隱私考慮的場景實現變成了可能。在這裡,我們以廣泛使用的文字識別技術(OCR)為例,介紹一下螞蟻自研移動端OCR技術(xNN-OCR)。

背景介紹

文字識別技術是計算機視覺領域中歷史悠久、應用廣泛的一個研究方向,特別是隨著深度學習技術的發展,其能力空間不斷擴大。相比雲端計算方式,移動端OCR演算法可在離線情況下完成圖片中文字提取,對於實時性、隱私保護和成本要求高的場景,有著很大的應用價值。另一方面,基於深度學習的OCR模型越來越複雜,通常具有幾十M的引數量以及幾百GFlops的計算量,如何在手機有限的計算資源下,完成OCR模型執行是一個極具挑戰的任務。在支付寶中,我們結合自研的端側推理引擎xNN和應用演算法的深度優化,研發了又小、又快、又準的xNN-OCR技術產品,從2018年上線到銀行卡號識別場景開始,陸續支撐了數十個核心業務的技術升級。本文我們將給大家完整的展開xNN-OCR的技術演進和能力開放情況。

xNN-OCR技術演進

一個端側模型研發需要經歷下面的幾個流程:訓練資料獲取和標註、網路結構設計、訓練調參、端側移植和端側部署,各個環節相互關聯也相互影響。在基礎演算法方面,xNN-OCR經歷了小字型檔、大字型檔到基於異構計算的三個模型研發階段。我們將從核心的資料、網路設計和模型壓縮層面分別介紹最新成果。

資料生成

資料像彈藥一樣,很大程度決定了模型的效果,特別是文字識別場景。中文的組合千變萬化,很多場景很難獲取到足夠的實際資料。針對這個問題,我們探索了基於GAN技術的文字生成技術。在網路設計上,背景提取、文字提取和字型提取的三個編碼器分別提取出對應的特徵資訊,通過字型遷移和背景融合,完成從源文字內容到目標字型與背景的融合。在訓練過程中,除了常規的生成和對抗損失外,還加入了識別損失函式監督合成的內容是否正確。同時,我們為了將已有的真實資料使用起來,在訓練鏈路加入Cycle-Path,提升整體資料生成效果。採用這種方式合成的卡證資料,只採用原本10%的資料量,就可以達到採用100%真實資料的識別精度。

xNN-OCR網路架構

有了資料之後,下一步就是模型設計,這裡主要介紹xNN-OCR演算法中主要的文字行檢測、文字行識別和結構化三個部分。

文字檢測演算法

相比於通用物體檢測任務,文字檢測任務具有大寬高比和傾斜框的特點。針對這兩個問題,傳統的Anchor-based的檢測方案需要配置非常大量的Anchor,帶來計算量的上升。因此我們設計了一個輕量級的檢測網路,其中骨幹網路基於ShuffleNet的設計思想,採用多層Shuffle結構,網路頭部採用Pixel-based的密集預測方式,每個輸出圖的畫素點都會輸出類別和框位置迴歸,經過融合後處理之後得到最終檢測結果。為了適應端側計算環境,通常圖輸入的解析度不會過大,帶來小目標易丟失和長目標邊界不準的問題。我們在訓練時採用Instance-balancing + OHEM的方式解決小目標丟失問題,在預測時採用加權融合NMS的方式解決邊框預測不準的問題,取得了效能和精度的大幅度提升。

文字識別演算法

文字行檢測後,對於內容的識別通常採用CRNN的結構,在之前工作的基礎上,我們針對骨幹網路和網路head設計做了進一步的升級。為了得到一個高效能輕量骨幹網路,我們通過NAS面向文字識別場景設計了相應的搜尋策略,搜尋出目標資料集上價效比最高的網路結構引數。對於CRNN的結構,我們發現模型head部分計算量非常大,佔到整體計算量50%以上,這主要是由於Softmax分類的One-hot的稀疏編碼方式導致。我們通過將稠密的Hamming編碼方式與CRNN模型結合,Head部分耗時相比原本的Softmax分類方案下降約70%。

文字結構化

文字結構化指的是輸出文字對應的結構資訊,例如卡證場景中將OCR演算法結果整理為Key-Value的輸出格式。傳統的結構化方法通常是基於文字位置和識別結果設計規則,除錯較為複雜,並且工程上需要針對不同卡證分別開發處理邏輯,部署和維護成本高。我們從文字行檢測入手,提出Instance檢測演算法進行卡證結構化。簡單來講,就是在檢測網路頭部增加文字框的類別資訊進行學習,在結構化時直接將文字框的識別內容與類別對應起來。這種方法可以節省識別運算耗時,簡化上線除錯部署流程,同時因為模型學習了欄位間的隱含關係,提升了整體的識別精度。

模型壓縮

為了提升端側模型研發效能和效果,xNN在之前基於已有結構進行輕量化的基礎上,自研了xNAS演算法工具,提供模型結構搜尋能力。在主流NAS搜尋框架基礎上,xNAS擴充套件了端側模型關心的計算量和硬體耗時等因素,結合超參搜尋(HPO)、Multi-Trial NAS、One-Shot NAS等演算法,搜尋最優的移動端模型結構。在OCR的場景,我們重點針對識別網路使用了NAS的方案,通過對每個Channel和卷積層數進行搜尋,使模型降低了70%的計算量並有2%的精度提升。

在模型壓縮方面,剪枝、浮點量化、定點化功能對於推理效能提升至關重要,特別是定點化能力,可有效降低模型尺寸和執行耗時。為解決在OCR場景中定點引數難確定導致的精度問題,xNN結合NAS思想提出qNAS演算法,有效提升了定點化精度。我們對文字檢測和識別模型進行了qNAS量化訓練,在精度下降不到1%的情況下,模型包大小下降至原本1/4左右,端側CPU上運算時耗下降約50%。

xNN-OCR 效能精度

在基礎模型研發的基礎上,我們將能力逐步的覆蓋到了大多數OCR應用場景,包括通用OCR識別以及各種卡證類識別,在保證較高精度的同時,可以在移動端計算平臺上達到近似實時運算的效能,具體指標如下(耗時為高通855上CPU單執行緒運算耗時):

能力開放

xNN-OCR作為螞蟻自研的移動端OCR技術,實現了OCR識別像掃碼一樣順暢。目前在支付寶端內,已經廣泛使用在安全風控、證件上傳和數字金融等核心應用場景。為了讓更多使用者和外部業務能夠使用到xNN-OCR,我們在支付寶端內通過小程式外掛的方式提供給外部開發者使用。支付寶外的使用者可以用過螞蟻mPaaS產品和阿里雲視覺開放平臺以離線SDK形式接入。

支付寶小程式接入可參考:https://forum.alipay.com/mini-app/post/29301014
支付寶外使用可通過釘釘群(23124039)諮詢mPaaS產品或者訪問阿里雲視覺開放平臺接入離線SDK。

為了方便廣大開發者體驗,我們將已有的外掛聚合在了“小程式體驗中心“,可通過支付寶掃描下面的二維碼進行體驗。

關注【阿里巴巴移動技術】,每週 3 篇移動技術實踐&乾貨給你思考!

相關文章