吳鑫磊,陶青川,張暢
(四川大學電子信息學院,成都 610065)
中國白酒是中國傳統(tǒng)文化中久經(jīng)不衰的一朵奇葩,但是在白酒的市面流通上常常會出現(xiàn)一些假冒偽劣的假酒,為了保護白酒商家的權益和保證消費者能購買到正當?shù)纳唐罚拙粕a(chǎn)廠家都會為每一瓶出產(chǎn)的酒定下編號。但是在酒瓶生產(chǎn)的過程中,由于酒瓶包裝工藝技術的不成熟,往往會伴隨著酒瓶編碼漏打的情況的出現(xiàn),所以瓶蓋文字檢測極為重要,識別出生產(chǎn)過程中出現(xiàn)問題的那些酒瓶可以解決編碼漏打誤導消費者的一些問題,以提升酒瓶包裝生產(chǎn)質量和效率。我國制酒工藝雖然成熟,但是在酒瓶文字檢測上的研究及其的稀少。由于酒瓶瓶蓋目標較小,對應的文字也比較小,而且在拍攝的過程中常常出現(xiàn)反光的情況,導致有時文字難以看清,并且文字有時也會是彎曲的形狀,種種的情況都給瓶蓋文字檢測算法帶來了不小的困難。
近些年來,由于機器視覺在各個方面的應用愈加廣泛,目前對于實際場景中的文字識別的課題也逐漸變成機器視覺的研究熱點。但是在現(xiàn)實場景中,文字并非始終成規(guī)則的矩形區(qū)域,時常會出現(xiàn)彎曲,或者成不規(guī)則的文字區(qū)域,因此目前來說對于文字區(qū)域的識別仍然是目前文字識別的一大關鍵性的難點。當今有兩種主流的場景文字識別的做法分別是:一種通過回歸和一種通過分割,因為利用分割的方法可以在像素水平上進行預測,所以對于不同自然場景下的文字形狀能夠有著更好的描述效果[1]。圖片二值化后的處理過程是利用分割的STD 算法的關鍵性的步驟,也就是分割后得到的概率圖轉變成文本框的流程,現(xiàn)在的算法大部分都是在pixel 層面進行后處理過程,中間過程比較復雜而且需要消耗大量的時間,基本流程如下:開始時定一個不變的閾值,來得到二值圖,該二值圖由分割網(wǎng)絡產(chǎn)生的概率圖得到;然后利用類似素聚類等啟發(fā)式技術把像素集合成為文字實例[2]。DB 算法在基于分割的文本檢測網(wǎng)絡中,對于每一個像素點的二值化都是通過網(wǎng)絡學習得到的,每個二值化都是自適應的二值化,由此得到的二值圖會有很強的魯棒行,在簡化的同時還提升了效果。傳統(tǒng)方法和DB 算法的比較:傳統(tǒng)方法在分割之后使用的是固定的閾值求得二值化的分割圖,然后利用像素聚類的啟發(fā)式算法來獲取文本區(qū)域;而DB 算法與傳統(tǒng)算法不同的地方在于閾值的選取上,DB 算法利用網(wǎng)絡對每個位置的閾值進行預測,而不是設定一個固定的值作為閾值,以該方法便可以更好的分離出前景和后景,可是這樣會帶來一個訓練梯度不可微的情況,對此DB 便提出了一個叫做Differ?entiable Binarization 的方法來解決該問題[3]。
本文主要工作:前端嵌入式負責智能分析,分析結果由前端傳輸?shù)街行亩耍行亩藢Ψ治鼋Y果進行記錄匯總,該分層系統(tǒng)模式極大減小了中心端對多路視頻信號的計算壓力;利用深度學習的方法來對瓶蓋文字進行檢測定位,采用DBNet 網(wǎng)絡來對文字進行一個預測,但是特征提取層采用Inception 網(wǎng)絡輕量級目標檢測網(wǎng)絡框架,由此可以減少大量的神經(jīng)網(wǎng)絡參數(shù),進而可以降低卷積神經(jīng)網(wǎng)絡對前端嵌入式設備性能的要求。Inception 網(wǎng)絡可以對多個不同大小的卷積核進行并行運算或者是池化操作,網(wǎng)絡對于尺度的適應性因此也有所增加,對這些卷積運算進行并行處理最后合并所有結果,由此獲得的圖像表征也將更加優(yōu)秀。ResNet 網(wǎng)絡的殘差網(wǎng)絡結構有著一個巨大的優(yōu)勢,它可以保證在一定限制內加深網(wǎng)絡結構的同時不導致準確率下降。ResNet 殘差學習模塊將會堆疊每層的輸入與輸出,并且在堆疊的過程中不會增加網(wǎng)絡的參數(shù)和計算量,因此模型的訓練收斂速度也會有所提升,而且在模型不斷加深的情況下,該結構還可以對退化問題有著較好的處理。Inception-ResNetV2 網(wǎng)絡是基于In?ception V3 采用殘差連接的網(wǎng)絡結構,該網(wǎng)絡結構可以訓練更深的網(wǎng)絡模型,也因此可以獲得更好的訓練效果,也由此在圖像識別上有更高的識別率。本文在上述網(wǎng)絡模型的基礎上,以DBNet 為基礎網(wǎng)絡框架,并將特征提取模塊替換為Inception-ResNetV2 網(wǎng)絡,提出一種結合二者優(yōu)勢,網(wǎng)絡層數(shù)更深,性能更優(yōu)的網(wǎng)絡結構,提高文字識別的準確率和其計算效率[4]。
當前對于文字檢測的算法一般可以分為兩類:一種基于回歸另外一種基于分割。對于基于分割的算法流程一般如下圖藍色箭頭所示:首先獲取借助網(wǎng)絡輸出的圖片的文本分割結果,即概率圖,圖片的每個像素點表示是否為正樣本的概率,利用預先設置的閾值把分割結果圖轉變成二值圖,最后利用一些類似于連通域的聚合操作把像素級的效果轉變成檢測結果[5],如圖1 所示。

