蔡若君,陳浩文,葉武劍,劉怡俊,呂月圓,陳穗霞,劉峰
(1.廣東工業(yè)大學(xué),廣州 510006;2.廣東迅通科技股份有限公司,廣州 510075;3.南京郵電大學(xué)圖像處理與圖像通信重點(diǎn)實(shí)驗(yàn)室,南京 210046)
二維碼是近年來頗受矚目的一種新的編碼方式,可以存儲更大量、更多種類的數(shù)據(jù)類型,廣泛應(yīng)用于購物、交通工具等場景。傳統(tǒng)的二維碼定位方法,采用圖像處理的相關(guān)操作,標(biāo)記找到二維碼的三個(gè)特征區(qū)域以定位出二維碼,再以相關(guān)的二維碼掃描算法加以檢測。
然而,傳統(tǒng)的定位方法需要運(yùn)用圖像匹配的方法,而ZBar等算法對二維碼分辨率、角度的要求較高,這種方法既麻煩,又只能得出粗略的二維碼定位加以判斷檢測,其效果不好且效率低。
深度學(xué)習(xí)是為了模擬人腦作分析學(xué)習(xí)的建立的神經(jīng)網(wǎng)絡(luò),在多層神經(jīng)網(wǎng)絡(luò)上運(yùn)用各種算法解決多種問題。卷積神經(jīng)網(wǎng)絡(luò)(CNN)為其中重要算法之一,包含了一個(gè)由卷積層和子采樣層構(gòu)成的特征抽取器,極大地簡化模型復(fù)雜度,減少參數(shù)。
為了更高效定位二維碼,本文采用了基于Mask R-CNN(Region-based CNN)[1]的模型,提出了基于深度學(xué)習(xí)的二維碼定位與檢測技術(shù)。定位出圖中處于不同位置的多個(gè)二維碼,同時(shí)簡化前期處理步驟,提高識別速率。
二維碼作為大量信息的簡便的載體,其定位與檢測技術(shù)也是我們應(yīng)該重點(diǎn)研究的。
傳統(tǒng)的定位檢測技術(shù)是結(jié)合圖像匹配的二維碼掃描算法的方法。方法主要是對二維碼圖像作圖像處理[2],找出二維碼的三個(gè)特征點(diǎn)以定位二維碼,再結(jié)合如ZBar的掃描算法,掃描二維碼并檢測。
Lingling Tong等[3]通過計(jì)算分析圖像的LBP特征得到二維碼的初定區(qū)域,根據(jù)QR二維碼圖像中黑白模塊數(shù)的比接近1:1的特性來準(zhǔn)確定位QR二維碼位置。
屈德濤[4]等人提出了利用級聯(lián)AdaBoost[5]分類器訓(xùn)練檢測QR碼,實(shí)現(xiàn)在復(fù)雜情況下識別二維碼。
相比于傳統(tǒng)的檢測技術(shù),基于深度學(xué)習(xí)的定位技術(shù)顯示出較大的優(yōu)勢。
Girshick[6]等人提出的R-CNN算法是目標(biāo)識別算法的先例,該算法使用候選框獲取目標(biāo)可能在的位置,并用CNN代替?zhèn)鹘y(tǒng)的提取特征法,最后用SVM分類器識別。Fast R-CNN[7]改進(jìn)了Selected Search法選取候選框;Faster R-CNN[8]則在其基礎(chǔ)上,提出了RPN網(wǎng)絡(luò),對RPN預(yù)測的區(qū)域計(jì)算回歸損失。
針對R-CNN系列的兩級算法,one-stage的YOLO算法[9]出現(xiàn)。YOLO算法在全連接層即完成了物體分類和物體檢測,提高了檢測速率;YOLO v2[10]去掉了全連接層,接上BN做下次卷積輸入的數(shù)據(jù)歸一化,并提高輸入圖片的分辨率和多種尺寸的圖片進(jìn)入訓(xùn)練,速率仍有提高,卻存在較大的漏檢率,檢測結(jié)果卻不夠精確。
相比之下,Mask R-CNN增加了預(yù)測掩碼的分支,更進(jìn)一步改善了目標(biāo)檢測的準(zhǔn)確率,加上起高速率,在對二維碼的定位與檢測上,保證了其實(shí)時(shí)性,解決了現(xiàn)階段不能實(shí)時(shí)并同時(shí)準(zhǔn)確檢測出多個(gè)二維碼的問題。
本文的實(shí)驗(yàn)框架如圖1所示,包括了制作數(shù)據(jù)集、訓(xùn)練網(wǎng)絡(luò)、測試結(jié)果等部分。
圖1 本文提出方法結(jié)構(gòu)圖
以COCO[11]數(shù)據(jù)集為基礎(chǔ),該數(shù)據(jù)集包含了91類目標(biāo),328000影像和2500000個(gè)標(biāo)簽,考慮到其訓(xùn)練好的圖像包含了大量自然特征,使用其預(yù)訓(xùn)練的權(quán)重,用遷移學(xué)習(xí)的方法,將數(shù)據(jù)集輸入訓(xùn)練模型。
在制作數(shù)據(jù)集的過程中,從網(wǎng)頁上搜索并選取包含二維碼的圖片,本文采用了VIA工具,對采集到的二維碼圖片做人工標(biāo)注,對每個(gè)圖中二維碼以多邊形點(diǎn)標(biāo)注,并記為類“QR Code”,保存最終標(biāo)簽數(shù)據(jù)集為.json文件,以供訓(xùn)練模型使用。
本數(shù)據(jù)集包含多種情況、角度下的二維碼,如圖2所示,其標(biāo)簽信息.json文件如圖3所示(其中size代表圖片的像素值,regions包含了所有點(diǎn)的x、y坐標(biāo)值,name表示標(biāo)注信息為QR_Code)。
訓(xùn)練時(shí),配置模型的輸入尺寸為1024×1024以保證訓(xùn)練過程中獲得最高的準(zhǔn)確率。盡管圖像相對較小,模型可以自動地重新調(diào)整圖片的輸入尺寸。本采取的momentum優(yōu)化算法,設(shè)置學(xué)習(xí)率為0.001,mo?mentum為0.9,以獲取最佳檢測性能。
圖2 包含各種大小角度二維碼數(shù)據(jù)集
圖3 數(shù)據(jù)集中某張圖片的標(biāo)注信息
Mask R-CNN[1]利用ResNet-FPN[12](殘差網(wǎng)絡(luò)-特征金字塔網(wǎng)絡(luò))提取圖片特征,傳入兩級網(wǎng)絡(luò),其一是采用區(qū)域建議網(wǎng)絡(luò)(RPN)讀取特征圖并生成一個(gè)可能目標(biāo)區(qū)域,二級生成可能分類以及生成邊界框和掩碼。如圖4所示。
(1)RPN 網(wǎng)絡(luò)
RPN使用滑動窗口在卷積過程掃描圖像的主干特征圖,通過滑動窗口掃描、預(yù)測,選了更好的含有目標(biāo)的區(qū)域(anchor),并精調(diào)了anchor的位置和尺寸。對于重疊部分,選擇最高前景分?jǐn)?shù)的區(qū)域,得到最終可能的目標(biāo)區(qū)域,傳入下一階段。
(2)分類邊界框及掩碼
平行于預(yù)測分類和坐標(biāo)信息,這一階段添加了一個(gè)掩碼預(yù)測分支。這個(gè)分支用FCN(完全卷積網(wǎng)絡(luò))[13]對每個(gè)ROI(Region Of Interest)作像素級別的預(yù)測,生成一個(gè)m×m的掩碼,可以得到更準(zhǔn)確的預(yù)測掩碼。
對每個(gè)掩碼,采用ROIAlign層,使用雙線性插值來計(jì)算每個(gè)ROI中的固定取樣位置的輸入特征的精確值,并聚合結(jié)果值,可以保證掩碼精確對應(yīng)到原始輸入圖像。同時(shí),將矩形框分類和坐標(biāo)回歸并行進(jìn)行,簡化了網(wǎng)絡(luò)的流程。
圖4 Mask R-CNN結(jié)構(gòu)圖
該網(wǎng)絡(luò)的損失函數(shù)如下式所示:
其中,Lcls為分類損失,Lbox為bounding-box回歸損失,Lmask為實(shí)例分割損失。
經(jīng)過對標(biāo)記好的二維碼數(shù)據(jù)集訓(xùn)練好以后,將其模型運(yùn)用到Mask R-CNN中,放入一些含有二維碼的圖片和不含二維碼圖片進(jìn)行檢測,可以看到較好的效果。部分圖片結(jié)果如圖:
圖5 正面的二維碼檢測
由圖5、6、7、8可以看出,本文所提方法在不同的情況的二維碼均能定位檢測出。Mask R-CNN在修改了ROIAlign雙插值法以及添加mask分支后,其檢測更為精確,應(yīng)用在二維碼的定位檢測上,可以一次性同時(shí)識別出同一圖片上的多個(gè)二維碼,即高速又高效。
圖6 有角度的二維碼檢測
圖7 背光下的二維碼檢測
圖8 反光下的二維碼檢測
本文提出一種基于深度學(xué)習(xí)的二維碼定位與檢測法,在復(fù)雜場景和背光反光等的場景中依舊就較好的檢測效果。在實(shí)驗(yàn)環(huán)境下,本文所提的方法具有較好的定位與檢測效果。