易 帆 李功燕 許紹云
1(中國科學院微電子研究所 北京 100029)2(中國科學院大學 北京 100049)
條形碼技術在實際生活中已經取得廣泛應用,例如在物流快遞、醫療、交通、倉儲、生產自動化、票務單、商場等場景極大方便了人們的日常工作。通過將條形碼圖像輸入計算機,按照預定的規則解碼出條形碼信息,不再需要人工手動輸入,完全由機器完成,避免人工錄入帶來的失誤,提高了生產效率。然而,實際場景中輸入圖像內容不全是條形碼,還存在很多背景干擾信息,因此在識別條形碼內容之前需要檢測定位輸入圖像中條形碼的位置。另外,考慮到條形碼可能存在傾斜的情況,需要在檢測定位條形碼位置之后再進行角度矯正,條形碼矯正結果的好壞直接影響后續條形碼譯碼的準確率和速度。當前條形碼技術研究主要集中在條形碼檢測定位上,矯正研究較少并與檢測分開處理,無法協同發揮促進兩者的相互作用。故本文以物流快遞包裹自動化分揀場景為背景,基于深度學習中目標檢測技術研究條形碼傾斜矯正相關算法,以提高最終條形碼傾斜矯正的效果。
隨著條形碼技術的廣泛運用和應用場景的復雜化,越來越多的條形碼識別算法被提出,主要分為傳統的數字圖像處理和深度學習兩類算法。
在早期,條形碼識別算法主要是基于傳統的數字圖像處理。文獻[1-2]借助邊緣檢測算子對輸入圖像進行操作獲取梯度特征區域,并通過自適應閾值濾除大部分背景,再通過主梯度及Hough變換獲取傾斜方向矯正條形碼,最后依據條碼特征合并候選區域。文獻[3]首先生成輸入圖像的方向直方圖,去除背景區域和雜波,并分析基于局部熵的方向分割出條形碼區域,最后分析合并條碼區域。文獻[4]采用Harris角點檢測器和Hough變換算法估計待檢測條碼區域的旋轉角度,再通過條形碼區域的連通性和幾何特性來直接識別單個視頻幀中的多個條形碼區域。文獻[5-7]通過提取滑動窗口的局部二值模式(Local Binary Pattern,LBP)或者方向梯度直方圖(Histogram of Oriented Gradient,HOG)特征,送入支持向量機(Support Vector Machine,SVM)分類器判斷所屬類別,進而將連通子塊合并得到條碼區域,最后由Hough變換算法矯正條形碼。文獻[8]利用主成分分析PCA算法提取條形碼主要特征,再通過SVM算法判別條碼區域的可能性。以上算法一般需要手工設計特征和規則,無法適應在物流包裹分揀場景下,條形碼圖片因為光照不均、背景干擾、包裹扭曲形變、模糊、污損等情況造成圖片質量下降和特征不明顯,進而算法性能大打折扣。
近年來,深度學習技術快速發展,憑借著其強大的擬合和提取特征能力,已經在絕大多數圖像領域取得優于傳統圖像處理算法的效果。文獻[9]提出了一種基于雙金字塔結構的分割網絡BarcodeNet,分割提取條形碼區域。文獻[10]提出一種基于卷積神經網絡的級聯條形碼檢測算法。首先使用Faster-Rcnn[11]目標檢測算法獲得條形碼區域,再借助最大穩定極值區域(Maximally Stable Extremal Regions,MSERs)算法消除背景噪聲并檢測條碼方向,最后通過自適應流形(Adaptive Manifold,AM)濾波器處理模糊條形碼區域,整個算法流程由于多階段處理速度較慢。文獻[12]通過YOLO[13]目標檢測算法定位條形碼區域,之后將條形碼區域裁剪放縮至正方形送入一個角度矯正卷積神經網絡預測條形碼的傾斜角,然而這兩部分網絡提取特征存在重復冗余,并且直接回歸預測傾斜角誤差偏大。針對以上條形碼檢測矯正算法的不足,本文基于深度學習目標檢測算法改進條碼檢測矯正的效果和速度。
目標檢測一直是計算機視覺領域的基礎問題,主要關注的是圖片中特定目標物體的位置。一個檢測任務包含兩個子任務:一是輸出這一目標的類別信息,屬于分類任務;二是輸出目標的具體位置信息,屬于定位任務。傳統的目標檢測算法主要通過區域選擇、特征提取和分類回歸三個步驟組成,然而,區域選擇的策略效果差、時間復雜度高,手工設計提取的特征魯棒性較差。隨著深度學習的介入,這三個步驟可由一個端到端的卷積神經網絡完成,極大地提高了目標檢測的準確率。目前主流的基于卷積神經網絡的目標檢測算法主要分為兩類:一個是以Faster-Rcnn為代表的兩階段檢測器,通常先進行前背景分類和回歸框粗調,再進行目標分類和回歸框精調,檢測準確率高但速度偏慢;另一個是以YOLO和SSD[14]為代表的單階段檢測器,直接進行類別預測和位置回歸,檢測準確率稍低于Faster-Rcnn但速度快。由于實際生產環境中對條形碼識別速度要求嚴格,故本文以單階段檢測器為基礎,改進檢測器結構,提出一種多任務目標檢測的條形碼矯正算法。
單階段檢測器模型整體上由基礎網絡(Backbone Network)和檢測頭部(Detection Head)構成,如圖1所示。前者的作用主要是特征提取,給出輸入圖像不同大小、不同抽象層次的語義特征信息表示;后者則根據這些語義特征表示和監督信息完成待檢測目標的分類和定位任務,分類的結果是輸出類別標簽,定位的結果是輸出檢測矩形框的位置信息,包含矩形框的中心位置坐標(fx,fy)和寬高(fw,fh)。檢測頭部網絡負責的類別預測和位置回歸兩個任務一般是并行進行的,構成多任務的損失進行聯合訓練。

