牟永強 范寶杰 , 孫 超 嚴 蕤 郭怡適
傳統零售業抑或是近年來興起的快消新零售,渠道核查是其中的必要環節.傳統的作業方式主要分為業務代表現場考察以及第三方外包核查,但都存在人工誤差大、核查周期長、核查成本高以及誤差數據無法溯源等缺點.隨著深度學習的迅速發展,AI (人工智能)已經成為高端科技的代名詞,各行各業的AI 應用層出不窮.基于深度學習的圖像識別技術憑借著高精度、高泛化性,非常適合應用于渠道核查的業務場景,是核查工作強大的助力.渠道核查主要包含兩大識別內容,SKU (Stock keeping unit),(庫存量單位)識別和價格牌識別,本文工作主要針對價格牌識別的需求.價格作為銷售數據的基石,對識別精度非常敏感,目前基于深度學習的價格牌識別技術容易受到其外觀樣式、拍攝質量等因素的影響,如模糊、傾斜、光照不均勻等.因此,如何克服實際應用中可能遇到的復雜場景,準確識別價格牌中的信息是 OCR (Optical character recognition)領域的一個重要研究目標.
目前,應用性較廣的價格牌識別算法大多以文本識別算法為基礎.基于卷積循環神經網絡(Convolution recurrent neural network,CRNN)[1]的識別方法,為序列識別任務帶來了突破性的進展,也為文本識別領域打開了一扇大門.隨后基于CRNN變體和各種注意力機制的文本識別算法[2-3]層出不窮,相較于前者,增加的注意力機制主要用于關聯輸入信息的相關性,這種方式顯著提高了通用文本的識別精度.
目前國內外的文本識別研究,普遍關注沒有符號的文字序列.對于價格牌這類帶有符號的序列識別,一些在通用文本數據集上表現優異的算法[4-5],性能并不能令人滿意.為此本文提出了一種多任務的卷積神經網絡,有效地提高了價格牌的識別精度.
在價格牌的識別任務中,精準地識別所占像素比例很小或直接被省略的小數點,是非常困難的一項任務,也是其區別其他文本圖像識別任務的重點.現有的絕大部分算法是將價格牌的整體進行無差別的識別,但是由于價格牌的種類繁多,以及一些客觀因素的影響,導致其在圖像中的特征并不明顯,即使采用基于上下文關系的序列識別算法也很難準確定位小數點的位置.為此本文提出了一種將整數部分與小數部分分開,協同識別整體的方法,實現對小數點的準確定位.使用端對端的多任務訓練策略進行學習,降低訓練的難度.經過實驗證明,本文提出的方法不僅在識別精度上有著優越的指標,對于小數點的識別更是超越了以往深度學習算法的成績.
由于已開源的數據集中暫無價格牌這一特定場景,我們將實驗中使用的價格牌數據集開源出來以供研究使用.我們的數據集采集自真實貨架場景圖像,涵蓋不同樣式,不同拍攝角度,不同光照變化等,其中包含訓練集10 000 張,測試集1 000 張,困難測試集1 000 張(包含了手寫價格、模糊價格以及其他影響因素的價格數據),訓練集及測試集的數字區域比較清晰,辨識度較高,而困難測試集的數字區域大都存在干擾項(如反光、拍攝重影、雙價格標簽等),辨識度較低.此外,為了進一步驗證本文所提出方法的泛化能力,我們在類似的車牌數據集中也進行了相關實驗,實驗結果表明了本文所提出方案的有效性.
OCR (Optical character recognition,光學字符識別,現泛指所有圖像文字檢測和識別技術)的研究,一直是圖像識別領域的重要研究方向之一.隨著深度學習研究的飛躍,關于自然場景的圖像文本識別算法不勝枚舉,掀起了一輪又一輪的競賽狂潮.
CRNN 主要用于圖像的序列識別問題,包含卷積層、循環層和轉錄層,結構如圖1 所示,是OCR技術的常用模型.CRNN 主要可以分為以下幾個部分:首先輸入圖像預處理后通過深層卷積神經網絡,得到輸出的高級特征圖(Feature map);隨后將feature map 的每一列或每幾列作為一個時間序列輸入由雙向LSTM (Bi-directional Long shortterm memory)網絡構成的循環層;最后輸出一個序列標簽(預測特征序列中的每一個特征向量的標簽分布——真實結果的概率列表).轉錄層采用CTC (Connectionist temporal classification),(時序連接分類)[6]或者其他高效的序列分類方法[7]進行轉錄,處理循環層所輸出的序列標簽,將所有可能的 “字符定位”結果進行整合,轉換為最終的識別結果.

