張 震,李孟洲,李浩方,馬軍強(qiáng)
(鄭州大學(xué)電氣工程學(xué)院,鄭州450001)
近年來,隨著互聯(lián)網(wǎng)大數(shù)據(jù)的快速發(fā)展、計(jì)算機(jī)運(yùn)算能力的提升以及國內(nèi)外在深度學(xué)習(xí)研究上的突破,目標(biāo)檢測技術(shù)日趨成熟。目前,將目標(biāo)檢測與實(shí)際應(yīng)用場景結(jié)合是一個(gè)熱門方向[1],但較少用于地鐵安檢方面,地鐵安檢仍采用人為識別的方法。由于安檢工作人員的熟練程度以及精神狀態(tài)都可能會影響安檢的準(zhǔn)確率[2],因此將目標(biāo)檢測用于地鐵安檢具有重要的研究意義。
GIRSHICK 等于2014年提出了R-CNN(Regions with CNN Features)[3]算法,促使深度學(xué)習(xí)在目標(biāo)檢測領(lǐng)域快速發(fā)展。此后,SPP-Net(Spatial Pyramid Pooling Networks)、YOLO[4-5]、YOLO2、Fast RCNN[6]、Faster RCNN[7]、SSD[8]、DSSD[9]等算法的出現(xiàn)也進(jìn)一步促進(jìn)了目標(biāo)檢測的發(fā)展。目前主流的目標(biāo)檢測算法大致分為兩類:一類是基于R-CNN 進(jìn)行展開,以Faster RCNN 為代表的兩階段算法;另一類是以YOLO 和SSD 為代表的一階段算法。兩階段算法先進(jìn)行區(qū)域選取,再對所選區(qū)域進(jìn)行分類,一階段算法則是對產(chǎn)生的區(qū)域同時(shí)進(jìn)行這兩項(xiàng)操作。兩階段算法的檢測精度略高于一階段算法,但檢測速度很慢,因此,兩階段算法不適用于地鐵安檢這類對實(shí)時(shí)性要求較高的應(yīng)用場景。在一階段算法中,SSD 算法已被廣泛應(yīng)用于目標(biāo)檢測并取得了不錯(cuò)的效果,如文獻(xiàn)[10]將SSD 應(yīng)用于艦船目標(biāo)檢測,文獻(xiàn)[11]將SSD 應(yīng)用于柑橘實(shí)時(shí)分類檢測,文獻(xiàn)[12]將SSD 應(yīng)用于果園行人實(shí)時(shí)檢測。
本文提出一種改進(jìn)的SSD 算法,通過輕量級網(wǎng)絡(luò)融合對傳統(tǒng)SSD 算法中的金字塔特征層進(jìn)行特征增強(qiáng),同時(shí)加入一種基于殘差模塊的檢測單元以避免增加網(wǎng)絡(luò)模型容量,從而在提高檢測精確度的同時(shí)保證識別速度。
SSD 目標(biāo)檢測算法在YOLO 的基礎(chǔ)上融合了RPN 的思想。該算法在多個(gè)不同尺度上對輸入圖片進(jìn)行檢測,且在各特征層上都使用不同的卷積模型,從而使模型具有更高的識別準(zhǔn)確率。此外,作為一階段算法,其檢測速度比兩階段算法快得多。
雖然SSD 能夠改善傳統(tǒng)算法對物體尺度敏感、對尺度變化大的物體泛化能力差的缺點(diǎn),但仍存在對小目標(biāo)檢測精度低的問題[13-15]。對此,多種改進(jìn)的SSD 算法相繼被提出[16-18],如DSSD、DSOD 等。DSSD 將SSD 的基礎(chǔ)網(wǎng)絡(luò)由VGG-16 改為ResNet,并且引入反卷積層用于傳遞信息,盡管提高了識別小目標(biāo)的準(zhǔn)確率,但是網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜,使識別速度變慢,實(shí)時(shí)性變差。DSOD 先將基礎(chǔ)網(wǎng)絡(luò)換為DenseNet,再融合兩層特征圖,不僅加快了訓(xùn)練速度,而且提高了檢測性能。
傳統(tǒng)SSD 檢測模型結(jié)構(gòu)分為兩部分:第一部分是利用卷積神經(jīng)網(wǎng)絡(luò)來提取輸入圖像特征信息的分類網(wǎng)絡(luò)VGG-16;第二部分是后端的多尺度檢測網(wǎng)絡(luò)。由于淺層的特征圖適用于小目標(biāo)檢測,而深層的特征圖適用于大目標(biāo)檢測,因此多尺度檢測網(wǎng)絡(luò)需要在不同深度的特征圖上進(jìn)行回歸計(jì)算和極大值抑制,并輸出最終結(jié)果。傳統(tǒng)SSD 網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 傳統(tǒng)SSD 網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Structure of traditional SSD network
SSD 算法通過利用多尺度的方法來獲取特征圖。假設(shè)檢測時(shí)采用的特征圖層數(shù)為n,那么第k個(gè)默認(rèn)框比例sk可表示為:
其中:smin表示特征層的默認(rèn)框占輸入圖像的最小比例,一般取為0.2;smax表示特征層的默認(rèn)框占輸入圖像的最大比例,一般取為0.95。為加強(qiáng)默認(rèn)框適應(yīng)檢測物體大小的能力,SSD 算法對相同特征層設(shè)置了不同寬高比的默認(rèn)框。本文選擇默認(rèn)框的寬高比尺寸為r={1,2,3,1/2,1/3},其中,默認(rèn)框的寬度和高度分別為:
其中,m表示5種默認(rèn)框的寬高比尺寸,m∈{1,2,3,4,5}。當(dāng)默認(rèn)寬高比等于1 時(shí),增加1 個(gè)默認(rèn)框比例s′k:
因此,SSD 在每個(gè)特征圖共產(chǎn)生6 個(gè)默認(rèn)框,第6 個(gè)默認(rèn)框的寬度和高度表示為:
其中:(cx,cy)代表特征層上默認(rèn)框的中心坐標(biāo);wb和hb分別代表默認(rèn)框的寬度和高度;wfeature和hfeature分別代表特征層的寬度和高度;wimage和himage分別代表原始圖像的寬度和高度。求得的(xmin,ymin,xmax,ymax)代表第k層特征圖上中心坐標(biāo)為、寬度和高度分別為wk和hk的默認(rèn)框映射到原始圖像的具體坐標(biāo)。
SSD 算法的損失函數(shù)可表示:
其中:x為當(dāng)前預(yù)測框的類別匹配信息;c代表標(biāo)注類別;l代表預(yù)測邊界框坐標(biāo);g代表標(biāo)注邊界框坐標(biāo);N代表匹配到的default box 的數(shù)量;Lconf(x,c)代表分類損失;Lloc(x,l,g)代表位置損失;α代表兩者的權(quán)重,本文將其設(shè)置為1。
Lloc(x,l,g)借鑒Faster RCNN 的位置回歸函數(shù)smoothL1,可表示為:
其中:xij,p={1,0}代表當(dāng)前第i個(gè)預(yù)測框匹配類別p的第j個(gè)目標(biāo)框真值;Pos代表樣本中正例;Box代表預(yù)測框中心的坐標(biāo)及其寬和高的集合;li,m代表先驗(yàn)框的預(yù)測值;g?j,m代表真實(shí)框的位置參數(shù)。SL1可表示為:
Lconf(x,c)用交叉熵?fù)p失函數(shù)可表示為:
傳統(tǒng)SSD 算法低層次的定位效果好但是分類精度低,又由于6 個(gè)不同特征圖相互獨(dú)立,因此其對小目標(biāo)的檢測效果一般。造成以上情況的主要原因是:
1)特征圖維度會隨著CNN 層數(shù)的增加而變小,進(jìn)而得到語義特征更加明顯的結(jié)果,同時(shí)位置信息也變得更加模糊。如果采用的是SSD_300×300 的模型,則主要依賴Conv4_3 檢測小目標(biāo),雖然其分辨率較高,而且先驗(yàn)框的尺寸和檢測目標(biāo)更接近,但是特征表達(dá)的能力卻僅來源于前10 層卷積層,顯然不能很好地捕捉深層次語義信息。
2)隨著卷積層數(shù)的增加,輸入圖像的感受野和映射區(qū)域也會擴(kuò)大,卷積感受野過大時(shí)會降低精確定位目標(biāo)的性能,并且當(dāng)映射區(qū)域過大時(shí),如果出現(xiàn)在檢測區(qū)域包括多個(gè)檢測目標(biāo)的情況,則無法有效地區(qū)分目標(biāo)。
針對以上問題,本文提出融合輕量級網(wǎng)絡(luò)來改進(jìn)傳統(tǒng)SSD 算法,通過加入基于殘差模塊的檢測單元來避免增加網(wǎng)絡(luò)模型容量以及運(yùn)算復(fù)雜度,同時(shí)提高檢測精確度。
本文改進(jìn)的SSD 算法整體網(wǎng)絡(luò)結(jié)構(gòu)框圖如圖2所示,首先對Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2(簡記為ConvY_Y)這5 個(gè)特征層進(jìn)行卷積操作(由于Pool11 的特征層尺寸很小,包含語義信息較多,因此無需對其進(jìn)行卷積操作)。為避免特征融合后再進(jìn)行特征降維操作,要求進(jìn)行卷積操作后生成的Conv4_3_0、Conv7_0、Conv8_2_0、Conv9_2_0、Conv10_2_0(簡記為ConvY_Y_0)的特征維數(shù)不超過原始的特征維數(shù)[19]。然后將Conv4_3和Conv4_3_0、Conv7 和Conv7_0、Conv8_2 和Conv8_2_0、Conv9_2和Conv9_2_0 以及Conv10_2 和Conv10_2_0 這5 對兩兩融合,依次得到Conv4_3_1、Conv7_1、Conv8_2_1、Conv9_2_1 和Conv10_2_1,并與Pool11 形成最終的金字塔特征層[19]。
圖2 整體網(wǎng)絡(luò)結(jié)構(gòu)框圖Fig.2 Block diagram of overall network structure
ConvY_Y_0 比ConvY_Y 具有更強(qiáng)的語義信息和更大的卷積特征尺度。同時(shí),由于本文提出的卷積沒有改變補(bǔ)邊的特征尺寸,因此能更好地保留原特征圖的邊緣信息。所以,本文最終形成的金字塔特征層與傳統(tǒng)SSD 算法的金字塔特征層相比,增強(qiáng)了特征層的語義信息,改善了SSD 算法對小物體識別率低的問題。由于生成的特征層相比于最初的特征層特征維數(shù)沒有升高,特征圖的邊緣特征沒有損失,因此在特征融合時(shí)高層特征不僅無需調(diào)整尺寸,而且不用進(jìn)行降維操作,相比于傳統(tǒng)的特征融合操作,本文采用的特征融合方法更具優(yōu)勢。上述改進(jìn)雖然提高了檢測精度,但是難免會使檢測網(wǎng)絡(luò)復(fù)雜化,從而降低識別速率。針對以上情況,本文新加入基于殘差模塊的檢測單元,從而實(shí)現(xiàn)特征圖維度與主分支維度的統(tǒng)一,避免網(wǎng)絡(luò)模型容量和運(yùn)算復(fù)雜度增加。
特征對應(yīng)元素相加與特征連接是特征融合策略中最流行的2 種融合方式[16,20]?;谔卣鬟B接的特征融合方式,本文設(shè)計(jì)一種輕量級特征融合方式來對金字塔特征層進(jìn)行特征增強(qiáng)。
在進(jìn)行特征融合時(shí),要求ConvY_Y_0與ConvY_Y尺寸相同且ConvY_Y_0的維數(shù)不高于ConvY_Y,因此,在進(jìn)行特征融合的操作時(shí)不必調(diào)整特征圖的尺寸,也不用對融合后的特征進(jìn)行降維,從而大幅簡化了操作。
在進(jìn)行特征融合時(shí),設(shè)x為輸入特征,f(x)表示對x進(jìn)行卷積操作,y表示x卷積后的特征,則y=f(x)。如果(x,y)表示特征x和特征y進(jìn)行首尾相連的操作,那么相應(yīng)的特征連接操作可表示為Fconcat=(x,y),表示特征x和特征y進(jìn)行首尾相連操作后得到的特征。
特征連接的特征融合方式如圖3所示,將ConvY_Y_0 的特征維數(shù)統(tǒng)一設(shè)置為128 維,低于ConvY_Y 特征層的特征維數(shù),然后直接將ConvY_Y與ConvY_Y_0 串聯(lián)得到ConvY_Y_1,將這種特征融合稱為輕量級網(wǎng)絡(luò)融合。
圖3 特征連接的特征融合方式Fig.3 Feature fusion mode of feature connection
本文通過加入一種基于殘差模塊的檢測單元來避免增加網(wǎng)絡(luò)模型的容量以及運(yùn)算復(fù)雜度,并防止直接用主干網(wǎng)絡(luò)來預(yù)測目標(biāo)[21]。殘差模塊分為短接分支和主分支2 個(gè)部分,其結(jié)構(gòu)如圖4所示。主分支共包含3 個(gè)卷積層,即2 個(gè)1×1 的卷積層和1 個(gè)3×3的卷積層;短接分支主要作用是用1 個(gè)1×1 的卷積層使特征圖與主分支的維度達(dá)到統(tǒng)一[21]。在網(wǎng)絡(luò)訓(xùn)練過程中,每個(gè)卷積層后都添加了1 個(gè)非線性激活層,此做法不僅可以降低預(yù)測單元所產(chǎn)生的梯度值對主干網(wǎng)絡(luò)形成的影響,而且還可以起到緩沖的作用。同時(shí),由于殘差模塊的加入,預(yù)測層的網(wǎng)絡(luò)深度加深,能有效改善淺層特征圖語義表征能力較弱的問題[21]。本文新加入殘差模塊的作用雖然與插入3×3卷積模塊基本相同,但是殘差模塊中的1×1 卷積層可以將特征圖調(diào)整到比較低的維度[21]。因此,本文新插入的殘差模塊要比直接插入1 個(gè)3×3 卷積模塊占用的模型參數(shù)低得多。
圖4 ResBlock 結(jié)構(gòu)Fig.4 Structure of ResBlock
本文采用類似Faster RCNN 的anchor 機(jī)制,F(xiàn)aster RCNN 采用的是3×3 的卷積核,因?yàn)槟P蛥?shù)與運(yùn)算量會隨著卷積核的減小而降低,所以本文嘗試采用1×1 的卷積核,經(jīng)過實(shí)驗(yàn)發(fā)現(xiàn)1×1 的卷積核不僅沒有明顯降低檢測精度,反而能夠提高網(wǎng)絡(luò)的運(yùn)算速率。此外,由于加入的殘差模塊可以起到統(tǒng)一維度的效果,因此即使是不同預(yù)測單元上的分類器也能夠在訓(xùn)練過程中達(dá)到參數(shù)共享。相比于傳統(tǒng)SSD 直接在網(wǎng)絡(luò)卷積層上面提取目標(biāo),然后再針對不同的檢測單元訓(xùn)練出其對應(yīng)的分類器而言,本文所采取的操作要更為簡單實(shí)用。綜上,本文新加入的殘差模塊能夠大幅降低網(wǎng)絡(luò)模型大小,從而提高網(wǎng)絡(luò)的運(yùn)算速率。
在網(wǎng)絡(luò)模型訓(xùn)練的過程中,需要對訓(xùn)練數(shù)據(jù)集進(jìn)行翻轉(zhuǎn)、旋轉(zhuǎn)以及亮度與尺度變化,從而提高網(wǎng)絡(luò)模型的穩(wěn)健性。由于本文算法形成了新的金字塔特征層,與傳統(tǒng)SSD 相差較多,因此不能直接在已經(jīng)訓(xùn)練好的SSD 模型上修改。本文以VGG-16 網(wǎng)絡(luò)作為改進(jìn)SSD 算法的基礎(chǔ)框架,訓(xùn)練位置損失函數(shù)采用smooth L1,訓(xùn)練分類損失函數(shù)采用Log loss。此外,本文算法的學(xué)習(xí)率、提取各個(gè)特征層所對應(yīng)的Box長寬比以及挖掘決策困難樣本均和傳統(tǒng)SSD 算法相同,IOU 值設(shè)置為0.5。
本文使用的GPU 型號為GTX1080 Ti,基于Ubuntu16.04 操作系統(tǒng),在TensorFlow 平臺上完成對改進(jìn)SSD 算法的訓(xùn)練以及測試的工作。由于設(shè)備的限制,本文提出的算法采取單GPU 訓(xùn)練。
本文算法主要解決了傳統(tǒng)SSD 算法對小目標(biāo)識別率低的問題,并新加入基于殘差模塊的檢測單元避免增加網(wǎng)絡(luò)模型容量以及運(yùn)算復(fù)雜度。實(shí)驗(yàn)通過對mAP、FPS 的測試來驗(yàn)證本文算法對傳統(tǒng)SSD 的改進(jìn)程度。此外,將本文訓(xùn)練好的算法用于地鐵安檢圖像的檢測,以驗(yàn)證其應(yīng)用性能。
首先將在ImageNet 訓(xùn)練好的VGG-16 網(wǎng)絡(luò)作為本文算法的基礎(chǔ)框架,然后在PASCAL-VOC2007 的訓(xùn)練集與驗(yàn)證集上來訓(xùn)練本文算法,并以mAP 和FPS 作為性能指標(biāo)在其測試集上檢測本文算法對小目標(biāo)檢測的能力,最后與性能優(yōu)異的改進(jìn)SSD 算法、YOLOv3 算法和Faster RCNN 算法進(jìn)行比較。
本文使用的評價(jià)指標(biāo)為平均準(zhǔn)確率均值(mAP)與檢測速率(FPS)。其中,平均準(zhǔn)確率均值是所有類別平均準(zhǔn)確率(AP)的平均值,檢測速率為每秒處理圖像的幀數(shù)。
平均準(zhǔn)確率定義為:
其中,R代表召回率,P代表準(zhǔn)確率。
PASCAL-VOC2007 是1 個(gè)標(biāo)準(zhǔn)的小目標(biāo)數(shù)據(jù)集,其具體的物體類別見表1。該數(shù)據(jù)集提供的圖片集共分為20 種類別。
表1 PASCAL-VOC2007 具體的物體類別Table 1 PASCAL-VOC2007 specific object categories
為對比本文算法與傳統(tǒng)SSD、DSSD、DSOD、YOLOv3 和Faster RCNN 的檢測性能,從PASCALVOC2007 數(shù)據(jù)集中挑選189 具有代表性的圖片,共涉及11 種物體類別,分別為飛機(jī)、船、小轎車、鳥、貓、狗、馬、羊、瓶子、盆栽植物和人。對這些圖片進(jìn)行相應(yīng)的處理后,標(biāo)注物體的ground truth 共有1 601 個(gè)。分別采用傳統(tǒng)SSD 算法、DSSD 算法、DSOD 算法、YOLOv3 算法、Faster RCNN 算法和本文算法進(jìn)行目標(biāo)檢測實(shí)驗(yàn),mAP 指標(biāo)測試結(jié)果如表2所示,F(xiàn)PS 指標(biāo)測試結(jié)果如表3所示。其中,本文算法與傳統(tǒng)SSD算法是在單個(gè)1080 Ti GPU 測試的,而其他算法則是在單個(gè)Titan X GPU 上測試的。
表2 不同算法在PASCAL-VOC2007 數(shù)據(jù)集上的mAP 指標(biāo)Table 2 mAP indicators of different algorithms on PASCAL-VOC2007 data set
表3 不同算法在PASCAL-VOC2007數(shù)據(jù)集上的FPS指標(biāo)Table 3 FPS indicators of different algorithms on PASCAL-VOC2007 data set
從表2 可以看出,本文算法的mAP 指標(biāo)相比于傳統(tǒng)SSD 算法提高了8.5%,并且檢測物體越小,檢測精度提升得越高,比DSOD 算法的mAP提高1%,比YOLOv3 算法提高2%,比Faster RCNN算法提高3.9%。本文算法比DSSD 算法的mAP低0.8%的原因是DSSD 的基礎(chǔ)網(wǎng)絡(luò)是ResNet-101,該網(wǎng)絡(luò)比VGG-16 網(wǎng)絡(luò)深、性能好,但是結(jié)構(gòu)也更為復(fù)雜,大幅降低了檢測速率,不適用于對檢測速度要求較高的檢測場景,從表3 中也驗(yàn)證了這一結(jié)論。
由于本文算法在進(jìn)行特征融合時(shí)既不需要進(jìn)行降維操作也不需要調(diào)整圖片尺寸,同時(shí)加入了一種基于殘差模塊的檢測單元,可避免增加網(wǎng)絡(luò)模型容量以及運(yùn)算復(fù)雜度,因此本文算法的FPS 相比于傳統(tǒng)SSD 的85 frame/s 僅損耗了2 frame/s,可達(dá)到83 frame/s,遠(yuǎn)高于DSSD、DSOD 和Faster RCNN 算法,同時(shí)也高于YOLOv3 的51 frame/s。
地鐵安檢圖像中的一些小物體(如指甲刀、打火機(jī)等)往往只占據(jù)檢測圖片中的很小一部分,同時(shí)有可能會被別的物體覆蓋,增加了檢測的難度。本文收集了約550 張的地鐵安檢圖像,其中,包含的檢測目標(biāo)數(shù)量基本均衡,對所有圖像采用多目標(biāo)標(biāo)記,然后隨機(jī)選取總數(shù)的30%作為測試集,其余的分為訓(xùn)練集和驗(yàn)證集。分別用傳統(tǒng)的SSD 算法和本文算法進(jìn)行目標(biāo)檢測實(shí)驗(yàn),圖5 為部分的檢測結(jié)果,從中可以看出本文算法對檢測結(jié)果的改進(jìn)。表4 為測試各類目標(biāo)的mAP 指標(biāo)。
表4 傳統(tǒng)SSD 算法與本文算法的mAP 指標(biāo)對比Table 4 Comparison of mAP indicators of traditional SSD algorithm and the proposed algorithm
圖5 傳統(tǒng)SSD 算法與本文算法的檢測結(jié)果對比Fig.5 Comparison of detection results of the proposed algorithm and traditional SSD algorithm
從圖5 的檢測結(jié)果圖和表4 中的檢測結(jié)果可以看出,本文算法較傳統(tǒng)SSD 算法檢測更準(zhǔn)確,在對小目標(biāo)(如scissors)上檢測精度提升更為明顯,mAP 提升了12.3%。
本文對SSD 算法中各尺度特征進(jìn)行尺寸大小不變的卷積操作,將卷積前后對應(yīng)的特征進(jìn)行輕量級網(wǎng)絡(luò)融合,進(jìn)而生成新的金字塔特征層,最后通過加入基于殘差模塊的檢測單元,提升檢測精確度。實(shí)驗(yàn)結(jié)果表明,在用于地鐵安檢圖像檢測時(shí),該算法對于小目標(biāo)的檢測精度較傳統(tǒng)SSD 算法提升明顯,并且能夠保證檢測速率,檢測速率達(dá)到83 frame/s。后續(xù)將對本文算法的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化,進(jìn)一步加快檢測速度,并且嘗試將算法應(yīng)用于其他特定場景中。