殷小芳 辛月蘭 蘭 天
(青海師范大學物理與電子信息工程學院 西寧 810000)
目標檢測是計算機視覺和模式識別中的一個基本而重要的問題,吸引了眾多學者的關注和研究并在人臉識別[1]、航空影像[2]、行為理解[3]、目標跟蹤[4]、人機交互[5]、自動駕駛[6~7]等諸多領域取得很好的成績。目標檢測的目的是從圖像中找到目標對象并且定位,基于手工特征的傳統(tǒng)目標檢測算法和基于深度學習的目標檢測算法是目前主要的兩種算法。其中,局部二值化(Local Binarization,LB)、尺度不變特征變換(Scale Invariant Feature Transformation,SIFT)、方向梯度直方圖[8](Histogram of Oriented Gradient,HOG)等在傳統(tǒng)目標檢測算法中有著優(yōu)秀的表現(xiàn),它是人們根據(jù)先驗知識與經(jīng)驗所設計的手工特征。隨著圖像領域中各類應用任務越來越復雜以及各類任務所需要的數(shù)據(jù)量越來越大,傳統(tǒng)方法提取的特征存在局限性,在特征提取模板缺乏針對性,難以避免產(chǎn)生大量的冗余特征窗口,使得產(chǎn)生候選區(qū)域的方法需要大量的計算,檢測的速度和精度不能達到實際要求。深度學習網(wǎng)絡模型能夠通過自主學習出許多容易被人忽視的高級特征,避免人為主觀性等原因的影響。因此,采用基于深度學習的目標檢測算法,能夠克服傳統(tǒng)的目標檢測算法存在的問題,提高檢測的準確性和效率。
現(xiàn)階段目標檢測中的深度學習算法主要分為基于區(qū)域建議框的雙階段檢測算法和基于回歸運算的單階段檢測算法[9]。前者主要的典型算法有R-CNN[10]、SPP-net[11]、Fast R-CNN[12]、Faster R-CNN[13]和Mask R-CNN[14]算法等,這些方法都是使用區(qū)域推薦產(chǎn)生候選目標,隨后使用卷積神經(jīng)網(wǎng)絡進行處理。但是,由于視點、姿勢、遮擋和照明條件的巨大差異,此類方法的檢測精度與速度仍需要進一步提高;后者主要的典型算法有YOLO[15]、YOLO v2[16]、YOLOv3[17]、SSD[18]和RetinaNet算法等,這些算法不需要區(qū)域推薦直接對目標邊框進行回歸運算。單階段檢測算法具有很好的檢測速度但是檢測精度卻不如雙階段算法,因此本文采用目前應用最廣泛且最成熟的卷積神經(jīng)網(wǎng)絡模型Faster R-CNN對20個種類進行檢測。Faster R-CNN算法將目標檢測的生成候選區(qū)域、提取特征、分類和回歸四個步驟全部統(tǒng)一在CNN中實現(xiàn),并且全部運行在GPU上,實時性檢測復雜背景下的目標具有很好的魯棒性。考慮到圖像的復雜性和多樣性更加顯著且當光照條件不足、目標過小、目標重疊度高等情況下仍然存在誤檢、漏檢和檢測精度不高的情況。本文引入殘差網(wǎng)絡ResNet-101作為特征提取網(wǎng)絡,加深網(wǎng)絡層數(shù)來挖掘圖像深層語義特征,同時利用殘差塊以減少層深帶來的計算量負擔;其次,受Mask R-CNN中RoI Align的啟發(fā),本文引入RoI Align單元并結合雙線性插值的方法保留浮點數(shù)以提高檢測精度;最后采用soft-NMS來進行非極大值抑制,此方法相比傳統(tǒng)算法可以讓重疊度高的物體更大程度地保留下來。通過實驗表明本文算法的檢測性能有很好的表現(xiàn)。
2016年Ren等提出了Faster R-CNN算法,該算法最大的優(yōu)點在于區(qū)域建議網(wǎng)絡(Region Proposal Network,RPN)的 加 入 解 決 了R-CNN、Fast R-CNN候選框生成計算開銷大的問題,達到了端到端的實時性檢測,極大地提高了雙階段目標檢測算法的性能。
RPN的結構如圖1所示,它能夠通過神經(jīng)網(wǎng)絡自主學習生成量少質(zhì)優(yōu)的候選建議框,然后輸入到分類回歸網(wǎng)絡進行檢測。在最后共享卷積層輸出的卷積特征圖中使用滑動窗口的操作方式,滑動窗口的中心在原像素空間的映射點成為錨框(anchor boxes)。為滿足不同尺寸目標的需要,設置多種不同面積尺寸的anchor,三種尺度分別為(1282,2562,5212),三種高寬比分別為(1∶1,1∶2,2∶1)。按此標準當以錨框為中心滑動一次窗口會生成k(K=9)個區(qū)域提議,通過設置最大交并比(Io U)值挑選出正、負例錨框,并采用非極大值抑制(Non-Maximum Suppression,NMS)的方法來選出最優(yōu)目標候選框。
圖1 RPN結構
在Faster R-CNN中RPN網(wǎng)絡采用多任務損失,對一個圖像的損失函數(shù)定義為式(1):
其中,pi為錨框預測為目標的概率;為錨框真實目標概率;如果錨框為正例,為1;如果錨點為負例,則為0;L為總損失函數(shù);表示是否為目標的分類損失函數(shù);表示兩個目標邊框回歸的對數(shù)損失;ti表示預測邊界框的4個坐標參數(shù);表示與含有目標的錨框?qū)鎸嵾吔缈虻淖鴺藚?shù);Ncls為一個batch的樣本總數(shù)量、Nreg為錨框的總數(shù)、λ是分類和回歸得平衡比例參數(shù),式(1)中判斷是否為目標的分類對數(shù)損失和回歸損失分別為
其中,參數(shù)R為smooth函數(shù)[19],表達式為
特征提取網(wǎng)絡由卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)構成,其中卷積層、池化層、全連接層和分類層是CNN基本結構,CNN的不同會影響目標的精度以及效率。常用的特征提取網(wǎng)絡是AlexNet、ZFNet、VGG-16、GoogleNet及ResNet這些重量級網(wǎng)絡。其中,GoogleNet和ResNet都是增加網(wǎng)絡的深度對模型進行優(yōu)化,但是GoogleNet冗余的網(wǎng)絡層學習了不是恒等映射的參數(shù)造成了訓練集準確率降低,錯誤率上升的現(xiàn)象。而ResNet網(wǎng)絡解決了上述的模型退化問題,該網(wǎng)絡設計了一個殘差模塊允許神經(jīng)網(wǎng)絡更深并避免網(wǎng)絡梯度消失,使得模型達到好的學習效果。綜合考慮本文引入ResNet-101網(wǎng)絡來替代原來的VGG16網(wǎng)絡作為特征提取網(wǎng)絡得到更深層次的融合特征圖,以提高目標檢測的性能,網(wǎng)絡結構圖如圖2(b)。
圖2 VGG16和ResNet-101網(wǎng)絡結構示意圖
從圖2可以看出,相比于VGG16網(wǎng)絡,ResNet-101在卷積層后添加了一個批量歸一化(Batch Normalization,BN)層,BN層會將每層的輸入先進行歸一化,統(tǒng)一為均值為0且方差為1的正態(tài)分布,解決了其他網(wǎng)絡在訓練過程中中間層數(shù)據(jù)分布發(fā)生改變的問題并且避免了梯度消失或爆炸、節(jié)約了訓練時間。
歸一化式(2)表示每層d維輸入,式(3)表示歸一化每一維:
在常見的Fast-RCNN、Faster-RCNN這樣的兩階段測框架中,RoI Pooling的功能是根據(jù)備選框的位置坐標在特征圖中將相應區(qū)域池化為統(tǒng)一尺寸的特征圖,以便進行分類和回歸。但是RoI Pooling這一操作存在兩次量化的過程,將候選建議框邊界坐標量化為整數(shù)時和最開始回歸的位置產(chǎn)生一定的誤差,這個誤差將直接影響檢測的精度,尤其針對小目標。
受Master R-CNN的啟發(fā),本文引入RoI Align單元解決RoI Pooling的上述缺點,并且用ResNet-101網(wǎng)絡來替代原來的VGG16網(wǎng)絡作為特征提取網(wǎng)絡,圖3為改進后的Faster R-CNN感興趣區(qū)域池化部分。當輸入一個960*960的圖像其中包含315*315的框來定位一個人,圖像經(jīng)過ResNet-101特征提取網(wǎng)絡后,特征圖縮放步長(stride)為32,960/32剛好整除得30,但是315/32以后得到9.84帶有小數(shù),RoI Pooling操作會將其直接量化為9。接著在下一步把框內(nèi)的特征池化為7*7的大小時,9/7=1.28顯然又出現(xiàn)了小數(shù),也是直接將其量化為1。而本文引入的RoI Align單元會保留浮點數(shù),如圖中箭頭所指部分。RoI Align單元取消量化操作帶來的邊框位置偏差,使用雙線性內(nèi)插的方法獲得坐標為浮點數(shù)的像素點上的圖像數(shù)值,從而將整個特征聚集過程轉(zhuǎn)化為一個連續(xù)的操作,使得最終達到了比較理想的檢測精度。
圖3 改進后得感興趣區(qū)域池化層
Faster R-CNN算法分類時采用了傳統(tǒng)的非極大值抑制NMS算法,該算法的目標是搜索局部極大值,抑制非極大值元素,它的計算方式可以表示為式(4)。其中,bi是第i檢測框;si是第i檢測框的得分;Nt是NMS的預設閾值;M是檢測分數(shù)最高檢測框;I oU( )M,bi是第i檢測框bi和檢測分數(shù)最高檢測框M的最大交并比。
式(4)中I o U的計算公式如下:其中,A為候選框面積;B為原標記框面積。
從式(4)中可以看出傳統(tǒng)的NMS算法會將所有與檢測框相鄰并大于預設閾值的框置為零,當檢測重疊度高的圖像時,此時目標之間的距離十分相近,如果得分較低的框與得分較高的框的IoU值大于預設閾值,得分低的將直接被抑制,導致該目標檢測失敗,模型的檢測性能從而受到影響。為了解決這個問題,本文引入Soft-NMS算法替代NMS算法,該算法表示如下:
其中,式中符號同式(4)。
Soft-NMS算法采用“權值懲罰”的策略,相鄰檢測框在重疊部分設計了一個衰減函數(shù),讓其根據(jù)當前得分遞歸地重新評分而非將分數(shù)低的相鄰框直接抑制,從而保留了相鄰目標的檢測框。并且Soft-NMS算法中引入的超參數(shù)只會出現(xiàn)在演示或測試階段,在訓練階段沒有引入任何超參數(shù),沒有造成計算復雜度的增加。參照文獻[20]中Soft-NMS與NMS算法在不同的IoU閾值下的實驗結果,本文將I o U閾值設定為0.6。
1)輸入一副任意大小P×Q的圖像A,先將縮放為M×N的規(guī)定尺寸圖像B,然后將B圖像送入網(wǎng)絡;
2)B作為特征提取模塊的輸入,通過ResNet-101網(wǎng)絡得到更深層次的融合特征圖C;
3)C作為RPN網(wǎng)絡的輸入,采用滑動窗口的方法得到區(qū)域建議網(wǎng)絡D;
4)C與D作為感興區(qū)域(RoI)的輸入,本文引入ROI Align單元進行池化得到建議框與特征圖之間的映射圖E;
5)把E分別輸出到分類器與回歸器中,分類器Softmax對E進行分類,回歸器采用Soft-NMS算法進一步修正和精簡目標邊框,最終分類目標并定位。
為了驗證本文算法的檢測性能,采用PASCALVOC2007、PASCALVOC2012這兩個數(shù)據(jù)集進行驗證,VOC數(shù)據(jù)集中包含20類目標,很多圖像都是生活中的實際場所,也有比較難以識別的小目標,可以滿足目前目標檢測任務的需求。對于第3節(jié)中的所有分析,本文使用基于ResNet-101重新設計Faster R-CNN檢測算法。所有實驗均在Windows10 1909系統(tǒng)下進行,其中深度學習框架為tensorflow1.14,硬件環(huán)境為Intel Corei5-8400 2.81G Hz CPU,NVIDIA GeForce GTX 1080Ti GPU,顯存為11GB。軟件環(huán)境為Python 3.6,Keras 2.2.5,CUDA 8.0。實驗中對所有數(shù)據(jù)集采用K折交叉驗證法來得出最終的最優(yōu)檢測模型,將訓練基本學習率設置為0.001,經(jīng)過40k次迭代后降至0.0001。針對改進算法采用的評價指標為均值平均精度(mean average precision,mAP),所有類別的平均精度(average precision,AP)的均值為mAP,該值越高檢測性能越好,其計算公式其定義為
其中式(7)中,P為精確度;R為召回率;P=;,T P為既是正樣本又被預測為正樣本的個數(shù);F P為負樣本被預測為了正樣本的個數(shù);FN為正樣本被預測為了負樣本的個數(shù)。
為了驗證本文算法的有效性,選取了PASCALVOC2007數(shù)據(jù)集中部分代表性結果并與相關算法進行了對比。圖4(a)~(d)四組圖中從左到右依次為Faster R-CNN、加入Soft-NMS的Faster R-CNN算法、加入RoI Align單元的Faster R-CNN算法和本文算法。從圖中可以看出只加入Soft-NMS或者RoI Align單元相對于Faster R-CNN算法檢測精度均有一定程度的提高,但是對于遮擋嚴重或者距離相近的小目標仍有漏檢或者檢測精度不高的情況。綜合看來本文算法檢測性能最優(yōu)且對于小目標的檢測具有一定的優(yōu)勢。具體表現(xiàn):1)對于Faster R-CNN算法漏檢的小目標或者遮擋嚴重的目標本文算法可以識別且檢測精度較高,例如圖4(a)組圖中紅色小汽車、(b)組圖中右下角未能檢測的人和背對的人以及(d)圖中未能識別的飛機;2)對于兩個距離較近的目標本文算法可以更加準確地進行目標分類,避免了漏檢情況的發(fā)生例如(b)組圖中背對的人和(d)組圖中未能識別的飛機;3)對于都能檢測出來的目標本文算法檢測精度最高,給予了很好的邊框修正。
圖4 對各類目標的檢測結果
表1顯示了在VOC2007數(shù)據(jù)集中的檢測結果,其中數(shù)據(jù)集中的4981張圖片用于訓練,4982張圖片用來測試,表2顯示了訓練和測試時間的對比。表1中算法均采用ResNet-101網(wǎng)絡,從中可以看出加入Soft-NMS或者RoI Align單元的Faster R-CNN算法相對Faster R-CNN算法檢測精度分別提高了1.2%、1.5%。結合表2可以看出本文算法的時間開銷幾乎與Faster R-CNN算法保持一致,但是改進后的算法相對于Faster R-CNN算法在檢測精度上提高了3.8%,通過圖4也可以看出改進后的算法檢測結果表現(xiàn)最優(yōu),能夠很好地進行目標檢測。
表1 PASCALVOC2007數(shù)據(jù)集檢測結果對比
表2 訓練和測試時間對比
本文為了在保證檢測速度的前提下提高目標檢測的精度,重新設計了Faster R-CNN算法的結構,為了提高較小目標的檢測精度使用Mask R-CNN中的RoI Align單元代替原始的感興趣區(qū)域池化操作,避免了因兩次量化操作帶來的位置偏差影響檢測精度。同時針對距離較近的目標采用Soft-NMS算法代替NMS算法,使得重疊度高的目標能夠被成功檢測出來。實驗結果表明了本文算法的檢測性能有著很好的表現(xiàn),下一步將從降低算法的復雜度出發(fā),進一步提高目標檢測的速度。