圖1 卷積循環網絡結構Fig.1 The structure of convolutional recurrent neural network
雖然CRNN 的結構理論上可以預測任意的序列對應關系,但實際中編碼和解碼的準確度很大程度上依賴于語義向量.語義向量在編碼壓縮過程中存在信息丟失,而語義向量的信息偏差會嚴重影響解碼端的準確率.其次,解碼過程在每個時間步使用的內容向量是相同的,這也會對解碼準確率造成一定程度的影響.為了解決以上問題,CRNN 模型加入了注意力機制[8].
不同的注意力機制對序列的處理方法不同,應用較廣泛的注意力機制[8]是由編碼器將輸入數據編碼成一個向量的序列后,在解碼階段的每一個時間步,注意力模型都會選擇性地從向量序列中挑選出一個子集進行輸出預測(這種選擇基于解碼階段隱層狀態與輸入序列的相關性).這種機制可以保證在產生每一個輸出的時候,都能找到當前輸入序列應該重點關注的信息,也表明每一個輸出所參考的語義向量都是不同的.
深度學習中單任務學習模型關注點通常是對某一個特定度量進行優化,比如分類精度、識別精度或者回歸指標等.在訓練的基準模型上,我們不斷地微調模型,直到模型的結果不能繼續優化.雖然這種方法可以得到高于基準模型的結果,但我們選擇性地忽略了可能提升特征度量指標的其他信息.
區別于單任務模型將注意力聚焦于某個度量,多任務學習可以共享相關任務之間的表征,使模型可以更好地學習原始任務.某種程度上,多任務學習可以認為是人類學習的思維延伸,通過人類學習的先驗知識,關聯多任務之間的表征信息.從信息學的角度,可以將多任務學習視為信息歸納轉移的一種方式.
分析價格牌數據,識別過程最大的困難便是小數點的定位.如圖2 所示,小數點的位置總是模糊不清或被省略,單任務的端到端網絡包括針對復雜文本的[9]也很難做到定位小數點.因此,提出拆分價格牌的整數部分和小數部分,通過多任務學習的策略聯合學習小數點的特征信息,價格牌拆分示意圖如圖3 所示.這種策略需要價格牌數據結構的先驗知識,將分支結果與小數點后期拼接,得到完整的價格牌數據.

圖2 價格牌圖像Fig.2 Images of some price tag samples

圖3 基準識別與多分支識別結果的生成方式Fig.3 Baseline method compared with multi-branch method
在計算機視覺領域,最常見的多任務學習方法便是共享卷積層[10]參數,同時獨立學習特定任務的其他層參數.
CRNN 及其變體的結構在Coco[11]、ICDAR2015[12]等通用文本數據集上取得了優異成績,證明了其方法的有效性.文獻[13]對近年來具有代表性的文本識別算法結構進行了總結,通過實驗分析,確定了在自然文本數據集上表現最優的CRNN 結構.
沿著CRNN 的方法,我們使用卷積網絡提取文本的特征,沿寬度方向切片作為輸入特征送入循環層,得到特征序列的標簽分布,之后用基于LSTM 的編碼器和解碼器將特征序列轉換為最終的識別結果,網絡結構如圖4 所示.

圖4 基礎單任務識別網絡結構Fig.4 The structure of our basic single recognition network
本文設計的多任務學習模型不同于一般聯合學習[14],而是基于價格牌可拆分的數據結構知識.整體結構如圖5 所示,其中IB (Integer branch)表示整數分支,DB (Decimal branch)表示小數分支,NDPB (No decimal point branch)表示去小數點的數字分支,如圖3 所示.模型分支結構完全相同,在特征提取階段后,學習序列不同感受野的信息.無小數點字符串分支作為輔助損失抑制整數分支與小數分支的過擬合,共同優化共享的卷積塊參數.三分支網絡結構與損失函數完全相同,通過對應不同的標簽優化網絡參數,極大地簡化訓練流程.這里我們之所以選擇三分支的模型,也是由于應用場景的特殊性,在實驗階段我們也會輸出不同分支組合結果進行分析.

