蔡若君,陳浩文,葉武劍,劉怡俊,呂月圓,陳穗霞,劉峰
(1.廣東工業大學,廣州 510006;2.廣東迅通科技股份有限公司,廣州 510075;3.南京郵電大學圖像處理與圖像通信重點實驗室,南京 210046)
二維碼是近年來頗受矚目的一種新的編碼方式,可以存儲更大量、更多種類的數據類型,廣泛應用于購物、交通工具等場景。傳統的二維碼定位方法,采用圖像處理的相關操作,標記找到二維碼的三個特征區域以定位出二維碼,再以相關的二維碼掃描算法加以檢測。
然而,傳統的定位方法需要運用圖像匹配的方法,而ZBar等算法對二維碼分辨率、角度的要求較高,這種方法既麻煩,又只能得出粗略的二維碼定位加以判斷檢測,其效果不好且效率低。
深度學習是為了模擬人腦作分析學習的建立的神經網絡,在多層神經網絡上運用各種算法解決多種問題。卷積神經網絡(CNN)為其中重要算法之一,包含了一個由卷積層和子采樣層構成的特征抽取器,極大地簡化模型復雜度,減少參數。
為了更高效定位二維碼,本文采用了基于Mask R-CNN(Region-based CNN)[1]的模型,提出了基于深度學習的二維碼定位與檢測技術。定位出圖中處于不同位置的多個二維碼,同時簡化前期處理步驟,提高識別速率。
二維碼作為大量信息的簡便的載體,其定位與檢測技術也是我們應該重點研究的。
傳統的定位檢測技術是結合圖像匹配的二維碼掃描算法的方法。方法主要是對二維碼圖像作圖像處理[2],找出二維碼的三個特征點以定位二維碼,再結合如ZBar的掃描算法,掃描二維碼并檢測。
Lingling Tong等[3]通過計算分析圖像的LBP特征得到二維碼的初定區域,根據QR二維碼圖像中黑白模塊數的比接近1:1的特性來準確定位QR二維碼位置。
屈德濤[4]等人提出了利用級聯AdaBoost[5]分類器訓練檢測QR碼,實現在復雜情況下識別二維碼。
相比于傳統的檢測技術,基于深度學習的定位技術顯示出較大的優勢。
Girshick[6]等人提出的R-CNN算法是目標識別算法的先例,該算法使用候選框獲取目標可能在的位置,并用CNN代替傳統的提取特征法,最后用SVM分類器識別。Fast R-CNN[7]改進了Selected Search法選取候選框;Faster R-CNN[8]則在其基礎上,提出了RPN網絡,對RPN預測的區域計算回歸損失。
針對R-CNN系列的兩級算法,one-stage的YOLO算法[9]出現。YOLO算法在全連接層即完成了物體分類和物體檢測,提高了檢測速率;YOLO v2[10]去掉了全連接層,接上BN做下次卷積輸入的數據歸一化,并提高輸入圖片的分辨率和多種尺寸的圖片進入訓練,速率仍有提高,卻存在較大的漏檢率,檢測結果卻不夠精確。
相比之下,Mask R-CNN增加了預測掩碼的分支,更進一步改善了目標檢測的準確率,加上起高速率,在對二維碼的定位與檢測上,保證了其實時性,解決了現階段不能實時并同時準確檢測出多個二維碼的問題。
本文的實驗框架如圖1所示,包括了制作數據集、訓練網絡、測試結果等部分。

圖1 本文提出方法結構圖
以COCO[11]數據集為基礎,該數據集包含了91類目標,328000影像和2500000個標簽,考慮到其訓練好的圖像包含了大量自然特征,使用其預訓練的權重,用遷移學習的方法,將數據集輸入訓練模型。
在制作數據集的過程中,從網頁上搜索并選取包含二維碼的圖片,本文采用了VIA工具,對采集到的二維碼圖片做人工標注,對每個圖中二維碼以多邊形點標注,并記為類“QR Code”,保存最終標簽數據集為.json文件,以供訓練模型使用。
本數據集包含多種情況、角度下的二維碼,如圖2所示,其標簽信息.json文件如圖3所示(其中size代表圖片的像素值,regions包含了所有點的x、y坐標值,name表示標注信息為QR_Code)。
訓練時,配置模型的輸入尺寸為1024×1024以保證訓練過程中獲得最高的準確率。盡管圖像相對較小,模型可以自動地重新調整圖片的輸入尺寸。本采取的momentum優化算法,設置學習率為0.001,mo?mentum為0.9,以獲取最佳檢測性能。

圖2 包含各種大小角度二維碼數據集

圖3 數據集中某張圖片的標注信息
Mask R-CNN[1]利用ResNet-FPN[12](殘差網絡-特征金字塔網絡)提取圖片特征,傳入兩級網絡,其一是采用區域建議網絡(RPN)讀取特征圖并生成一個可能目標區域,二級生成可能分類以及生成邊界框和掩碼。如圖4所示。
(1)RPN 網絡
RPN使用滑動窗口在卷積過程掃描圖像的主干特征圖,通過滑動窗口掃描、預測,選了更好的含有目標的區域(anchor),并精調了anchor的位置和尺寸。對于重疊部分,選擇最高前景分數的區域,得到最終可能的目標區域,傳入下一階段。
(2)分類邊界框及掩碼
平行于預測分類和坐標信息,這一階段添加了一個掩碼預測分支。這個分支用FCN(完全卷積網絡)[13]對每個ROI(Region Of Interest)作像素級別的預測,生成一個m×m的掩碼,可以得到更準確的預測掩碼。
對每個掩碼,采用ROIAlign層,使用雙線性插值來計算每個ROI中的固定取樣位置的輸入特征的精確值,并聚合結果值,可以保證掩碼精確對應到原始輸入圖像。同時,將矩形框分類和坐標回歸并行進行,簡化了網絡的流程。

圖4 Mask R-CNN結構圖
該網絡的損失函數如下式所示:
其中,Lcls為分類損失,Lbox為bounding-box回歸損失,Lmask為實例分割損失。
經過對標記好的二維碼數據集訓練好以后,將其模型運用到Mask R-CNN中,放入一些含有二維碼的圖片和不含二維碼圖片進行檢測,可以看到較好的效果。部分圖片結果如圖:

圖5 正面的二維碼檢測
由圖5、6、7、8可以看出,本文所提方法在不同的情況的二維碼均能定位檢測出。Mask R-CNN在修改了ROIAlign雙插值法以及添加mask分支后,其檢測更為精確,應用在二維碼的定位檢測上,可以一次性同時識別出同一圖片上的多個二維碼,即高速又高效。

圖6 有角度的二維碼檢測

圖7 背光下的二維碼檢測

圖8 反光下的二維碼檢測
本文提出一種基于深度學習的二維碼定位與檢測法,在復雜場景和背光反光等的場景中依舊就較好的檢測效果。在實驗環境下,本文所提的方法具有較好的定位與檢測效果。