圖1
由上述可知,由于判定前景和背景是通過設定一個閾值來進行操作,并且該操作是不可微的,因此我們不能夠利用網(wǎng)絡把這部分流程放入到網(wǎng)絡中進行訓練,但是DBNet 可以通過學習threshmap 并且利用可微的操作來把閾值轉換放入到網(wǎng)絡中來進行訓練。其中大致流程如上圖中的紅色箭頭所示。DBNet 基本網(wǎng)絡結構如圖2 所示,基本訓練流程為:首先將圖片輸入網(wǎng)絡,在經(jīng)過特征提取和上采樣融合并concat 操作后便可以得到上圖中藍色的特征圖稱為F,然后再使用F進行預測得到概率圖(probability map)和閾值圖(threshold map),分別稱為P和T,最后便可以利用P和T 計算得到近似二值圖。在整個推斷過程中,我們可以通過概率圖或者近似二值圖來獲取文本框。

圖2
一般的二值化方法不可微,無法放入網(wǎng)絡學習中優(yōu)化,為了解決這個問題便提出了一個近似的階躍函數(shù):

上式中T代表了網(wǎng)絡學習的閾值圖,k是一個因子,輸出的表示近似的二值圖。
該DB 網(wǎng)絡能夠改善網(wǎng)絡性能的最主要原因,我們可以從反向傳播梯度的方向來解釋。首先定義:

其中x=Pi,j-Ti,j是上述定義中的DB 函數(shù)。在利用二值交叉熵來作為loss 的情況下,對于正樣本的lossl+和負樣本的lossl-計算可以表示成如下兩式:

loss 對于輸入x 的偏導數(shù)為:


由微分公式可以得出:
(1)k為梯度的增益因子
(2)梯度對于錯誤預測的增益幅度很大
上述講述了如何在獲取到閾值圖T和概率圖P之后,將概率圖P二值化為近似二值圖。接下來將講述如何獲取二值圖、閾值圖T、概率圖P的標簽。由于瓶蓋文字檢測的圖片較小需要大的感受野,文章將形變卷積應用到ResNet-18 或ResNet-50 的網(wǎng)絡中。

式中,r是預先設置的縮放因子,L為標注框的周長,A為標注框的面積。
閾值圖T的標簽生成過程如下:首先,使用上述偏移量D來對原始標注框G進行擴充,得到的框為Gd。然后,計算出在框Gd內的所有的點到G的四條邊的最小距離(即Gd框內點距離最近的G框邊的距離)。接著,將求得的最小距離通過除以偏移量D來進行歸一化,要求將歸一化的距離限制在[0,1]內,也就是將大于1 的改為1,小于0 的改為0。然后使用1 減去上一步中得到的map,由此便可以得到Gd框和GS框之間的像素到G框最近邊的歸一化距離。由于閾值圖T的la?bel 不能是一或零,因此需要對label 值進行一定的縮放,我們可以將1 縮放為0.7,將0 縮放為0.3。loss 函數(shù)公式如下所示:

其中,Lt是閾值圖的loss,LS是概率圖的loss,Lb是二值圖的loss。其中α和β分別取值為1.0 和10。于是我們可以利用二值交叉熵(BCE)對LS和Lb進行求解:

最后到了推斷階段,我們既可以由概率圖來得到文本區(qū)域,也可以使用近似的二值圖來生成文本區(qū)域。但是為了更加高效,使用概率圖就足夠了。生成文本區(qū)域的過程主要有如下幾步:首先對近似的二值圖或者概率圖使用0.2 的閾值來獲取二值圖,接著利用上一步得到的二值圖來求文本的連通區(qū)域,最后使用偏移量D'把連通區(qū)域進行放大就可以得到文本區(qū)域了,D'的計算方法如下:

式中,r'設為1.5,A'表示連通區(qū)域的面積,L'是連通區(qū)域多邊形的周長。
Inception-ResNetV2 采用的是“Inception+殘差設計”的一種網(wǎng)絡結構,既保留了Inception 的高效率計算功能,又具有ResNet 的高深度學習的能力。Inception模塊之所以計算較為高效,主要在于其是一種具有優(yōu)良局部拓撲結構的網(wǎng)絡,當我們輸入圖像時可以同時并行地執(zhí)行多個卷積運算或者是池化操作,例如其可以同時并行執(zhí)行1×1、3×3、5×5 和7×7 等多個卷積核大小不同的卷積操作,因此便可以獲取輸入圖像的不同層次的特征信息,最后再將這些卷積輸出結果進行合并拼接,以獲得一個更深的特征圖譜,這樣便可以獲得更優(yōu)的圖像表征。Inception-ResNetV2 網(wǎng)絡主要利用的是分解的方法,其中Inception 結構部分做法就是把尺寸較大的一個二維卷積分解成兩個不對稱較小的一維卷積,例如把一個7×7Conv 拆分成一個7×1Conv 和一個1×7Conv,把一個3×3Conv 拆分成一個3×1Conv和一個1×3Conv,這樣做可以減少計算量和參數(shù)量,并且由于拆分成的是不對稱的卷積,所以也因此可以獲得更加多樣的特征。Inception-ResNetV2 網(wǎng)絡輸入在從224×224 變成為299×299 的時候,而在網(wǎng)絡Incep?tion-ResNetV2 的內部結構中其中Stem 結構部分中使用了Inception V3 模型里的并行結構與分解思想,這樣可以使得在信息損失足夠小的前提下,保證減少其計算量,而在該結構下的1×1 的卷積核的作用是用來降維,并且其也增加了網(wǎng)絡的非線性。Inception-ResNet-A、Inception-ResNet-B 和Inception-ResNet-C 等網(wǎng)絡結構都采用的是“Inception+殘差設計”的網(wǎng)絡結構,因此這些網(wǎng)絡的層次可達到更深,而其結構更加復雜,得到的特征圖的通道數(shù)也將變得更多。而其中的Reduc?tion-A、Reduction-B、Reduction-C 三種結構則是用來降低計算量和縮放特征圖譜的尺寸。Inception-ResNetV2 融合了Inception 模塊和殘差網(wǎng)結構兩者的優(yōu)點,既可以使得網(wǎng)絡的深度和寬度得到增加,并且還可以避免梯度的消失[6]。圖3 只給出Inception-ResNet-A結構,Inception-ResNet-B 和Inception-ResNet-C 結構類似。

圖3
由于我們需要檢測瓶蓋上的文字區(qū)域,因此我們必須選取能夠檢測識別不規(guī)則文字區(qū)域的網(wǎng)絡結構算法,而DBNet 對于不規(guī)則的文字區(qū)域的檢測有著比較好的檢測識別效果,因此我們選取DBNet 來作為我們的網(wǎng)絡結構算法。但是由于我們需要我們的算法需要能夠在低性能的計算機上跑起來,并且我們使用的開發(fā)板的具體情況為:主板AIO-3399J、芯片RK3399、處理器為ARM Cortex-A72(雙核)及Cortex-A53(四核)主頻2.0GHz,內存2GB。于是我們需要一種輕量級的卷積神經(jīng)網(wǎng)絡文字檢測算法。由于DBNet 的特征提取模塊采用的是ResNet50,而ResNet 計算量過大權值參數(shù)過多,我們需要對ResNet50 做出一些修改,來降低我們的參數(shù)和計算量。而Inception-ResNetV2 既保留了Inception 的高效率計算功能,又具有ResNet 的高深度學習的能力,因此我們選取Inception-ResNetV2 來對ResNet 來做一些替換,這樣就能夠在保證算法的準確性的前提下來對算法的效率進行提升。修改后的網(wǎng)絡結構如下,主要針對特征提取模塊,后面還是采用保留了原來的多尺度預測,主要突出ResNet50 和Incep?tion-ResNetV2 的性能和參數(shù)差別。
本地計算機的基本配置如下:Intel Core i5-7400 的處理器,頻率為3.GHz 的CPU,內存為8G,NVIDIA Ge?Force GTX1080 Ti 的GPU,顯存為11GB,操作系統(tǒng)是Ubuntu 16.04。本實驗所使用的前端嵌入式開發(fā)板的基本配置如下:主板為AIO-3399J、處理器為ARM Cor?tex-A72(雙核)及Cortex-A53(四核)主頻2.0GHz,內存為2GB;芯片為RK3399、操作系統(tǒng)為Ubuntu 16.04。