圖5 多任務循環卷積網絡結構Fig.5 The structure of multi-task RNN
相比于單一任務的方法,我們所提出的多任務模型機制也擁有更好的可分析性:對于價格牌識別問題,我們選取多任務的結構可以數據化模型對整數部分以及小數部分的識別準確度,從而分析誤判問題.對于不同分支的識別難度有初步估計,從而制定相應的訓練策略,如去小數點分支融入的可訓練超參數權重,這種策略對模型精度有可觀的改善.
解碼階段以單向LSTM 作為解碼網絡,增加了循環層注意力機制,結構如圖6 所示.所提出的多任務模型采用相同方式解碼,分支損失函數為式(1) 所示的交叉熵函數,其中M為每批次序列數,N為解碼端單向LSTM 時間步長.網絡損失函數設置為整數損失與小數損失之和,去小數點分支損失乘以超參數η作為損失函數正則化項,整體損失函數如式(2)所示.該設計的出發點是考慮到實際場景應用中小數部分會存在很大一部分全為零的情況,網絡存在過擬合風險.訓練相對復雜一點的去小數點分支可以起到正則化的作用,且加入的超參數可訓練,根據驗證集的反饋自適應學習,實驗階段中我們建議的超參數值為0.5.

圖6 注意力機制網絡解碼流程圖Fig.6 Flowchart of decoder network based on attention
損失函數的改進[15]以及其他改進策略也可以一定程度上提高模型精度,后續會考慮融入到我們的工作當中.

為提高模型性能,在訓練網絡之前,需要對訓練數據進行數據預處理操作.本文采集的數據集來源于真實的貨架圖像,數據豐富多樣,涵蓋不同設計樣式以及角度、光照的變化.將數據歸一化處理為相同的規格(本文規格為96×200),并處理數據標簽.例如,價格數據原標簽為79.99,處理得到整數標簽79、小數標簽99 以及去小數點標簽7 999.
預處理后的圖像送入卷積塊,得到規格為12×25×512 的高層特征.沿寬度方向切片reshape 成25×6 144 的序列格式輸入循環層.循環層如前文所述,由雙向LSTM 堆疊組成.解碼求得每個時間步的輸出,通過與標簽計算交叉熵,反饋訓練網絡.對于我們的雙分支網絡,網絡的輸出結果取決于兩個分支的結果合并.以去小數點分支與整數分支為例,將去小數點分支結果沿著整數分支結果截斷即得到小數部分,通過小數點拼接輸出完整價格.
關于模型的訓練,我們提供了一些訓練策略來提升精度.考慮到實際場景的條件影響,增加飽和度隨機調整和隨機旋轉的數據增強策略,可以很好地增強模型的泛化能力.由于整體網絡較深,需要較大的學習率初始值加速網絡收斂.通過實驗測試,學習率初始值為0.3 時,伴隨隨機梯度下降策略效果最優.
3.2.1 多任務結構分析
本文實驗目的在于介紹多任務機制對于特殊結構文本的貢獻,因此對于Baseline 的選取,我們只對前沿場景文本識別算法[13]的主干結構進行實驗分析,而暫不考慮相關訓練策略.實驗結果如表1所示,ResNet 作為卷積塊,BiLSTM 作為循環層,通過注意力機制解碼的結構能夠達到最高的精度.