圖1 單階段目標檢測結構示意圖

式中:m為分類網絡輸出的象限值。

圖2 條形碼傾斜角度定義示意圖

圖3 象限劃分示意圖
獲得傾斜條形碼角度值之后,通過仿射變換可以矯正條形碼,由于傾斜角是從水平方向開始逆時針旋轉定義的,故實際條形碼需要逆時針旋轉(90-θ)度(若旋轉角為負值,順時針旋轉即可),旋轉變換矩陣為:

最終,檢測頭部結構如圖4所示。首先從特征提取基礎網絡中抽取特征圖,假設特征圖的大小為S×S×D,通過3×3卷積運算獲得特征圖待檢測張量,將張量劃分為S×S個格點,每個格點設置B個預設錨框(Anchor),如圖5所示,這樣每個格點最多可以檢測B個中心落在此格點內的目標。每個格點向量中具體值含義為:對于每一個Anchor,輸出檢測矩形框的4個坐標信息(fx,fy,fw,fh);N個屬性類別標簽值,其中N-1個值代表實際類別數目,剩下1個代表背景類別;M個象限類別標簽值;1個角度回歸值。最終每個格點向量的長度為B×(4+N+M+1)。

圖4 帶傾斜校正的檢測頭部示意圖

圖5 Anchor設置示意圖
為了訓練優化設計的網絡結構,需要設定合理的損失函數,最終的損失主要包含三項:分類損失、邊界框回歸損失和角度矯正損失。
分類損失主要涉及到屬性分類損失和象限分類損失,考慮到正負樣本比例會影響最終網絡的訓練效果,故設計一種類別均衡的Softmax交叉熵損失進行計算:

回歸輸出的位置坐標信息(fx,fy,fw,fh)其實代表一種偏移變換關系,中心點坐標信息的預測值(fx,fy)是相對于Anchor左上角坐標的偏移值,邊界框寬高信息的預測值(fw,fh)是相對于Anchor長寬的變化比例,具體計算方式如下:
式中:(xp,yp,wp,hp)、(xa,ya,wa,ha)和(xg,yg,wg,hg)分別是預測回歸框、Anchor和真值標記框的中心點坐標和寬高;(tx,ty,tw,th)代表真值標記框相對于Anchor的變換關系。邊界框位置回歸損失函數選擇Smooth-L1:

從Smooth-L1損失函數可以看出,借助Anchor作為中間橋梁,預測回歸框不斷向真值標記框靠近調整,同時引入偏移量和log變換限定輸出量的范圍,保證每一個Anchor負責檢測周圍附近單位以內的目標,使得模型更容易收斂并且損失保持在合理的量級上,可以看作一種標準化操作。
回歸角度損失函數若采用常見的L2損失函數,會導致損失函數對角度值偏差大的條形碼更加敏感,使得最終網絡對于小角度偏差的條形碼矯正效果差。采用Smooth-L1損失函數能緩解上述問題,但是并不是針對角度量設計的。故本文采用余弦距離函數歸一化角度值,保證網絡最終的角度回歸效果:
Langle=1-cos(θ-θ*)
式中:θ為預測回歸角度;θ*為真值標注角度。
綜上,將上述的分類損失、定位回歸損失和角度回歸損失合并,得到最終的多任務損失函數:
L=Lcls+λ1Lloc+λ2Langle
式中:λ1和λ2為平衡這三者的權重因子,本文通過交叉驗證設置λ1值為2,λ2值為10。
本實驗標注了5 320張來自物流包裹分揀現場的條形碼圖片,取出其中20%作為測試集,剩余作為訓練集,并通過數據增強如小角度旋轉、平移、翻折、縮放和裁剪等操作擴充訓練樣本集。輸入圖片大小為512×512,在送入模型網絡之前進行去均值歸一化等預處理操作。實驗的軟件環境為Ubuntu 16.04 LTS,使用的深度學習架構是keras;硬件的配置是:CPU為56 Intel(R) Xeon(R) CPU E5-2683 v3 @ 2.00 GHz;GPU為6塊NVIDIA TITAN Xp,每塊12 GB顯存。
為了最終衡量條形碼傾斜矯正的效果,通過以下角度評價標準進行計算:
J(θ,θ*)=|θ-θ*|
式中:J(θ,θ*)代表預測回歸角度θ和真值標注角度θ*之間的絕對值誤差;α為角度誤差容忍因子;S為整個測試數據集中檢測到條形碼圖片的數量;#()代表滿足括號內條件的條形碼圖片個數;Rα為在某一角度誤差容忍因子α下的矯正準確率。除此之外,為實際檢驗條形碼矯正的效果,采用條形碼譯碼開源算法ZXing和ZBar對矯正之后的圖片進行識別。
首先,通過實驗驗證選擇合理的角度回歸損失函數。實驗中單階段目標檢測算法選擇YOLOv3和ResNet50-SSD,檢測頭部中象限分類值M設置為1,實驗結果如表1所示。

表1 不同角度回歸損失函數的矯正效果 %
從表1中可以看出,L2損失函數在R1下表現遠低于Smooth-L1和余弦距離損失函數,表明L2損失函數對于大角度誤差更加敏感。另外,在R1、R3和R5所有評價標準下,余弦距離損失函數均取得最優的表現效果,證明其更加適合角度回歸相關任務。
表2展示了本文設計的傾斜矯正算法與其他算法的對比結果。文獻[10]采用YOLO目標檢測算法和角度矯正卷積神經網絡完成條碼檢測矯正,本文設計了YOLO+Ours(M=1)實驗與之對比,其象限分類數M為1,即和文獻[10]中角度矯正卷積神經網絡一樣直接回歸傾斜角度。從結果可以得出,YOLO+Ours(M=1)不管在矯正準確率、實際譯碼率和耗時上都優于文獻[10],文獻[10]設計的角度矯正網絡存在冗余,沒有充分利用YOLO目標檢測算法已經通過卷積網絡充分提取到的特征語義信息,卷積計算的共享程度低。因此本文直接將傾斜矯正任務嵌入到YOLO目標算法中取得更優效果。

表2 不同傾斜矯正算法效果對比
作為空白對照,進行了YOLO(No Rotation)和YOLO+GT Rotation兩組實驗。YOLO(No Rotation)是直接進行條形碼檢測,不進行傾斜矯正操作,可以看出最終實際譯碼率非常低,說明傾斜矯正對于提升譯碼率至關重要。YOLO+GT Rotation是在YOLO算法檢測到條形碼之后,通過真值標注角度進行矯正,最終得到最高的譯碼率。除此之外,設計了基于傳統數字圖像算法Hough變換的實驗YOLO+Hough,將YOLO算法檢測出的條形碼區域送入Hough變換算法進行矯正,YOLO+Hough在矯正準確率和實際譯碼率均取得不錯效果,但是由于耗時237 ms,在實際物流包裹分揀場景下與其他算法相比并不占優。
最后,以YOLOv3檢測算法為基礎設計了4組實驗探究本文設計的傾斜矯正算法中象限分組數M對于最終結果的影響。結果表明,隨著象限分組數M的增大,矯正準確率和實際譯碼率逐步提高,說明在直接回歸傾斜角之前進行象限分組有助于降低回歸角度的難度,但是在M大于等于3之后,提升效果有限。另外,R1矯正準確率的提升幅度并沒有R3和R5大,說明精確回歸傾斜角度難度較大。
圖6展示了本文設計的傾斜矯正算法的效果示意圖,傾斜位置的條形碼圖片能夠很好地被矯正水平,完成了實際物流包裹分揀場景下條形碼的矯正任務。

圖6 條形碼檢測矯正結果示意圖
針對物流包裹分揀場景下的條形碼識別問題,本文提出一種基于多任務目標檢測的傾斜矯正算法。該算法以深度學習中的單階段檢測器為基礎,嵌入了條形碼傾斜角度預測的任務,通過先對條形碼傾斜程度分類再回歸角度的策略,大大降低了傾斜矯正任務的難度。最終通過實驗驗證本文算法在效果和速度上都明顯優于其他算法,并且象限分組和余弦距離角度損失函數對最后矯正準確率提升明顯。