圖4
在本文中我們使用的評判模型是mAP(mean Aver?age Precision),模型性能的評價常用的指標有:Accura?cy、Precision、Recall 等。由于mAP 是多個類別的評判方法,即mAP 是多個AP 求取平均值,因此次數(shù)的AP即是我們所求的mAP。Precision 代表的是精度,Recall代表的是召回率。mAP 就是用來評判我們算法的重要指標,各參數(shù)的計算方法分別如下:

在式子中:FN(False Negative)代表實際為文字但是被判定為非文字的個數(shù);TP(True Positive)代表實際為文字但是被判定為非文字的個數(shù);FP(False Positive)代表實際為非文字但是被判定為文字的個數(shù);而p(r)代表Precision 關于Recall 的函數(shù)關系。
由于在實際應用場景中,瓶蓋的文字在某些情況下呈現(xiàn)一個彎曲或者不規(guī)則的形狀,因此本文訓練以及驗證采用的是ArT 數(shù)據(jù)集,其中包括了Total Text、SCUT-CTW1500 和Baidu Curve Scene Text 等數(shù)據(jù)集,ArT 是如今規(guī)模較大的場景文本數(shù)據(jù)集之一。ArT 數(shù)據(jù)集中共有10,166 張圖像。它分為帶有5603 個圖像的訓練集和包含4563 個新收集的圖像的測試集。其中有許多不規(guī)則的形狀文字區(qū)域的圖片,可以用于關于任意形狀文本識別任務的研究。由于在該數(shù)據(jù)集中包含許多不規(guī)則的文字區(qū)域的圖片,使用該圖片來做訓練能夠更加符合實際酒瓶瓶蓋文字的識別場景。
我們實驗時將參數(shù)設置如下:批大小設置成64,將最大的迭代步數(shù)設置成200000,將識別部分的學習率設置成0.01,把權重衰減設置成0.001。將算法置于開發(fā)板下跑的結果實際原圖(圖5、圖7)以及檢測效果圖(圖6、圖8)。

圖5

圖6

圖7

圖8
為了檢驗本文網(wǎng)絡的實際應用價值,本文在ArT數(shù)據(jù)集文字數(shù)據(jù)集上分別從參數(shù)量、計算量、mAP 值、計算速度等評判標準上將YOLO、SSD、Mobile-SSD 和本文網(wǎng)絡進行對比,具體的表格如下表所示。在評判的過程中,我們將所有的算法移植在AIO-3399 嵌入式平臺上,然后運行算法獲取其各項數(shù)據(jù),并記錄在下表中。由表1 中的數(shù)據(jù)可以得出修改后的網(wǎng)絡參數(shù)相對于YOLO、SSD、Mobile-SSD 分別減少了98.8%、97.2%、88.7.%;并且在速度上對于每張圖片的檢測速度也有了大幅的提升,在開發(fā)板上可達到73ms 每張的速度,相對于以往的神經(jīng)網(wǎng)絡的文字檢測算法有著巨大的提升。由于本文網(wǎng)絡的設計目的在于提高算法的速度,降低算法的參數(shù)值和計算量,因此在瓶蓋文字檢測的實際使用場景下,該算法相較于其他算法是有著巨大的優(yōu)勢的,它能夠在算法準確率下降不明顯的情況下顯著提高了算法的速度,使其能夠在嵌入式開發(fā)平臺上有效運行,滿足實際的運用要求。并且由于工廠內的場景相對來說比較單一,光線穩(wěn)定,該前提條件也使得算法的準確率有著較好的表現(xiàn)。

表1
由于傳統(tǒng)算法對于文字檢測的速度和準確度上都不是很理想,但是對于一般的深度學習的方法卻又參數(shù)量較大,速度不理想,并且難以移植入嵌入式開發(fā)板中進行運行,而且很難對彎曲情況下的文字區(qū)域進行有效檢測。基于這些等等問題,本文提出了一種基于DBNet 的網(wǎng)絡結構,將其占據(jù)大量參數(shù)的ResNet 特征提取模塊采用Inception-ResNetV2 進行替換,在保證準確率下降微小的情況下,減少其所使用的參數(shù)量,大大地提高了文字檢測算法的檢測速度,并且由于實際生產(chǎn)環(huán)境較為單一,光線穩(wěn)定,該前提條件也大大提高了本文算法的準確性,使得該算法在實際生產(chǎn)中有著非常好的使用效果。