易 帆 李功燕 許紹云
1(中國(guó)科學(xué)院微電子研究所 北京 100029)2(中國(guó)科學(xué)院大學(xué) 北京 100049)
條形碼技術(shù)在實(shí)際生活中已經(jīng)取得廣泛應(yīng)用,例如在物流快遞、醫(yī)療、交通、倉(cāng)儲(chǔ)、生產(chǎn)自動(dòng)化、票務(wù)單、商場(chǎng)等場(chǎng)景極大方便了人們的日常工作。通過(guò)將條形碼圖像輸入計(jì)算機(jī),按照預(yù)定的規(guī)則解碼出條形碼信息,不再需要人工手動(dòng)輸入,完全由機(jī)器完成,避免人工錄入帶來(lái)的失誤,提高了生產(chǎn)效率。然而,實(shí)際場(chǎng)景中輸入圖像內(nèi)容不全是條形碼,還存在很多背景干擾信息,因此在識(shí)別條形碼內(nèi)容之前需要檢測(cè)定位輸入圖像中條形碼的位置。另外,考慮到條形碼可能存在傾斜的情況,需要在檢測(cè)定位條形碼位置之后再進(jìn)行角度矯正,條形碼矯正結(jié)果的好壞直接影響后續(xù)條形碼譯碼的準(zhǔn)確率和速度。當(dāng)前條形碼技術(shù)研究主要集中在條形碼檢測(cè)定位上,矯正研究較少并與檢測(cè)分開(kāi)處理,無(wú)法協(xié)同發(fā)揮促進(jìn)兩者的相互作用。故本文以物流快遞包裹自動(dòng)化分揀場(chǎng)景為背景,基于深度學(xué)習(xí)中目標(biāo)檢測(cè)技術(shù)研究條形碼傾斜矯正相關(guān)算法,以提高最終條形碼傾斜矯正的效果。
隨著條形碼技術(shù)的廣泛運(yùn)用和應(yīng)用場(chǎng)景的復(fù)雜化,越來(lái)越多的條形碼識(shí)別算法被提出,主要分為傳統(tǒng)的數(shù)字圖像處理和深度學(xué)習(xí)兩類(lèi)算法。
在早期,條形碼識(shí)別算法主要是基于傳統(tǒng)的數(shù)字圖像處理。文獻(xiàn)[1-2]借助邊緣檢測(cè)算子對(duì)輸入圖像進(jìn)行操作獲取梯度特征區(qū)域,并通過(guò)自適應(yīng)閾值濾除大部分背景,再通過(guò)主梯度及Hough變換獲取傾斜方向矯正條形碼,最后依據(jù)條碼特征合并候選區(qū)域。文獻(xiàn)[3]首先生成輸入圖像的方向直方圖,去除背景區(qū)域和雜波,并分析基于局部熵的方向分割出條形碼區(qū)域,最后分析合并條碼區(qū)域。文獻(xiàn)[4]采用Harris角點(diǎn)檢測(cè)器和Hough變換算法估計(jì)待檢測(cè)條碼區(qū)域的旋轉(zhuǎn)角度,再通過(guò)條形碼區(qū)域的連通性和幾何特性來(lái)直接識(shí)別單個(gè)視頻幀中的多個(gè)條形碼區(qū)域。文獻(xiàn)[5-7]通過(guò)提取滑動(dòng)窗口的局部二值模式(Local Binary Pattern,LBP)或者方向梯度直方圖(Histogram of Oriented Gradient,HOG)特征,送入支持向量機(jī)(Support Vector Machine,SVM)分類(lèi)器判斷所屬類(lèi)別,進(jìn)而將連通子塊合并得到條碼區(qū)域,最后由Hough變換算法矯正條形碼。文獻(xiàn)[8]利用主成分分析PCA算法提取條形碼主要特征,再通過(guò)SVM算法判別條碼區(qū)域的可能性。以上算法一般需要手工設(shè)計(jì)特征和規(guī)則,無(wú)法適應(yīng)在物流包裹分揀場(chǎng)景下,條形碼圖片因?yàn)楣庹詹痪?、背景干擾、包裹扭曲形變、模糊、污損等情況造成圖片質(zhì)量下降和特征不明顯,進(jìn)而算法性能大打折扣。
近年來(lái),深度學(xué)習(xí)技術(shù)快速發(fā)展,憑借著其強(qiáng)大的擬合和提取特征能力,已經(jīng)在絕大多數(shù)圖像領(lǐng)域取得優(yōu)于傳統(tǒng)圖像處理算法的效果。文獻(xiàn)[9]提出了一種基于雙金字塔結(jié)構(gòu)的分割網(wǎng)絡(luò)BarcodeNet,分割提取條形碼區(qū)域。文獻(xiàn)[10]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)的級(jí)聯(lián)條形碼檢測(cè)算法。首先使用Faster-Rcnn[11]目標(biāo)檢測(cè)算法獲得條形碼區(qū)域,再借助最大穩(wěn)定極值區(qū)域(Maximally Stable Extremal Regions,MSERs)算法消除背景噪聲并檢測(cè)條碼方向,最后通過(guò)自適應(yīng)流形(Adaptive Manifold,AM)濾波器處理模糊條形碼區(qū)域,整個(gè)算法流程由于多階段處理速度較慢。文獻(xiàn)[12]通過(guò)YOLO[13]目標(biāo)檢測(cè)算法定位條形碼區(qū)域,之后將條形碼區(qū)域裁剪放縮至正方形送入一個(gè)角度矯正卷積神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)條形碼的傾斜角,然而這兩部分網(wǎng)絡(luò)提取特征存在重復(fù)冗余,并且直接回歸預(yù)測(cè)傾斜角誤差偏大。針對(duì)以上條形碼檢測(cè)矯正算法的不足,本文基于深度學(xué)習(xí)目標(biāo)檢測(cè)算法改進(jìn)條碼檢測(cè)矯正的效果和速度。
目標(biāo)檢測(cè)一直是計(jì)算機(jī)視覺(jué)領(lǐng)域的基礎(chǔ)問(wèn)題,主要關(guān)注的是圖片中特定目標(biāo)物體的位置。一個(gè)檢測(cè)任務(wù)包含兩個(gè)子任務(wù):一是輸出這一目標(biāo)的類(lèi)別信息,屬于分類(lèi)任務(wù);二是輸出目標(biāo)的具體位置信息,屬于定位任務(wù)。傳統(tǒng)的目標(biāo)檢測(cè)算法主要通過(guò)區(qū)域選擇、特征提取和分類(lèi)回歸三個(gè)步驟組成,然而,區(qū)域選擇的策略效果差、時(shí)間復(fù)雜度高,手工設(shè)計(jì)提取的特征魯棒性較差。隨著深度學(xué)習(xí)的介入,這三個(gè)步驟可由一個(gè)端到端的卷積神經(jīng)網(wǎng)絡(luò)完成,極大地提高了目標(biāo)檢測(cè)的準(zhǔn)確率。目前主流的基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法主要分為兩類(lèi):一個(gè)是以Faster-Rcnn為代表的兩階段檢測(cè)器,通常先進(jìn)行前背景分類(lèi)和回歸框粗調(diào),再進(jìn)行目標(biāo)分類(lèi)和回歸框精調(diào),檢測(cè)準(zhǔn)確率高但速度偏慢;另一個(gè)是以YOLO和SSD[14]為代表的單階段檢測(cè)器,直接進(jìn)行類(lèi)別預(yù)測(cè)和位置回歸,檢測(cè)準(zhǔn)確率稍低于Faster-Rcnn但速度快。由于實(shí)際生產(chǎn)環(huán)境中對(duì)條形碼識(shí)別速度要求嚴(yán)格,故本文以單階段檢測(cè)器為基礎(chǔ),改進(jìn)檢測(cè)器結(jié)構(gòu),提出一種多任務(wù)目標(biāo)檢測(cè)的條形碼矯正算法。
單階段檢測(cè)器模型整體上由基礎(chǔ)網(wǎng)絡(luò)(Backbone Network)和檢測(cè)頭部(Detection Head)構(gòu)成,如圖1所示。前者的作用主要是特征提取,給出輸入圖像不同大小、不同抽象層次的語(yǔ)義特征信息表示;后者則根據(jù)這些語(yǔ)義特征表示和監(jiān)督信息完成待檢測(cè)目標(biāo)的分類(lèi)和定位任務(wù),分類(lèi)的結(jié)果是輸出類(lèi)別標(biāo)簽,定位的結(jié)果是輸出檢測(cè)矩形框的位置信息,包含矩形框的中心位置坐標(biāo)(fx,fy)和寬高(fw,fh)。檢測(cè)頭部網(wǎng)絡(luò)負(fù)責(zé)的類(lèi)別預(yù)測(cè)和位置回歸兩個(gè)任務(wù)一般是并行進(jìn)行的,構(gòu)成多任務(wù)的損失進(jìn)行聯(lián)合訓(xùn)練。
圖1 單階段目標(biāo)檢測(cè)結(jié)構(gòu)示意圖
式中:m為分類(lèi)網(wǎng)絡(luò)輸出的象限值。
圖2 條形碼傾斜角度定義示意圖
圖3 象限劃分示意圖
獲得傾斜條形碼角度值之后,通過(guò)仿射變換可以矯正條形碼,由于傾斜角是從水平方向開(kāi)始逆時(shí)針旋轉(zhuǎn)定義的,故實(shí)際條形碼需要逆時(shí)針旋轉(zhuǎn)(90-θ)度(若旋轉(zhuǎn)角為負(fù)值,順時(shí)針旋轉(zhuǎn)即可),旋轉(zhuǎn)變換矩陣為:
最終,檢測(cè)頭部結(jié)構(gòu)如圖4所示。首先從特征提取基礎(chǔ)網(wǎng)絡(luò)中抽取特征圖,假設(shè)特征圖的大小為S×S×D,通過(guò)3×3卷積運(yùn)算獲得特征圖待檢測(cè)張量,將張量劃分為S×S個(gè)格點(diǎn),每個(gè)格點(diǎn)設(shè)置B個(gè)預(yù)設(shè)錨框(Anchor),如圖5所示,這樣每個(gè)格點(diǎn)最多可以檢測(cè)B個(gè)中心落在此格點(diǎn)內(nèi)的目標(biāo)。每個(gè)格點(diǎn)向量中具體值含義為:對(duì)于每一個(gè)Anchor,輸出檢測(cè)矩形框的4個(gè)坐標(biāo)信息(fx,fy,fw,fh);N個(gè)屬性類(lèi)別標(biāo)簽值,其中N-1個(gè)值代表實(shí)際類(lèi)別數(shù)目,剩下1個(gè)代表背景類(lèi)別;M個(gè)象限類(lèi)別標(biāo)簽值;1個(gè)角度回歸值。最終每個(gè)格點(diǎn)向量的長(zhǎng)度為B×(4+N+M+1)。
圖4 帶傾斜校正的檢測(cè)頭部示意圖
圖5 Anchor設(shè)置示意圖
為了訓(xùn)練優(yōu)化設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu),需要設(shè)定合理的損失函數(shù),最終的損失主要包含三項(xiàng):分類(lèi)損失、邊界框回歸損失和角度矯正損失。
分類(lèi)損失主要涉及到屬性分類(lèi)損失和象限分類(lèi)損失,考慮到正負(fù)樣本比例會(huì)影響最終網(wǎng)絡(luò)的訓(xùn)練效果,故設(shè)計(jì)一種類(lèi)別均衡的Softmax交叉熵?fù)p失進(jìn)行計(jì)算:
回歸輸出的位置坐標(biāo)信息(fx,fy,fw,fh)其實(shí)代表一種偏移變換關(guān)系,中心點(diǎn)坐標(biāo)信息的預(yù)測(cè)值(fx,fy)是相對(duì)于Anchor左上角坐標(biāo)的偏移值,邊界框?qū)捀咝畔⒌念A(yù)測(cè)值(fw,fh)是相對(duì)于Anchor長(zhǎng)寬的變化比例,具體計(jì)算方式如下:
式中:(xp,yp,wp,hp)、(xa,ya,wa,ha)和(xg,yg,wg,hg)分別是預(yù)測(cè)回歸框、Anchor和真值標(biāo)記框的中心點(diǎn)坐標(biāo)和寬高;(tx,ty,tw,th)代表真值標(biāo)記框相對(duì)于Anchor的變換關(guān)系。邊界框位置回歸損失函數(shù)選擇Smooth-L1:
從Smooth-L1損失函數(shù)可以看出,借助Anchor作為中間橋梁,預(yù)測(cè)回歸框不斷向真值標(biāo)記框靠近調(diào)整,同時(shí)引入偏移量和log變換限定輸出量的范圍,保證每一個(gè)Anchor負(fù)責(zé)檢測(cè)周?chē)浇鼏挝灰詢(xún)?nèi)的目標(biāo),使得模型更容易收斂并且損失保持在合理的量級(jí)上,可以看作一種標(biāo)準(zhǔn)化操作。
回歸角度損失函數(shù)若采用常見(jiàn)的L2損失函數(shù),會(huì)導(dǎo)致?lián)p失函數(shù)對(duì)角度值偏差大的條形碼更加敏感,使得最終網(wǎng)絡(luò)對(duì)于小角度偏差的條形碼矯正效果差。采用Smooth-L1損失函數(shù)能緩解上述問(wèn)題,但是并不是針對(duì)角度量設(shè)計(jì)的。故本文采用余弦距離函數(shù)歸一化角度值,保證網(wǎng)絡(luò)最終的角度回歸效果:
Langle=1-cos(θ-θ*)
式中:θ為預(yù)測(cè)回歸角度;θ*為真值標(biāo)注角度。
綜上,將上述的分類(lèi)損失、定位回歸損失和角度回歸損失合并,得到最終的多任務(wù)損失函數(shù):
L=Lcls+λ1Lloc+λ2Langle
式中:λ1和λ2為平衡這三者的權(quán)重因子,本文通過(guò)交叉驗(yàn)證設(shè)置λ1值為2,λ2值為10。
本實(shí)驗(yàn)標(biāo)注了5 320張來(lái)自物流包裹分揀現(xiàn)場(chǎng)的條形碼圖片,取出其中20%作為測(cè)試集,剩余作為訓(xùn)練集,并通過(guò)數(shù)據(jù)增強(qiáng)如小角度旋轉(zhuǎn)、平移、翻折、縮放和裁剪等操作擴(kuò)充訓(xùn)練樣本集。輸入圖片大小為512×512,在送入模型網(wǎng)絡(luò)之前進(jìn)行去均值歸一化等預(yù)處理操作。實(shí)驗(yàn)的軟件環(huán)境為Ubuntu 16.04 LTS,使用的深度學(xué)習(xí)架構(gòu)是keras;硬件的配置是:CPU為56 Intel(R) Xeon(R) CPU E5-2683 v3 @ 2.00 GHz;GPU為6塊NVIDIA TITAN Xp,每塊12 GB顯存。
為了最終衡量條形碼傾斜矯正的效果,通過(guò)以下角度評(píng)價(jià)標(biāo)準(zhǔn)進(jìn)行計(jì)算:
J(θ,θ*)=|θ-θ*|
式中:J(θ,θ*)代表預(yù)測(cè)回歸角度θ和真值標(biāo)注角度θ*之間的絕對(duì)值誤差;α為角度誤差容忍因子;S為整個(gè)測(cè)試數(shù)據(jù)集中檢測(cè)到條形碼圖片的數(shù)量;#()代表滿(mǎn)足括號(hào)內(nèi)條件的條形碼圖片個(gè)數(shù);Rα為在某一角度誤差容忍因子α下的矯正準(zhǔn)確率。除此之外,為實(shí)際檢驗(yàn)條形碼矯正的效果,采用條形碼譯碼開(kāi)源算法ZXing和ZBar對(duì)矯正之后的圖片進(jìn)行識(shí)別。
首先,通過(guò)實(shí)驗(yàn)驗(yàn)證選擇合理的角度回歸損失函數(shù)。實(shí)驗(yàn)中單階段目標(biāo)檢測(cè)算法選擇YOLOv3和ResNet50-SSD,檢測(cè)頭部中象限分類(lèi)值M設(shè)置為1,實(shí)驗(yàn)結(jié)果如表1所示。
表1 不同角度回歸損失函數(shù)的矯正效果 %
從表1中可以看出,L2損失函數(shù)在R1下表現(xiàn)遠(yuǎn)低于Smooth-L1和余弦距離損失函數(shù),表明L2損失函數(shù)對(duì)于大角度誤差更加敏感。另外,在R1、R3和R5所有評(píng)價(jià)標(biāo)準(zhǔn)下,余弦距離損失函數(shù)均取得最優(yōu)的表現(xiàn)效果,證明其更加適合角度回歸相關(guān)任務(wù)。
表2展示了本文設(shè)計(jì)的傾斜矯正算法與其他算法的對(duì)比結(jié)果。文獻(xiàn)[10]采用YOLO目標(biāo)檢測(cè)算法和角度矯正卷積神經(jīng)網(wǎng)絡(luò)完成條碼檢測(cè)矯正,本文設(shè)計(jì)了YOLO+Ours(M=1)實(shí)驗(yàn)與之對(duì)比,其象限分類(lèi)數(shù)M為1,即和文獻(xiàn)[10]中角度矯正卷積神經(jīng)網(wǎng)絡(luò)一樣直接回歸傾斜角度。從結(jié)果可以得出,YOLO+Ours(M=1)不管在矯正準(zhǔn)確率、實(shí)際譯碼率和耗時(shí)上都優(yōu)于文獻(xiàn)[10],文獻(xiàn)[10]設(shè)計(jì)的角度矯正網(wǎng)絡(luò)存在冗余,沒(méi)有充分利用YOLO目標(biāo)檢測(cè)算法已經(jīng)通過(guò)卷積網(wǎng)絡(luò)充分提取到的特征語(yǔ)義信息,卷積計(jì)算的共享程度低。因此本文直接將傾斜矯正任務(wù)嵌入到Y(jié)OLO目標(biāo)算法中取得更優(yōu)效果。
表2 不同傾斜矯正算法效果對(duì)比
作為空白對(duì)照,進(jìn)行了YOLO(No Rotation)和YOLO+GT Rotation兩組實(shí)驗(yàn)。YOLO(No Rotation)是直接進(jìn)行條形碼檢測(cè),不進(jìn)行傾斜矯正操作,可以看出最終實(shí)際譯碼率非常低,說(shuō)明傾斜矯正對(duì)于提升譯碼率至關(guān)重要。YOLO+GT Rotation是在YOLO算法檢測(cè)到條形碼之后,通過(guò)真值標(biāo)注角度進(jìn)行矯正,最終得到最高的譯碼率。除此之外,設(shè)計(jì)了基于傳統(tǒng)數(shù)字圖像算法Hough變換的實(shí)驗(yàn)YOLO+Hough,將YOLO算法檢測(cè)出的條形碼區(qū)域送入Hough變換算法進(jìn)行矯正,YOLO+Hough在矯正準(zhǔn)確率和實(shí)際譯碼率均取得不錯(cuò)效果,但是由于耗時(shí)237 ms,在實(shí)際物流包裹分揀場(chǎng)景下與其他算法相比并不占優(yōu)。
最后,以YOLOv3檢測(cè)算法為基礎(chǔ)設(shè)計(jì)了4組實(shí)驗(yàn)探究本文設(shè)計(jì)的傾斜矯正算法中象限分組數(shù)M對(duì)于最終結(jié)果的影響。結(jié)果表明,隨著象限分組數(shù)M的增大,矯正準(zhǔn)確率和實(shí)際譯碼率逐步提高,說(shuō)明在直接回歸傾斜角之前進(jìn)行象限分組有助于降低回歸角度的難度,但是在M大于等于3之后,提升效果有限。另外,R1矯正準(zhǔn)確率的提升幅度并沒(méi)有R3和R5大,說(shuō)明精確回歸傾斜角度難度較大。
圖6展示了本文設(shè)計(jì)的傾斜矯正算法的效果示意圖,傾斜位置的條形碼圖片能夠很好地被矯正水平,完成了實(shí)際物流包裹分揀場(chǎng)景下條形碼的矯正任務(wù)。
圖6 條形碼檢測(cè)矯正結(jié)果示意圖
針對(duì)物流包裹分揀場(chǎng)景下的條形碼識(shí)別問(wèn)題,本文提出一種基于多任務(wù)目標(biāo)檢測(cè)的傾斜矯正算法。該算法以深度學(xué)習(xí)中的單階段檢測(cè)器為基礎(chǔ),嵌入了條形碼傾斜角度預(yù)測(cè)的任務(wù),通過(guò)先對(duì)條形碼傾斜程度分類(lèi)再回歸角度的策略,大大降低了傾斜矯正任務(wù)的難度。最終通過(guò)實(shí)驗(yàn)驗(yàn)證本文算法在效果和速度上都明顯優(yōu)于其他算法,并且象限分組和余弦距離角度損失函數(shù)對(duì)最后矯正準(zhǔn)確率提升明顯。