表1 模塊的研究(%)Table 1 Study of modules (%)
我們采用文獻[13] 中表現最優的模型作為Baseline,實驗測試了基準方法并與我們的多任務分支進行比較分析.根據價格牌結構的切分方式,價格牌識別任務可以劃分為:去小數點的數據分支識別(NDPB)、整數分支識別(IB)以及小數分支識別(DB),實驗測試了多種分支組合方案,精度結果如表2 所示.相較于在文本識別上的突出成績,基準模型很難在價格牌數據集中取得滿意的成績,而本文提出的多任務模型則非常適用于價格牌這一特定場景,為了體現出多分支結果的優點,我們將基準方案與每個分支的輸出進行了可視化分析,圖7給出了本方法是如何通過三分支識別的方式規避了困難的小數點識別并通過各分支的結果推斷出最終識別結果的機制.實驗結果表明,不同雙分支組合的結構相較于基準模型均取得較優的成績,這便驗證了我們最初的信息拆分識別思路,通過多任務的方式獨立地識別各分支是行之有效的且對最終的結果有促進作用.整數分支與小數分支,以及去小數點分支與小數點分支的多任務模型分別在普通測試集與困難測試集上取得了最優成績,這也是由于數據結構的最優切分與相應多任務模型的組合.進而我們在整數分支與小數分支的基礎上以正則化的方式融入去小數點分支,也讓我們的多任務模型更進一步有所提升,在普通測試集取得了93.20 %的最好成績,困難測試集上取得了75.20 %的最好成績.

圖7 與直接識別方法的比較Fig.7 Compared with the single-branch method

表2 多任務模型結果(%)Table 2 Results of multitask model (%)
實驗結果表明,多任務機制可以充分有效地解決價格牌的識別問題.在沒有其他策略的優化下,僅以多任務機制便可取得優異的成績.現階段端對端的模型已成為深度學習主流,而一些特殊的任務如價格牌中的小數點,卻很難以用單任務的端對端模型解決.因此,我們提議從數據結構上分析,以多任務結構聯合進行分離式的識別是一個可行的解決方案.
3.2.2 模型分析
本文提出的價格牌識別網絡有效地提高了價格牌的識別精度,該方法也可以應用到其他OCR 場景中,為驗證方法的遷移能力,本文通過選取類似可拆分數據結構的車牌場景[16],驗證所提方法的泛化性.我們將論文所提出的方法在目前最大的車牌數據集CCPD 中與效果優異的TE2E[17]以及CCPD[16]網絡進行對比研究.在測試中,我們將車牌拆分成省、市和車牌號三個部分,使用三分支結構進行識別.CCPD 測試集合中包括各種復雜場景,例如光線不均勻、角度傾斜以及雨雪天氣等,實驗結果如表3 所示.本文所提出的方法均高于所對比的方法,尤其在復雜場景的測試集中,識別精度明顯提升.

表3 車牌數據集實驗結果(%)Table 3 Experimental results on license plate dataset (%)
在車牌識別的應用中,可以將漢字為切分點,多分支結構分為漢字分支、數字字母分支以及完整車牌分支.同樣地,完整車牌分支以正則化項的方式融入網絡中,防止其他分支訓練過擬合.表3 中的實驗結果表明,對于車牌識別這一特定場景的任務,本文的多任務模型性能明顯高于原論文,在所有測試集上,精度均有所提升.相比于在商業應用中的TE2E 以及學術研究中的CCPD,個別測試集甚至取得了高達10 %的提升,這為多任務機制聯合學習感受野的策略提供了強力依據.本文提出的方法主要針對那些信息可拆分的且拆分部分具有獨立性的圖像文本,比如價格牌的整數與小數部分,車牌的漢字與字母數字部分.實驗結果表明本文提出的根據數據結構進行設計的多任務學習方法具有良好的性能,且對于復雜場景的泛化性更強,在價格牌數據集中的困難測試集以及車牌數據集中的各種復雜場景車牌集上都取得了很好的效果.
本文針對新零售領域價格牌識別應用提出了基于多任務的價格牌識別網絡,針對特定場景圖像文本的數據結構,將整體數據分開處理,通過先識別整數分支與小數分支替代識別完整價格,最后添加小數點來解決小數點難以識別問題.我們的網絡采用卷積循環網絡的結構,以循環層注意力機制解碼序列,結合多任務學習機制,用特定的領域知識聯合學習難以定位的特征信息.本文所提出的方法在我們開源的價格牌數據集上,相比目前主流的文本識別算法有著明顯的精度提升,并且在類似數據結構的車牌數據集中也有非常好的效果.我們的工作目前只針對具有特定文本結構的圖像,對于通用文本的泛化性較差,接下來的工作將會考慮多任務機制在通用文本上的可行性研究.