吳鑫磊,陶青川,張暢
(四川大學(xué)電子信息學(xué)院,成都 610065)
中國白酒是中國傳統(tǒng)文化中久經(jīng)不衰的一朵奇葩,但是在白酒的市面流通上常常會出現(xiàn)一些假冒偽劣的假酒,為了保護(hù)白酒商家的權(quán)益和保證消費(fèi)者能購買到正當(dāng)?shù)纳唐罚拙粕a(chǎn)廠家都會為每一瓶出產(chǎn)的酒定下編號。但是在酒瓶生產(chǎn)的過程中,由于酒瓶包裝工藝技術(shù)的不成熟,往往會伴隨著酒瓶編碼漏打的情況的出現(xiàn),所以瓶蓋文字檢測極為重要,識別出生產(chǎn)過程中出現(xiàn)問題的那些酒瓶可以解決編碼漏打誤導(dǎo)消費(fèi)者的一些問題,以提升酒瓶包裝生產(chǎn)質(zhì)量和效率。我國制酒工藝雖然成熟,但是在酒瓶文字檢測上的研究及其的稀少。由于酒瓶瓶蓋目標(biāo)較小,對應(yīng)的文字也比較小,而且在拍攝的過程中常常出現(xiàn)反光的情況,導(dǎo)致有時(shí)文字難以看清,并且文字有時(shí)也會是彎曲的形狀,種種的情況都給瓶蓋文字檢測算法帶來了不小的困難。
近些年來,由于機(jī)器視覺在各個(gè)方面的應(yīng)用愈加廣泛,目前對于實(shí)際場景中的文字識別的課題也逐漸變成機(jī)器視覺的研究熱點(diǎn)。但是在現(xiàn)實(shí)場景中,文字并非始終成規(guī)則的矩形區(qū)域,時(shí)常會出現(xiàn)彎曲,或者成不規(guī)則的文字區(qū)域,因此目前來說對于文字區(qū)域的識別仍然是目前文字識別的一大關(guān)鍵性的難點(diǎn)。當(dāng)今有兩種主流的場景文字識別的做法分別是:一種通過回歸和一種通過分割,因?yàn)槔梅指畹姆椒梢栽谙袼厮缴线M(jìn)行預(yù)測,所以對于不同自然場景下的文字形狀能夠有著更好的描述效果[1]。圖片二值化后的處理過程是利用分割的STD 算法的關(guān)鍵性的步驟,也就是分割后得到的概率圖轉(zhuǎn)變成文本框的流程,現(xiàn)在的算法大部分都是在pixel 層面進(jìn)行后處理過程,中間過程比較復(fù)雜而且需要消耗大量的時(shí)間,基本流程如下:開始時(shí)定一個(gè)不變的閾值,來得到二值圖,該二值圖由分割網(wǎng)絡(luò)產(chǎn)生的概率圖得到;然后利用類似素聚類等啟發(fā)式技術(shù)把像素集合成為文字實(shí)例[2]。DB 算法在基于分割的文本檢測網(wǎng)絡(luò)中,對于每一個(gè)像素點(diǎn)的二值化都是通過網(wǎng)絡(luò)學(xué)習(xí)得到的,每個(gè)二值化都是自適應(yīng)的二值化,由此得到的二值圖會有很強(qiáng)的魯棒行,在簡化的同時(shí)還提升了效果。傳統(tǒng)方法和DB 算法的比較:傳統(tǒng)方法在分割之后使用的是固定的閾值求得二值化的分割圖,然后利用像素聚類的啟發(fā)式算法來獲取文本區(qū)域;而DB 算法與傳統(tǒng)算法不同的地方在于閾值的選取上,DB 算法利用網(wǎng)絡(luò)對每個(gè)位置的閾值進(jìn)行預(yù)測,而不是設(shè)定一個(gè)固定的值作為閾值,以該方法便可以更好的分離出前景和后景,可是這樣會帶來一個(gè)訓(xùn)練梯度不可微的情況,對此DB 便提出了一個(gè)叫做Differ?entiable Binarization 的方法來解決該問題[3]。
本文主要工作:前端嵌入式負(fù)責(zé)智能分析,分析結(jié)果由前端傳輸?shù)街行亩?,中心端對分析結(jié)果進(jìn)行記錄匯總,該分層系統(tǒng)模式極大減小了中心端對多路視頻信號的計(jì)算壓力;利用深度學(xué)習(xí)的方法來對瓶蓋文字進(jìn)行檢測定位,采用DBNet 網(wǎng)絡(luò)來對文字進(jìn)行一個(gè)預(yù)測,但是特征提取層采用Inception 網(wǎng)絡(luò)輕量級目標(biāo)檢測網(wǎng)絡(luò)框架,由此可以減少大量的神經(jīng)網(wǎng)絡(luò)參數(shù),進(jìn)而可以降低卷積神經(jīng)網(wǎng)絡(luò)對前端嵌入式設(shè)備性能的要求。Inception 網(wǎng)絡(luò)可以對多個(gè)不同大小的卷積核進(jìn)行并行運(yùn)算或者是池化操作,網(wǎng)絡(luò)對于尺度的適應(yīng)性因此也有所增加,對這些卷積運(yùn)算進(jìn)行并行處理最后合并所有結(jié)果,由此獲得的圖像表征也將更加優(yōu)秀。ResNet 網(wǎng)絡(luò)的殘差網(wǎng)絡(luò)結(jié)構(gòu)有著一個(gè)巨大的優(yōu)勢,它可以保證在一定限制內(nèi)加深網(wǎng)絡(luò)結(jié)構(gòu)的同時(shí)不導(dǎo)致準(zhǔn)確率下降。ResNet 殘差學(xué)習(xí)模塊將會堆疊每層的輸入與輸出,并且在堆疊的過程中不會增加網(wǎng)絡(luò)的參數(shù)和計(jì)算量,因此模型的訓(xùn)練收斂速度也會有所提升,而且在模型不斷加深的情況下,該結(jié)構(gòu)還可以對退化問題有著較好的處理。Inception-ResNetV2 網(wǎng)絡(luò)是基于In?ception V3 采用殘差連接的網(wǎng)絡(luò)結(jié)構(gòu),該網(wǎng)絡(luò)結(jié)構(gòu)可以訓(xùn)練更深的網(wǎng)絡(luò)模型,也因此可以獲得更好的訓(xùn)練效果,也由此在圖像識別上有更高的識別率。本文在上述網(wǎng)絡(luò)模型的基礎(chǔ)上,以DBNet 為基礎(chǔ)網(wǎng)絡(luò)框架,并將特征提取模塊替換為Inception-ResNetV2 網(wǎng)絡(luò),提出一種結(jié)合二者優(yōu)勢,網(wǎng)絡(luò)層數(shù)更深,性能更優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu),提高文字識別的準(zhǔn)確率和其計(jì)算效率[4]。
當(dāng)前對于文字檢測的算法一般可以分為兩類:一種基于回歸另外一種基于分割。對于基于分割的算法流程一般如下圖藍(lán)色箭頭所示:首先獲取借助網(wǎng)絡(luò)輸出的圖片的文本分割結(jié)果,即概率圖,圖片的每個(gè)像素點(diǎn)表示是否為正樣本的概率,利用預(yù)先設(shè)置的閾值把分割結(jié)果圖轉(zhuǎn)變成二值圖,最后利用一些類似于連通域的聚合操作把像素級的效果轉(zhuǎn)變成檢測結(jié)果[5],如圖1 所示。
圖1
由上述可知,由于判定前景和背景是通過設(shè)定一個(gè)閾值來進(jìn)行操作,并且該操作是不可微的,因此我們不能夠利用網(wǎng)絡(luò)把這部分流程放入到網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,但是DBNet 可以通過學(xué)習(xí)threshmap 并且利用可微的操作來把閾值轉(zhuǎn)換放入到網(wǎng)絡(luò)中來進(jìn)行訓(xùn)練。其中大致流程如上圖中的紅色箭頭所示。DBNet 基本網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示,基本訓(xùn)練流程為:首先將圖片輸入網(wǎng)絡(luò),在經(jīng)過特征提取和上采樣融合并concat 操作后便可以得到上圖中藍(lán)色的特征圖稱為F,然后再使用F進(jìn)行預(yù)測得到概率圖(probability map)和閾值圖(threshold map),分別稱為P和T,最后便可以利用P和T 計(jì)算得到近似二值圖。在整個(gè)推斷過程中,我們可以通過概率圖或者近似二值圖來獲取文本框。
圖2
一般的二值化方法不可微,無法放入網(wǎng)絡(luò)學(xué)習(xí)中優(yōu)化,為了解決這個(gè)問題便提出了一個(gè)近似的階躍函數(shù):
上式中T代表了網(wǎng)絡(luò)學(xué)習(xí)的閾值圖,k是一個(gè)因子,輸出的表示近似的二值圖。
該DB 網(wǎng)絡(luò)能夠改善網(wǎng)絡(luò)性能的最主要原因,我們可以從反向傳播梯度的方向來解釋。首先定義:
其中x=Pi,j-Ti,j是上述定義中的DB 函數(shù)。在利用二值交叉熵來作為loss 的情況下,對于正樣本的lossl+和負(fù)樣本的lossl-計(jì)算可以表示成如下兩式:
loss 對于輸入x 的偏導(dǎo)數(shù)為:
由微分公式可以得出:
(1)k為梯度的增益因子
(2)梯度對于錯(cuò)誤預(yù)測的增益幅度很大
上述講述了如何在獲取到閾值圖T和概率圖P之后,將概率圖P二值化為近似二值圖。接下來將講述如何獲取二值圖、閾值圖T、概率圖P的標(biāo)簽。由于瓶蓋文字檢測的圖片較小需要大的感受野,文章將形變卷積應(yīng)用到ResNet-18 或ResNet-50 的網(wǎng)絡(luò)中。
式中,r是預(yù)先設(shè)置的縮放因子,L為標(biāo)注框的周長,A為標(biāo)注框的面積。
閾值圖T的標(biāo)簽生成過程如下:首先,使用上述偏移量D來對原始標(biāo)注框G進(jìn)行擴(kuò)充,得到的框?yàn)镚d。然后,計(jì)算出在框Gd內(nèi)的所有的點(diǎn)到G的四條邊的最小距離(即Gd框內(nèi)點(diǎn)距離最近的G框邊的距離)。接著,將求得的最小距離通過除以偏移量D來進(jìn)行歸一化,要求將歸一化的距離限制在[0,1]內(nèi),也就是將大于1 的改為1,小于0 的改為0。然后使用1 減去上一步中得到的map,由此便可以得到Gd框和GS框之間的像素到G框最近邊的歸一化距離。由于閾值圖T的la?bel 不能是一或零,因此需要對label 值進(jìn)行一定的縮放,我們可以將1 縮放為0.7,將0 縮放為0.3。loss 函數(shù)公式如下所示:
其中,Lt是閾值圖的loss,LS是概率圖的loss,Lb是二值圖的loss。其中α和β分別取值為1.0 和10。于是我們可以利用二值交叉熵(BCE)對LS和Lb進(jìn)行求解:
最后到了推斷階段,我們既可以由概率圖來得到文本區(qū)域,也可以使用近似的二值圖來生成文本區(qū)域。但是為了更加高效,使用概率圖就足夠了。生成文本區(qū)域的過程主要有如下幾步:首先對近似的二值圖或者概率圖使用0.2 的閾值來獲取二值圖,接著利用上一步得到的二值圖來求文本的連通區(qū)域,最后使用偏移量D'把連通區(qū)域進(jìn)行放大就可以得到文本區(qū)域了,D'的計(jì)算方法如下:
式中,r'設(shè)為1.5,A'表示連通區(qū)域的面積,L'是連通區(qū)域多邊形的周長。
Inception-ResNetV2 采用的是“Inception+殘差設(shè)計(jì)”的一種網(wǎng)絡(luò)結(jié)構(gòu),既保留了Inception 的高效率計(jì)算功能,又具有ResNet 的高深度學(xué)習(xí)的能力。Inception模塊之所以計(jì)算較為高效,主要在于其是一種具有優(yōu)良局部拓?fù)浣Y(jié)構(gòu)的網(wǎng)絡(luò),當(dāng)我們輸入圖像時(shí)可以同時(shí)并行地執(zhí)行多個(gè)卷積運(yùn)算或者是池化操作,例如其可以同時(shí)并行執(zhí)行1×1、3×3、5×5 和7×7 等多個(gè)卷積核大小不同的卷積操作,因此便可以獲取輸入圖像的不同層次的特征信息,最后再將這些卷積輸出結(jié)果進(jìn)行合并拼接,以獲得一個(gè)更深的特征圖譜,這樣便可以獲得更優(yōu)的圖像表征。Inception-ResNetV2 網(wǎng)絡(luò)主要利用的是分解的方法,其中Inception 結(jié)構(gòu)部分做法就是把尺寸較大的一個(gè)二維卷積分解成兩個(gè)不對稱較小的一維卷積,例如把一個(gè)7×7Conv 拆分成一個(gè)7×1Conv 和一個(gè)1×7Conv,把一個(gè)3×3Conv 拆分成一個(gè)3×1Conv和一個(gè)1×3Conv,這樣做可以減少計(jì)算量和參數(shù)量,并且由于拆分成的是不對稱的卷積,所以也因此可以獲得更加多樣的特征。Inception-ResNetV2 網(wǎng)絡(luò)輸入在從224×224 變成為299×299 的時(shí)候,而在網(wǎng)絡(luò)Incep?tion-ResNetV2 的內(nèi)部結(jié)構(gòu)中其中Stem 結(jié)構(gòu)部分中使用了Inception V3 模型里的并行結(jié)構(gòu)與分解思想,這樣可以使得在信息損失足夠小的前提下,保證減少其計(jì)算量,而在該結(jié)構(gòu)下的1×1 的卷積核的作用是用來降維,并且其也增加了網(wǎng)絡(luò)的非線性。Inception-ResNet-A、Inception-ResNet-B 和Inception-ResNet-C 等網(wǎng)絡(luò)結(jié)構(gòu)都采用的是“Inception+殘差設(shè)計(jì)”的網(wǎng)絡(luò)結(jié)構(gòu),因此這些網(wǎng)絡(luò)的層次可達(dá)到更深,而其結(jié)構(gòu)更加復(fù)雜,得到的特征圖的通道數(shù)也將變得更多。而其中的Reduc?tion-A、Reduction-B、Reduction-C 三種結(jié)構(gòu)則是用來降低計(jì)算量和縮放特征圖譜的尺寸。Inception-ResNetV2 融合了Inception 模塊和殘差網(wǎng)結(jié)構(gòu)兩者的優(yōu)點(diǎn),既可以使得網(wǎng)絡(luò)的深度和寬度得到增加,并且還可以避免梯度的消失[6]。圖3 只給出Inception-ResNet-A結(jié)構(gòu),Inception-ResNet-B 和Inception-ResNet-C 結(jié)構(gòu)類似。
圖3
由于我們需要檢測瓶蓋上的文字區(qū)域,因此我們必須選取能夠檢測識別不規(guī)則文字區(qū)域的網(wǎng)絡(luò)結(jié)構(gòu)算法,而DBNet 對于不規(guī)則的文字區(qū)域的檢測有著比較好的檢測識別效果,因此我們選取DBNet 來作為我們的網(wǎng)絡(luò)結(jié)構(gòu)算法。但是由于我們需要我們的算法需要能夠在低性能的計(jì)算機(jī)上跑起來,并且我們使用的開發(fā)板的具體情況為:主板AIO-3399J、芯片RK3399、處理器為ARM Cortex-A72(雙核)及Cortex-A53(四核)主頻2.0GHz,內(nèi)存2GB。于是我們需要一種輕量級的卷積神經(jīng)網(wǎng)絡(luò)文字檢測算法。由于DBNet 的特征提取模塊采用的是ResNet50,而ResNet 計(jì)算量過大權(quán)值參數(shù)過多,我們需要對ResNet50 做出一些修改,來降低我們的參數(shù)和計(jì)算量。而Inception-ResNetV2 既保留了Inception 的高效率計(jì)算功能,又具有ResNet 的高深度學(xué)習(xí)的能力,因此我們選取Inception-ResNetV2 來對ResNet 來做一些替換,這樣就能夠在保證算法的準(zhǔn)確性的前提下來對算法的效率進(jìn)行提升。修改后的網(wǎng)絡(luò)結(jié)構(gòu)如下,主要針對特征提取模塊,后面還是采用保留了原來的多尺度預(yù)測,主要突出ResNet50 和Incep?tion-ResNetV2 的性能和參數(shù)差別。
本地計(jì)算機(jī)的基本配置如下:Intel Core i5-7400 的處理器,頻率為3.GHz 的CPU,內(nèi)存為8G,NVIDIA Ge?Force GTX1080 Ti 的GPU,顯存為11GB,操作系統(tǒng)是Ubuntu 16.04。本實(shí)驗(yàn)所使用的前端嵌入式開發(fā)板的基本配置如下:主板為AIO-3399J、處理器為ARM Cor?tex-A72(雙核)及Cortex-A53(四核)主頻2.0GHz,內(nèi)存為2GB;芯片為RK3399、操作系統(tǒng)為Ubuntu 16.04。
圖4
在本文中我們使用的評判模型是mAP(mean Aver?age Precision),模型性能的評價(jià)常用的指標(biāo)有:Accura?cy、Precision、Recall 等。由于mAP 是多個(gè)類別的評判方法,即mAP 是多個(gè)AP 求取平均值,因此次數(shù)的AP即是我們所求的mAP。Precision 代表的是精度,Recall代表的是召回率。mAP 就是用來評判我們算法的重要指標(biāo),各參數(shù)的計(jì)算方法分別如下:
在式子中:FN(False Negative)代表實(shí)際為文字但是被判定為非文字的個(gè)數(shù);TP(True Positive)代表實(shí)際為文字但是被判定為非文字的個(gè)數(shù);FP(False Positive)代表實(shí)際為非文字但是被判定為文字的個(gè)數(shù);而p(r)代表Precision 關(guān)于Recall 的函數(shù)關(guān)系。
由于在實(shí)際應(yīng)用場景中,瓶蓋的文字在某些情況下呈現(xiàn)一個(gè)彎曲或者不規(guī)則的形狀,因此本文訓(xùn)練以及驗(yàn)證采用的是ArT 數(shù)據(jù)集,其中包括了Total Text、SCUT-CTW1500 和Baidu Curve Scene Text 等數(shù)據(jù)集,ArT 是如今規(guī)模較大的場景文本數(shù)據(jù)集之一。ArT 數(shù)據(jù)集中共有10,166 張圖像。它分為帶有5603 個(gè)圖像的訓(xùn)練集和包含4563 個(gè)新收集的圖像的測試集。其中有許多不規(guī)則的形狀文字區(qū)域的圖片,可以用于關(guān)于任意形狀文本識別任務(wù)的研究。由于在該數(shù)據(jù)集中包含許多不規(guī)則的文字區(qū)域的圖片,使用該圖片來做訓(xùn)練能夠更加符合實(shí)際酒瓶瓶蓋文字的識別場景。
我們實(shí)驗(yàn)時(shí)將參數(shù)設(shè)置如下:批大小設(shè)置成64,將最大的迭代步數(shù)設(shè)置成200000,將識別部分的學(xué)習(xí)率設(shè)置成0.01,把權(quán)重衰減設(shè)置成0.001。將算法置于開發(fā)板下跑的結(jié)果實(shí)際原圖(圖5、圖7)以及檢測效果圖(圖6、圖8)。
圖5
圖6
圖7
圖8
為了檢驗(yàn)本文網(wǎng)絡(luò)的實(shí)際應(yīng)用價(jià)值,本文在ArT數(shù)據(jù)集文字?jǐn)?shù)據(jù)集上分別從參數(shù)量、計(jì)算量、mAP 值、計(jì)算速度等評判標(biāo)準(zhǔn)上將YOLO、SSD、Mobile-SSD 和本文網(wǎng)絡(luò)進(jìn)行對比,具體的表格如下表所示。在評判的過程中,我們將所有的算法移植在AIO-3399 嵌入式平臺上,然后運(yùn)行算法獲取其各項(xiàng)數(shù)據(jù),并記錄在下表中。由表1 中的數(shù)據(jù)可以得出修改后的網(wǎng)絡(luò)參數(shù)相對于YOLO、SSD、Mobile-SSD 分別減少了98.8%、97.2%、88.7.%;并且在速度上對于每張圖片的檢測速度也有了大幅的提升,在開發(fā)板上可達(dá)到73ms 每張的速度,相對于以往的神經(jīng)網(wǎng)絡(luò)的文字檢測算法有著巨大的提升。由于本文網(wǎng)絡(luò)的設(shè)計(jì)目的在于提高算法的速度,降低算法的參數(shù)值和計(jì)算量,因此在瓶蓋文字檢測的實(shí)際使用場景下,該算法相較于其他算法是有著巨大的優(yōu)勢的,它能夠在算法準(zhǔn)確率下降不明顯的情況下顯著提高了算法的速度,使其能夠在嵌入式開發(fā)平臺上有效運(yùn)行,滿足實(shí)際的運(yùn)用要求。并且由于工廠內(nèi)的場景相對來說比較單一,光線穩(wěn)定,該前提條件也使得算法的準(zhǔn)確率有著較好的表現(xiàn)。
表1
由于傳統(tǒng)算法對于文字檢測的速度和準(zhǔn)確度上都不是很理想,但是對于一般的深度學(xué)習(xí)的方法卻又參數(shù)量較大,速度不理想,并且難以移植入嵌入式開發(fā)板中進(jìn)行運(yùn)行,而且很難對彎曲情況下的文字區(qū)域進(jìn)行有效檢測?;谶@些等等問題,本文提出了一種基于DBNet 的網(wǎng)絡(luò)結(jié)構(gòu),將其占據(jù)大量參數(shù)的ResNet 特征提取模塊采用Inception-ResNetV2 進(jìn)行替換,在保證準(zhǔn)確率下降微小的情況下,減少其所使用的參數(shù)量,大大地提高了文字檢測算法的檢測速度,并且由于實(shí)際生產(chǎn)環(huán)境較為單一,光線穩(wěn)定,該前提條件也大大提高了本文算法的準(zhǔn)確性,使得該算法在實(shí)際生產(chǎn)中有著非常好的使用效果。