(青島大學(xué) 自動化與電氣工程學(xué)院,青島 266071)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,信息量劇增,現(xiàn)已進(jìn)入到大數(shù)據(jù)時代。網(wǎng)絡(luò)每天會產(chǎn)生龐大的信息量,面臨的一個巨大難題就是從海量的信息中提取出對我們有用的信息。網(wǎng)上的圖片、視頻都包含大量的文本信息,這些信息稱為場景文本信息。場景文字檢出的研究早在21世紀(jì)初就開始了,目的是識別圖片、視頻中的文字。傳統(tǒng)的方法有基于數(shù)字特征(連通域)的方法[1],支持向量機(jī)( Support Vector Machines)[2],BP神經(jīng)網(wǎng)絡(luò)[3]等,傳統(tǒng)的檢出思路大致分為兩步,先檢測定位文本,再進(jìn)行識別[4]?,F(xiàn)階段一些算法將兩步并作一步,定位與檢測同步進(jìn)行,稱為端對端檢測,本文采用的YOLO(You Only Look Once)算法,便可以實現(xiàn)端對端檢測。許多新型應(yīng)用都需要提取某些場景中的數(shù)字信息,例如:車牌號的識別;拍照翻譯、搜題;馬拉松過程中對運(yùn)動員的實時監(jiān)測;集裝箱箱號的識別等,這已經(jīng)成為計算機(jī)視覺的熱門研究方向,該研究具有廣闊的應(yīng)用前景。
傳統(tǒng)的文字檢出,大多是基于字符[5],即先檢測字符,再對其進(jìn)行組合,比如利用SVM和ANN實現(xiàn)的字符識別[6]。傳統(tǒng)的檢出方法一般分兩步,首先要確定文本的位置。常見的方法,是假設(shè)文本之間是連通的,通過對圖像進(jìn)行二值化,膨脹,腐蝕等處理,將待檢測文本真正連通起來,從而確定待檢出文本的位置。但是如果圖像質(zhì)量不高,背景復(fù)雜,處理起來會很麻煩。第二步,要檢測文本,需要先分割圖像,將一串字符分割成單個字符,然后再逐步對單個字符進(jìn)行檢測,最后將檢測結(jié)果輸出。
這種方法的缺點(diǎn)就是在于只適合場景簡單的圖像,對于復(fù)雜場景下的文本,定位與檢測都有難度。需要對圖像做細(xì)致的處理,大大增加了工作量。通?,F(xiàn)實場景都是很復(fù)雜的,所以這種方法在實際應(yīng)用上會有很大局限。
近幾年,深度學(xué)習(xí)越來越成熟,出現(xiàn)了很多新算法,在許多領(lǐng)域都取得了不錯的成就[7]。本文將圖像分類問題用目標(biāo)檢測算法來解決,目標(biāo)檢測算法主要分為兩類:One-Stage和Two-Stage檢測算法。Two-Stage檢測算法是先產(chǎn)生候選區(qū)域,再對候選區(qū)域分類,代表算法有R-CNN、Fast-R-CNN和Faster-R-CNN算法。One-Stage算法不需要產(chǎn)生候選區(qū)域,直接進(jìn)行分類,代表算法有SSD和YOLO算法[8]。兩者都是基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò),但是設(shè)計思路有些方面有所不同,各有優(yōu)勢。R-CNN系列算法檢測的精準(zhǔn)度比較高,速度略遜一籌,YOLO算法檢測速度較快,但是在精度上不及R-CNN[9]。因為本文是用于檢測數(shù)字,檢測對象只是0~9十個數(shù)字,YOLO算法的精度完全可以滿足,并且速度更快,所以選擇YOLO算法。
區(qū)別于傳統(tǒng)方法,基于深度學(xué)習(xí)的文字檢出,將定位與判斷并作一步,同時進(jìn)行,實現(xiàn)端對端的數(shù)字檢測。
R-CNN算法,采用的是滑動窗口技術(shù),即對于一張圖像,用一個小窗口按照規(guī)定的步長在圖像上滑動,每滑動一步,做一次圖像分類,這樣便做到對整張圖像的檢測。但是,對于不同的檢測對象,滑動窗口大小的選擇也是問題,而且選擇不同大小的窗口,產(chǎn)生的候選區(qū)域太多,運(yùn)算量太大,從而檢測速度會降低[10]。Fast-RCNN就此做出了改進(jìn),用卷積層代替原來的全鏈接層,改進(jìn)后運(yùn)算量減小,檢測速度便大大提高。
區(qū)別R-CNN,YOLO算法采用了一種新穎的思路,沒有采用滑動窗口,而是直接將圖像分割成若干個格子,再通過卷積得到每個單元格的特征圖,然后每個單元格各自負(fù)責(zé)預(yù)測中心點(diǎn)落在自己區(qū)域內(nèi)的目標(biāo)。這樣就消除了復(fù)雜的滑動窗口的計算量,所以在檢測速度上要快一些。每個單元格會預(yù)測幾個邊界框和它們的置信度,邊界框的置信度包括兩個方面,包含檢測目標(biāo)的可能性和邊界框的準(zhǔn)確度。每個邊界框的預(yù)測值包括五個元素:(x,y,w,h,c),(x,y)是邊界框的中心坐標(biāo),(w,h)是邊界框的寬和高,c為置信度。
邊界框類別置信度計算公式:
Pr表示邊界框包含目標(biāo)的可能性;IOU表示邊界框的準(zhǔn)確度,即預(yù)測框跟實際框的并集;Pr(classi|object)表示這個單元格負(fù)責(zé)預(yù)測的目標(biāo)屬于各個類別的概率,即各個邊界框置信度下的條件概率。每個單元格需要預(yù)測B×5+C個值,B表示邊界框的數(shù)量,C表示類別數(shù)。
YOLO從誕生以來,不斷更新完善,網(wǎng)絡(luò)結(jié)構(gòu)也越來越復(fù)雜。YOLOv1由24個卷基層和2個全連接層組成,卷基層負(fù)責(zé)獲取特征,全連接層負(fù)責(zé)預(yù)測,卷積層和全連接層采Leaky-ReLU激活函數(shù)[11]。
YOLOv2采用高分辨率分類器,并且在每個卷積層后面添加了Batch Normalization層,Batch Normalization可以提高模型的收斂速度。YOLOv1是用全連接層直接對邊界框進(jìn)行預(yù)測,根據(jù)邊界框預(yù)測的4個offsets tx,ty,tw,th,用下面的公式計算邊界框的實際位置和大?。?/p>
其中(cx,cy)為cell左上角坐標(biāo),pw和ph是先驗框的寬度和長度。
邊界框相對整張圖片的位置和大小:
其中(W,H)是特征圖的大小。
YOLOv2采用卷積層和anchor boxes來代替原來全連接層進(jìn)行預(yù)測。YOLOv2的特征提取器,采用一種新的模型,由19個卷基層和5個maxpooling層構(gòu)成。YOLOv2的輸入圖片大小要求為416×416,經(jīng)過5個maxpooling層后,大小變?yōu)?3×13的特征圖。
YOLOv3采用殘差網(wǎng)絡(luò)和FPN架構(gòu),它的特征提取器是一個殘差模型,包含了53個卷積層,網(wǎng)絡(luò)構(gòu)建更深,可以多尺度預(yù)測[12]。此外,基礎(chǔ)分類網(wǎng)絡(luò)和分類器也得到升級,Softmax不適用多標(biāo)簽分類,所以使用多個獨(dú)立的Logistic分類器替代Softmax。
YOLOv3的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 OLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖
場景文字的檢出,文字背景對檢出干擾很大。相對來說YOLOv3的檢測速度更快,可以進(jìn)行實時檢測,而且背景誤檢率低,所以采用最新的YOLOv3模型。
本文使用自己制作的數(shù)據(jù)集,訓(xùn)練樣本10000張,測試樣本200張。訓(xùn)練數(shù)據(jù)包含圖片和標(biāo)簽兩個部分,標(biāo)簽部分使用標(biāo)注工具YOLO-mark來制作,標(biāo)簽以文本文件形式保存。樣本圖片的場景包括運(yùn)動員的號碼牌、車牌、超市物價牌和廣告牌等,各類場景樣本數(shù)量大致相同。此外,YOLO自帶圖像增強(qiáng)功能,實際上訓(xùn)練時會基于角度、飽和度、曝光和色調(diào)產(chǎn)生更多的訓(xùn)練樣本。
本文的訓(xùn)練是在Ubuntu16.04系統(tǒng)下進(jìn)行,在該系統(tǒng)下配置了基于YOLO的開源神經(jīng)網(wǎng)絡(luò)框架-Darknet,用來訓(xùn)練和測試,訓(xùn)練過程的部分參數(shù)如表1所示。Region Avg IOU代表預(yù)測的矩形框和真實目標(biāo)的交集與并集之比,IOU值越高說明預(yù)測框位置越準(zhǔn)確;Class表示標(biāo)注目標(biāo)分類的準(zhǔn)確率;Obj指標(biāo)的值期望越接近1越好;No Obj指標(biāo)的值期望越接近0越好,但不為0。隨著迭代次數(shù)的增加,各項指標(biāo)均有改善,在迭代了大約15000次后,各項指標(biāo)趨于穩(wěn)定,模型訓(xùn)練時長約為70小時。
表1 訓(xùn)練過程部分參數(shù)
利用迭代20000次后生成的模型,分別選取不同場景下的圖片進(jìn)行進(jìn)行測試,部分測試結(jié)果如圖2所示。
圖2 部分測試結(jié)果圖
圖2中圖片的的具體檢測結(jié)果如表2所示。
表2 測試結(jié)果
測試結(jié)果表明YOLO算法可以實現(xiàn)場景中的數(shù)字檢出任務(wù)。檢測速度較快,平均在0.07秒左右即可完成一張圖片的檢出。準(zhǔn)確率較高,幾乎達(dá)到百分百檢出,但當(dāng)圖像中的數(shù)字較小,很模糊的情況下,會出現(xiàn)漏檢或者誤檢的情況,漏檢的概率高于誤檢概率。針對這個問題,可以通過增加訓(xùn)練樣本量加以改善。
針對傳統(tǒng)方法在場景數(shù)字檢測上,弊端較多。其中圖像預(yù)處理在傳統(tǒng)方法中工作量占比很大,本文采用深度學(xué)習(xí)方法進(jìn)行場景數(shù)字檢測,避免了圖像預(yù)處理的工作,直接檢測給定圖像,減少了工程的工作量。采用深度學(xué)習(xí)方法進(jìn)行場景數(shù)字檢出,將定位文本與識別并作一步,實現(xiàn)了端對端的檢測。實驗結(jié)果表明該方法檢測速度快,準(zhǔn)確率高,具有較高的應(yīng)用價值。該實驗采用的YOLOv3的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),但是其神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)對于數(shù)字檢出來說過于復(fù)雜,下一階段研究要在YOLOv3的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上進(jìn)行改進(jìn),精簡其結(jié)構(gòu),搭建出一種更適合場景數(shù)字檢出的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),進(jìn)一步提升檢測速度和準(zhǔn)確率。