廖珈藝,張新陽,代娛樂
(成都理工大學(xué),成都610059)
目標(biāo)檢測是一種基于圖像特征的計算機視覺算法。它結(jié)合了目標(biāo)識別和定位。它在智能交通系統(tǒng)、智能監(jiān)控系統(tǒng)、軍事目標(biāo)檢測、醫(yī)療導(dǎo)航等領(lǐng)域有著廣泛的應(yīng)用價值[1]。深度學(xué)習(xí)等人工智能方法已經(jīng)廣泛地應(yīng)用于生活的方方面面[14]。
傳統(tǒng)的目標(biāo)檢測中,多尺度形變部件模型是出類拔萃的,多尺度形變部件模型在行人檢測、人臉檢測等檢測中得到了很不錯的效果,可是其結(jié)構(gòu)比較復(fù)雜,檢測的速度相對較慢,因此也出現(xiàn)了很多改進的方法。
TensorFlow 是一款人工智能學(xué)習(xí)系統(tǒng)。Tensor 意為張量,即N 維數(shù)組,F(xiàn)low 意為流,代表著基于數(shù)據(jù)流圖的計算[6]。TensorFlow 是用C++實現(xiàn),用Python 封裝,在未來將提供更多的編程語言接口。
Faster R-CNN 在一個網(wǎng)絡(luò)中將圖片特征抽取、提取候選區(qū)域、邊框回歸和分類整合在一起,目標(biāo)檢測的總體性能有了很大的提高,在速度上尤為明顯[11]。圖1為Faster R-CNN 整體的網(wǎng)絡(luò)結(jié)構(gòu),下面將從Faster R-CNN 的四個部分介紹該模型。
圖1 Faster R-CNN模型整體結(jié)構(gòu)
Faster R-CNN 中使用的卷積神經(jīng)網(wǎng)絡(luò)VGG16,其中是由13 個卷積層,13 個ReLU 層,4 個池化層組成。所有的卷積層卷積核大小都為3×3,填充大小都為1,即在卷積運算之前填充一圈0,所有的池化層窗口大小都為2×2,步長都為2。類似的,網(wǎng)絡(luò)中的池化層的窗口大小和步長都為2,這樣每個經(jīng)過池化層的輸入矩陣其輸出大小的寬和高都為原來的一半。因此,一個M×N 大小的矩陣經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)部分大小固定變?yōu)椋∕/16)×(N/16),這樣生成的特征圖容易與原圖對照起來,為后邊的步驟提供了便利。
區(qū)域生成網(wǎng)絡(luò)部分有兩條線,先介紹第一條線。
首先產(chǎn)生預(yù)選窗口。選取預(yù)選窗口的方法本質(zhì)上是用不同尺度大小的窗口遍歷最后一層卷積層的特征圖。以1000×600 的輸入圖片大小為例,先人為給出一個基準(zhǔn)窗大小,再給出三種倍數(shù)8、16、32 和0.5、1、2 三種長寬比,這樣能夠得到9 種尺度的預(yù)選窗口。經(jīng)過所有卷積層后,寬和高變?yōu)樵瓉淼?/16,最后得出的特征圖大小約為60×40,在特征圖上進行滑窗,在每一個點上都構(gòu)造這9 種預(yù)選窗口并映射回原圖。在特征圖上每一個像素構(gòu)造的預(yù)選窗口如圖2,映射回原圖的預(yù)選窗口如圖3。
圖2 特征圖每個像素構(gòu)造的預(yù)選窗口
圖3 映射回原圖的預(yù)選窗口
預(yù)選窗口產(chǎn)生之后,送入Softmax 判斷是前景還是背景。如圖4,在進入Softmax 之前,先進行了一個輸出為特征圖個數(shù)為18 的1×1 卷積,對應(yīng)了特征圖的每一個像素都有9 個預(yù)選窗口,每一個預(yù)選窗口都有前景和背景兩種可能。進入Softmax 的兩個reshape 操作都是為了程序?qū)崿F(xiàn)時數(shù)據(jù)結(jié)構(gòu)存儲的需要而設(shè)置的。
綜上,區(qū)域生成網(wǎng)絡(luò)用判斷為前景的預(yù)選窗口作為候選區(qū)域。下面進行邊框回歸。如圖5,綠色框為可口可樂的正確標(biāo)注框,藍(lán)色框為提取出的候選區(qū)域。
即便藍(lán)色框最后的分類為可口可樂,也會因為定位不準(zhǔn)確而被判定為沒有正確檢測。所以需要對候選區(qū)域進行邊框回歸來讓它接近標(biāo)注框,這就是區(qū)域生產(chǎn)網(wǎng)絡(luò)的第二條線完成的任務(wù)。
圖4 Softmax判斷是前景/背景
對于窗口一般用4 維向量(x,y,w,h)來表示,(x,y)表示窗口的中心坐標(biāo),(w,h)表示窗口的寬和高。用A表示候選區(qū)域,G 表示標(biāo)注的真實區(qū)域,需要找到一種關(guān)系,使得原始的候選區(qū)域A 經(jīng)過映射后得到一個接近標(biāo)注區(qū)域G 的回歸區(qū)域G' 。即給定候選區(qū)域A=(Ax,Ay,Aw,Ah),標(biāo)注區(qū)域G=(Gx,Gy,Gw,Gh),尋找一種映射關(guān)系F,使:
其中(Gx',Gy',Gw',Gh')≈(Gx,Gy,Gw,Gh)。
圖5 邊框回歸示意圖
對于尋找映射關(guān)系F 有式(2)到式(5)的思路,即先平移,再縮放。需要學(xué)習(xí)的參數(shù)是dx( A) 、dy( A )、dw(A)、dh(A)這四個變換。
設(shè)置平移量因子(tx,ty)和尺度因子(tw,th),具體計算方法根據(jù)式(6)與式(7)。
其中,帶有下標(biāo)a 表示候選區(qū)域,帶有上標(biāo)*表示真實標(biāo)注值。
線性回歸就是給定特征向量X,學(xué)習(xí)一組權(quán)重向量W,使得得到的輸出值與真實值Y 非常接近,即Y=WX。針對這個問題,輸入是經(jīng)過卷積的特征圖,定義為φ,同時還有訓(xùn)練傳入的真實標(biāo)注,輸出是dx( A) 、dy( A) 、dw(A)、dh(A)這四種變換。因此目標(biāo)函數(shù)可以表示為式(8)。
為了讓預(yù)測值盡量接近真實值,設(shè)計式(9)的損失函數(shù):
函數(shù)優(yōu)化的目標(biāo):
考慮到以上的回歸模型的設(shè)計,區(qū)域生成網(wǎng)絡(luò)部分的第二條線只有一個輸出特征圖個數(shù)為36 的1×1卷積層,如圖6。36 對應(yīng)了特征圖上每個像素的9 個預(yù)選窗口,每個窗口都有dx( A) 、dy( A) 、dw(A)、dh(A)這四個變換量。
圖6 區(qū)域生成網(wǎng)絡(luò)部分的兩條線
至此,區(qū)域生成網(wǎng)絡(luò)部分結(jié)束??偨Y(jié)一下,區(qū)域生成網(wǎng)絡(luò)負(fù)責(zé)綜合所有dx( A )、dy( A) 、dw(A)、dh(A)變換量和前景預(yù)選窗口,計算出較為精確的候選區(qū)域,送入模型的后續(xù)部分。
對于傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò),如VGG 和AlexNet,網(wǎng)絡(luò)的輸入和輸出尺寸必須是固定的。如果需要輸入網(wǎng)絡(luò)的圖片和規(guī)定大小不一致,有兩種傳統(tǒng)的解決方法:裁剪和縮放,如圖7。但是縮放會改變原始圖像的形狀,裁剪會損失一定的信息。
圖7 縮放成指定大小
區(qū)域生成網(wǎng)絡(luò)計算出的候選區(qū)域正是一系列大小和形狀都不相同的矩形區(qū)域,F(xiàn)aster R-CNN 采用了ROI Pooling 的方法將它們統(tǒng)一成同樣的大小。將每一個候選區(qū)域都映射回卷積神經(jīng)網(wǎng)絡(luò)的最后一層特征圖,將它們對應(yīng)的特征圖水平和數(shù)值都分成7 份,并且對分割后的都做最大值池化,因此大小不同候選區(qū)域最后的輸出都是7×7。
簡而言之,ROI Pooling 層的作用就是將大小不同的候選區(qū)域統(tǒng)一成相同大小,以便輸入到模型的后續(xù)部分。
模型的最后一部分利用已經(jīng)獲得的7×7 大小的候選區(qū)域特征圖,通過一個全連接層和Softmax 計算候選區(qū)域的分類,同時再次利用區(qū)域產(chǎn)生網(wǎng)絡(luò)部分的邊框回歸計算出更加精準(zhǔn)的檢測框,模型這一部分的結(jié)構(gòu)如圖8。至此,模型便得出了目標(biāo)的位置即分類。
圖8 模型末端結(jié)構(gòu)
基于候選區(qū)域提取的目標(biāo)檢測的Faster R-CNN雖然具有比較高的準(zhǔn)確率,但是由于計算量過大,很難達到實時計算所要求的速度。為了解決這一問題,出現(xiàn)了一系列無需候選區(qū)域提取的目標(biāo)檢測模型,其中SSD[12]能夠在精度接近Faster R-CNN 模型的前提下大大提升目標(biāo)檢測速度。
與Faster R-CNN 類似,SSD 也基于卷積神經(jīng)網(wǎng)絡(luò),首先也要產(chǎn)生類似預(yù)選窗口的先驗框,不同的是SSD在不止一層的特征圖上產(chǎn)生先驗框,如圖9。卷積神經(jīng)網(wǎng)絡(luò)中,在不同層的若干特征圖中的每個像素設(shè)置不同寬高比和大小的先驗框。
圖9 SSD模型的先驗框
先驗框按照如下規(guī)則產(chǎn)生:
(1)確定在哪幾層特征圖上產(chǎn)生先驗框,以及先驗框的大小和寬高比。一般來說,在越深的層先驗框的尺寸應(yīng)設(shè)置的更大,于是按照式(11)決定每層特征圖先驗框的最大和最小尺寸。
其中,m 為要產(chǎn)生先驗框的特征圖的總層數(shù)加1,smin與smax為設(shè)定好的先驗框的基準(zhǔn)最大值和最小值,第n 層特征圖對應(yīng)的最小尺寸為sn,最大尺寸為sn+1。寬高比的設(shè)置例如(1,1/2,1/3,2,3),記為ri。
(2)如圖10,以特征圖上每個像素為中心,生成一系列同心的先驗框。對于第n 層特征圖,正方形先驗框的最小邊長為sn,最大邊長為。每設(shè)置一個寬高比,若寬高比不等于1,會生成兩個調(diào)換寬高的長方形,寬高為:和。
圖10 先驗框大小示意圖
由于后續(xù)的結(jié)構(gòu)不產(chǎn)生候選區(qū)域,針對每個先驗框不僅要得出位置偏移量,還要計算出屬于各個類別的概率向量,相當(dāng)于將Faster R-CNN 的邊框回歸與分類預(yù)測合并在一起。相應(yīng)的,損失函數(shù)是邊框回歸損失與分類置信度損失的加權(quán)和。
圖11 SSD結(jié)構(gòu)圖
SSD 模型用卷積神經(jīng)網(wǎng)絡(luò)作為基礎(chǔ)網(wǎng)絡(luò),如VGG16,將特征提取層添加到基礎(chǔ)網(wǎng)絡(luò)之后。如圖11,黃色框為添加的特征提取層。特征提取層的尺寸逐漸減小,得到多尺度檢測的預(yù)測值。先驗框不僅在后添加特征提取層上生成,也要在基礎(chǔ)網(wǎng)絡(luò)的最后兩層生成。通過組合不同先驗框的預(yù)測結(jié)果覆蓋各種位置和尺寸的對象。例如圖9 中,由于4×4 的特征圖與8×8的特征圖具有不同的先驗框尺寸,對象可能被匹配到前者的先驗框,而匹配不到后者的先驗框中。
設(shè)先驗框共有k 個,目標(biāo)分類共c 類。對于所有的先驗框,需要得出其相對于正確標(biāo)注的(x,y,w,h)這4個偏移量以及屬于每個分類的概率。因此,對于m×n大小的 特征圖,共產(chǎn)生(c+4)?k?m?n 個輸出。這些輸出結(jié)果即包含了計算出的所有目標(biāo)的位置和概率,但是部分輸出結(jié)果由于分類結(jié)果的置信度不高而不準(zhǔn)確。所以需要綜合分析這些輸出結(jié)果,通過設(shè)置閾值、非極大值抑制等方法得出最終的檢測結(jié)果。至此SSD 目標(biāo)檢測模型結(jié)束。
本文的實驗數(shù)據(jù)選取了商品陳列貨架的圖片數(shù)據(jù),所有的數(shù)據(jù)均來源于百度圖片的數(shù)據(jù)爬取,由于數(shù)據(jù)來源不足,采用了共計6 個分類857 張圖片,從中隨機選取20%作為測試集合,其余作為訓(xùn)練集。
如圖12 與圖13 分別是Faster R-CNN 與SSD 兩種目標(biāo)檢測算法的流程圖,兩種算法的結(jié)構(gòu)大體上一致,都先通過基礎(chǔ)卷積神經(jīng)網(wǎng)絡(luò)獲得圖片的特征圖,F(xiàn)aster R-CNN 通過候選區(qū)域提取和兩次邊框回歸得到精準(zhǔn)的檢測框,而SSD 在不同尺度的特征圖上產(chǎn)生先驗框,只進行一次邊框回歸獲得最后的檢測框。最后,需要通過非極大值抑制的方法過濾掉效果較差的檢測框。
圖12 Faster R-CNN目標(biāo)檢測算法流程圖
圖13 SSD目標(biāo)檢測算法流程圖
(1)Faster R-CNN 實驗結(jié)果
表1 Faster R-CNN 模型訓(xùn)練參數(shù)
圖14 Faster R-CNN訓(xùn)練曲線
表1 為訓(xùn)練Faster R-CNN 模型時設(shè)置的參數(shù),圖14 為訓(xùn)練曲線,橫坐標(biāo)代表迭代次數(shù),縱坐標(biāo)代表損失函數(shù)值。通過觀察,損失函數(shù)值在迭代次數(shù)為12000次后趨于平穩(wěn),即訓(xùn)練過程收斂。保存模型,使用測試集進行測試,結(jié)果如表2 所示,每張圖片的檢測速度平均為118 毫秒,圖15 為部分圖片檢測效果圖。
表2 Faster R-CNN 模型測試結(jié)果
圖15 Faster R-CNN檢測效果圖
(2)SSD 實驗結(jié)果
表3 為訓(xùn)練SSD 模型時設(shè)置的參數(shù),圖16 為訓(xùn)練曲線,橫坐標(biāo)代表迭代次數(shù),縱坐標(biāo)代表損失函數(shù)值。通過觀察,損失函數(shù)值在迭代次數(shù)為8000 次后趨于平穩(wěn),即訓(xùn)練過程收斂。保存模型,使用測試集進行測試,結(jié)果如表4 所示,每張圖片的檢測速度平均為62毫秒,圖17 為部分圖片檢測效果圖。
表3 SSD 模型訓(xùn)練參數(shù)
圖16 SSD訓(xùn)練曲線
表4 SSD 模型測試結(jié)果
圖17 SSD檢測效果圖
(3)算法效果對比
在性能方面,SSD 的檢測單張圖片的耗時約為Faster R-CNN 的一半;在精度方面,通過對比表3 與表4,在各個分類上,F(xiàn)aster R-CNN 的檢測準(zhǔn)確率均略高于SSD。對比分類之間的準(zhǔn)確率,商品“王老吉”和“雪碧”的準(zhǔn)確率與其他分類相差較大,通過查看測試集數(shù)據(jù)的檢測框推測原因。如圖18,綠色框是檢測框,商品“王老吉”與“加多寶”外觀相似度較大,且訓(xùn)練數(shù)據(jù)集中沒有商品“加多寶”的數(shù)據(jù),所以當(dāng)圖片中同時出現(xiàn)上述兩種商品時會很難區(qū)分。如圖19,左側(cè)為商品“雪碧”的300ml 型號,右側(cè)為商品“雪碧”的500ml 型號,黑色框代表正確的標(biāo)注框,淺藍(lán)色框代表檢測框。由于數(shù)據(jù)不足,訓(xùn)練集中為將“雪碧”的各型號混合,此類數(shù)據(jù)之間本身存在一定差異,因此準(zhǔn)確率較低。
圖18 相似商品
圖19 不同型號商品
本文介紹并實現(xiàn)了兩種目標(biāo)檢測算法,最后通過對測試結(jié)果對比出兩種算法的優(yōu)缺點和共同的不足之處。實驗證明,F(xiàn)aster R-CNN 和SSD 兩種目標(biāo)檢測算法,前者的速度慢于后者但準(zhǔn)確率高于后者,對于常規(guī)的商品圖片,目標(biāo)檢測算法的準(zhǔn)確率能達到90%以上,但是對于肉眼能夠識別的遮擋商品以及外觀非常相似的商品,目標(biāo)檢測算法的表現(xiàn)較差。因此如果要達到生產(chǎn)需要的標(biāo)準(zhǔn)還需要作更多的改進,例如對遮擋商品進行檢測和推理、對相似商品二次分類等。