曹之君 張 良
中國民航大學電子信息與自動化學院,天津 300300
目標檢測在計算機視覺領域是一個重要的研究方向,對于提取和挖掘感興趣的區(qū)域非常重要。目標檢測是計算機視覺中一個核心問題[1],在行人跟蹤、車牌識別、無人駕駛等領域都具備重要的研究價值。傳統(tǒng)算法大致可分為目標實例檢測與傳統(tǒng)目標類別檢測2類。傳統(tǒng)算法提取的特征基本都是低層次、人工選定的簡單特征,針對特定對象更有針對性,但是不能很好地表達大量、多類目標。且需要一定的先驗知識來設置相應的手工特征,具有魯棒性不高,不能廣泛應用的缺點。近年來,隨著深度學習對圖像分類準確度的大幅提高,基于深度學習的目標檢測算法逐漸成為主流。
傳統(tǒng)的目標檢測算法,多是基于滑動窗口的經(jīng)典框架或是根據(jù)特征點進行匹配。AlexNet在2012年度ImageNet大規(guī)模視覺識別挑戰(zhàn)賽中一舉奪冠[2],并且效果遠超傳統(tǒng)算法,將大眾的視野帶到卷積神經(jīng)網(wǎng)絡?;谏疃葘W習的目標檢測方法才開始在計算機視覺領域嶄露頭角。基于深度學習的目標檢測大致分為2個流派:1)基于回歸的檢測算法;2)基于分類的檢測算法。前者的代表是YOLO系算法。文獻[3]提出了YOLO模型,YOLO將圖片劃分成S×S的網(wǎng)格,各網(wǎng)格負責檢測中心落在該網(wǎng)格的目標。YOLO采取以單元格為中心的多尺度區(qū)域取代區(qū)域目標建議網(wǎng)絡,舍棄了一些精確度以換取檢測速度的提升,該方法直接在原始圖像上訓練,速度較快,精度略差。后者的代表算法是Faster-RCNN。文獻[4]提出區(qū)域卷積神經(jīng)網(wǎng)絡模型,該模型利用選擇性搜索的方法選取待檢測圖像中的若干候選區(qū),并且使用深度卷積神經(jīng)網(wǎng)絡進行高層特征提取。再使用多個SVM對特征進行分類,從而完成目標檢測任務。文獻[5]為了提高RCNN模型的檢測準確度和檢測速度,提出了快速RCNN (Faster-RCNN)模型。核心思想是先使用RPN網(wǎng)絡篩選出感興趣區(qū)域,再在此基礎上訓練。該方法的特點是精度高,速度略慢。所以在精度要求較高的場合,應該采用基于分類思想的Faster-RCNN系列算法。但是Faster-RCNN速度較慢,不易應用于實時性要求高的場合[6]。本文通過兩個角度改進Faster-RCNN模型:1)提高模型的檢測速度;2)提高模型的檢測精度。
鑒于上述問題,本文針對現(xiàn)有 Faster-RCNN算法進行改進,在RPN網(wǎng)絡中引入反饋機制,在訓練過程中調(diào)整RPN網(wǎng)絡中選取候選區(qū)域的數(shù)量,減少所需要的開銷和生成區(qū)域所需要的時間,使速率提高了18%。并且重構(gòu)了特征提取網(wǎng)絡,借鑒了殘差網(wǎng)絡shortcut[7]的方式搭建了底層特征網(wǎng)絡,使其卷積網(wǎng)絡提高到了58層,精度提高了3%。在此基礎上,為了識別特定的飛機目標,在模型上對應做了一些優(yōu)化。
Faster-RCNN是一類基于分類的目標檢測算法,是目前流行的檢測框架之一,相比YOLO算法在精度上具有明顯優(yōu)勢[8]??蚣苋鐖D1所示,算法采用VGG16為基礎特征提取網(wǎng)絡,在此基礎上添加卷積層、池化層等結(jié)構(gòu),得到特征圖[9]。再經(jīng)過RPN網(wǎng)絡生成更加準確的候選區(qū)域,最后采用ROI池化,將特征圖和RPN網(wǎng)絡的輸出結(jié)果進行判決。
圖1 Faster-RCNN算法框架
Faster-RCNN的核心思想是通過預先設立的錨框樣式,生成若干候選區(qū)域,然后再進行判決等后續(xù)操作。訓練圖像通過VGG16網(wǎng)絡得到特征圖,原圖像通過若干次卷積得到特征圖,特征圖上的每一個像素點即對應原圖上某一個區(qū)域。為了捕捉所有的待檢測目標,1對1的映射形式不滿足要求。對映射在原圖上的感受野區(qū)域做出以下擴充:1)增設
區(qū)域長寬比形式,共3種,分別為1∶1、1∶2、2∶1;2)增設區(qū)域尺寸大小形式,共3種,分別為:512、256、128。所以,特征圖上每一個像素點對應原圖9個候選區(qū)域。原圖上的候選區(qū)域數(shù)量為特征圖像素數(shù)量的9倍。雖然這些候選區(qū)域足以捕捉到所有待檢測目標,但是會造成以下兩個問題:1)候選區(qū)域中有相當一部分質(zhì)量不高;2)候選區(qū)域太多,使得訓練、檢測時運算開銷過大。所以利用非極大值抑制的技術,對所有候選區(qū)域打分,重疊部分較高的候選區(qū)域舍棄。選取分數(shù)較高的前2000個候選區(qū)域再進行后續(xù)操作。
本文主要通過2個方面提升性能:1)提升經(jīng)典模型的速度。經(jīng)典方法是通過極大值抑制的方式選定2000候選區(qū)域。本文生成候選區(qū)域的方法是采取自適應反饋調(diào)節(jié),通過訓練時反饋調(diào)節(jié),使候選區(qū)域量在300~2000動態(tài)變化,有效減少訓練時間。2)提高經(jīng)典模型的識別度,改進特征提取網(wǎng)絡,引入殘差網(wǎng)絡[10],使網(wǎng)絡深度更深,提取的特征更抽象。將原本的16層卷積層重構(gòu)為58層,提高了目標檢測的精度。以上做法能夠有效減少訓練時間,并且使得平均精度值提高。使得改進后的模型在識別率和訓練速度上都有所提高。改進后的算法框架如圖2所示。后續(xù)改進基于特定目標檢測(飛行器),為了滿足對于飛機目標的檢測,做出了下文的一些改進,如多尺度訓練以及豐富錨框樣式。
圖2 改進Faster-RCNN算法框架
特征提取網(wǎng)絡將原始圖像轉(zhuǎn)化為含有豐富特征信息的特征圖。為了得到信息更加豐富的特征圖,需要性能更加優(yōu)異的卷積神經(jīng)網(wǎng)絡來提取更抽象更復雜的信息。
Faster-RCNN 原始特征提取網(wǎng)絡為VGG16,VGG16整體分為5個大模塊,通過反復卷積池化,得到特征圖。Faster-RCNN 原始特征提取網(wǎng)絡為16層。通過實驗發(fā)現(xiàn),通過簡單疊加卷積層能提升精度,當模型層數(shù)提高到20層的時候,實驗發(fā)現(xiàn)平均精度值不僅沒有提高還有所下降。這是因為卷積神經(jīng)網(wǎng)絡模型的退化而不是過擬合所致。因為過擬合會導致訓練集上效果好而測試集上效果不佳,而該情況是在訓練集和測試集上結(jié)果都不佳。為了進一步加深模型的深度,引入殘差網(wǎng)絡。
殘差學習不是卷積層的簡單堆砌,而是明確地讓其映射到殘差層中[11]。訓練深層次的神經(jīng)網(wǎng)絡是十分困難的,使用深度殘差模塊搭建網(wǎng)絡可以很好地減輕深層網(wǎng)絡訓練的負擔(數(shù)據(jù)量),實現(xiàn)對更深層網(wǎng)絡的訓練。
假設殘差學習模塊的輸入為x,要擬合的函數(shù)映射為H(x),可以定義另一個殘差映射為F(x),且F(x)=H(x)-x,則原始的函數(shù)映射H(x)=F(x)+x。通過實驗證明,優(yōu)化殘差映射F(x)比優(yōu)化原始函數(shù)映射H(x)容易得多[12]。直接映射只是恒等映射,并未加入任何其他參數(shù),不影響整體網(wǎng)絡的復雜度與計算量。通過這種捷徑的方式構(gòu)建了更為豐富的卷積神經(jīng)網(wǎng)絡。該殘差網(wǎng)絡如表1所示。其中卷積層二,三,四,五均采用3個卷積核模板。第1個卷積核樣式是1×1,第2個卷積核樣式是3×3,第3個卷積核樣式是1×1。卷積核形式如表1所示。
表1 特征提取網(wǎng)絡結(jié)構(gòu)
網(wǎng)絡結(jié)構(gòu)整體分為3塊卷積塊,每個卷積塊分成5個大的卷積層。第1個 7×7 的卷積層進行降維,再經(jīng)過4個卷積層,最后經(jīng)過1個卷積層還原。在第1個卷積層和第2個卷積層之間使用一條“捷徑”,第3個 3×3 的卷積層和最后1個卷積層之間使用一條“捷徑”,再將第1個卷積層和最后1個卷積層之間使用一條“捷徑”。該結(jié)構(gòu)共有58層。這套網(wǎng)絡結(jié)構(gòu)有效提高了經(jīng)典模型的深度。
在Faster-RCNN算法出現(xiàn)之后,大部分目標檢測網(wǎng)絡選擇采用區(qū)域建議網(wǎng)絡推測目標位置[13]。Faster-RCNN 的核心思想是RPN,RPN的作用是使用卷積神經(jīng)網(wǎng)絡產(chǎn)生候選區(qū)域。為了盡可能選取所有待檢測目標,需要制造大量候選區(qū)域。例如,1000*600像素的原始圖像通過特征提取網(wǎng)絡,得到60*40像素的特征圖(錨框樣式設置為9種不同類型的候選區(qū)域模式),遍歷特征圖原圖生成60*40*9個候選區(qū)域[14]。如此大量的候選區(qū)域不能都用于后續(xù)的訓練。所以采用非極大值抑制的方式,抑制高重疊候選區(qū)域,選取質(zhì)量最高的2000個候選區(qū)域進行訓練。RPN的損失函數(shù)定義如下:
(1)
(2)
(3)
本文引入NP(區(qū)域數(shù)目調(diào)節(jié)層,即numbers of proposals )層,在訓練過程中自適應調(diào)節(jié)RPN選取的候選區(qū)域數(shù)量。
(4)
式中:i代表每N次訓練的序號。Npi代表第Ni次訓練到第(N+1)i次訓練中使用的候選區(qū)域數(shù)量。Li代表第Ni次訓練到第(N+1)i次訓練中回歸損失的平均值。μ1代表懲罰因子,μ2代表獎勵因子。
訓練過程中引入NP層對訓練結(jié)果進行反饋調(diào)節(jié)。每間隔N次訓練計算回歸損失的平均值,通過空白對照組實驗(固定Npi+1取不同數(shù)值進行實驗),得每隔N次Li縮小一半和自增1倍為合理變化抖動區(qū)間。超過這個區(qū)間,認為需要反饋調(diào)節(jié)。當Li翻倍及其以上時,將候選區(qū)域數(shù)量自增(1+μ1)的倍數(shù);當Li縮小一半及其更小時,認為可以適當減少選框數(shù)量,將候選區(qū)域數(shù)量變?yōu)樽陨?1-μ2)的倍數(shù)。設置候選區(qū)域的數(shù)量上下限,讓候選的數(shù)量從300~2000這個區(qū)間自適應改變。
在實際應用中,各種各樣目標尺寸差異較大。原始的Faster-RCNN 會對所有的訓練圖片采用固定尺寸,導致不同尺寸的目標檢測泛化性能較差[15]。本文使用多尺度訓練,在將圖片送入網(wǎng)絡之前,在保證圖像原有比例的前提下,將圖片隨機調(diào)整大小,使其較短邊取480、650和850 之一。然后隨機選擇三種尺度之一送入網(wǎng)絡中進行訓練,該操作如圖3所示。實驗證明,多尺度訓練使得網(wǎng)絡能夠?qū)W習目標的各種尺寸的特征,使得網(wǎng)絡對目標尺寸大小具有一定的魯棒性。
圖3 多尺度訓練
RPN網(wǎng)絡中錨點數(shù)量是網(wǎng)絡中一個非常重要的超參數(shù),它影響到后續(xù)的候選區(qū)域的生成。原始的Faster-RCNN使用9種不同樣式的錨點。每個滑動窗口產(chǎn)生9個不同尺度和不同長寬比的候選區(qū)域,在此基礎上,對整張圖片產(chǎn)生的候選區(qū)域使用非極大值抑制算法剔除多余的候選區(qū)域[16]。但默認設置的錨框參數(shù)對小的目標無法召回。在實際應用中。小目標總存在。因此,在默認參數(shù)的基礎上,加入一組64×64尺寸的錨框樣式使得網(wǎng)絡可以檢測到更多的小目標。并且,在民航領域,諸如飛機,飛行器等目標長寬比也較為特殊(飛行器一般較為修長)[17],如圖4所示。經(jīng)過對各種飛行器的考察和對比,在訓練過程中添加三組新的長寬比3∶1,4∶1,5∶1, RPN網(wǎng)絡一共使用20類錨框樣式,尺度大小
分別為64×64, 128×128, 256×256, 512×512,5類長寬比分別為1∶1, 1∶2,3∶1,4∶1,5∶1。實驗證明本文增加的64×64的尺度和不同長寬比可以檢測更多的小目標和飛行器目標。
圖4 針對飛行器設置好的錨框樣式
實驗硬件采用Z440工作站,配置32G內(nèi)存及 NVIDIA P2000顯卡,操作系統(tǒng)為Ubuntu16.04。采用的編程環(huán)境如下:使用的編程語言是Python語言,深度學習框架是TensorFlow1.7[18]。實驗的訓練樣本來自Pascalvoc數(shù)據(jù)集中的訓練集。在訓練階段,需要對訓練集中每張圖像中的每個目標用矩形框標記,有遮擋的目標也要標記。測試時,若識別出的目標檢測框和標記的矩形框重疊部分達到標記的矩形框的90 %以上,則記為檢測成功。
PASCAL VOC 2007 數(shù)據(jù)集作為經(jīng)典的開源數(shù)據(jù)集,包含5000訓練集樣本圖像和5000測試樣本圖像,共有21類不同對象類別。本文使用該數(shù)據(jù)集的訓練集和測試集,實驗使用 Tensorflow框架實現(xiàn)卷積神經(jīng)網(wǎng)絡模型,F(xiàn)aster-RCNN中的隨機失活、最大迭代值、批處理尺寸等參數(shù)對平均準確率值(mAP)產(chǎn)生較大的影響,為了得到較好的輸出,需要對這些參數(shù)進行優(yōu)化。實驗中,最大迭代次數(shù)為70000,RPN網(wǎng)絡的批處理尺寸為256,隨機失活值選取為0.6。
實驗一是具有區(qū)域數(shù)目調(diào)節(jié)層的目標檢測網(wǎng)絡在平均檢測精度和速度兩方面的表現(xiàn)。經(jīng)過多次實驗,平均能提高運算速度18%,精度幾乎沒有損失,節(jié)省了大量開銷。實驗一的結(jié)果如表2所示。
表2 相同網(wǎng)絡不同候選區(qū)域數(shù)目下的檢測效果
實驗二測試在最先進的目標檢測模型上增加區(qū)域數(shù)目調(diào)節(jié)層是否能提升訓練速度,選取的候選區(qū)域數(shù)目是否為最佳數(shù)目。本文大部分試驗基于Faster-RCNN,由表3可知,在Faster-RCNN最新系列,Mask-RCNN中的表現(xiàn)依然有較強的速度提升。實驗可知,在Faster-RCNN系列中,添加候選區(qū)域調(diào)節(jié)層,都具有普遍提升速度的效果。實驗同時也選取了YOLOV3模型作為對比。YOLO系列早期并沒有引入候選區(qū)域的概念,由于Faster-RCNN提出了RPN的概念,后續(xù)YOLO系列也采用了候選區(qū)域。在YOLO最新系列YOLOV3中添加了區(qū)域數(shù)目調(diào)節(jié)層,速度提升并不大。因為YOLO本身速度極快,檢測速度本身高達45s/幀。由實驗二可知,在Faster-RCNN系列中添加區(qū)域數(shù)目調(diào)節(jié)層意義重大,在YOLO系列中添加區(qū)域數(shù)目調(diào)節(jié)層只能增加少量速度。
表3 不同網(wǎng)絡增添區(qū)域數(shù)目調(diào)節(jié)層的檢測效果
實驗三查看在特點目標檢測的要求下(飛機的目標檢測),一些對于模型的改動效果。由于作者在民航院校,對于飛機的檢測非常感興趣。飛機本身長寬比特殊,原本錨框設置為1:1.1:2.2:1。針對飛機添加1:5,1:6,1:7三種長寬比樣式的錨點做實驗發(fā)現(xiàn),1:6對于飛機模型檢測精度為最佳。錨點尺寸大小的經(jīng)典設置為128、256和512,并在此基礎上增加一組更小的尺寸樣式52,組合成16種不同樣式。實驗結(jié)果如表4所示,對于錨框樣式的優(yōu)化,豐富后的16式提升了1.3%的精度。
表4 針對飛機模型做出的錨點優(yōu)化
實驗四檢測綜合兩項改進對飛機的目標檢測的效果。如表5所示,多尺度訓練可以提升模型的魯棒性,錨框樣式改進可以提升模型的可靠性。實驗說明,這兩項改進對于飛機模型的檢測,確實取得不錯的效果。
表5 改進網(wǎng)絡模型的檢測效果
從實驗一到實驗四的數(shù)據(jù)分析得出結(jié)論,在目標檢測模型上增添候選區(qū)域數(shù)目調(diào)節(jié)層,能有效提高模型的質(zhì)量。在Faster-RCNN系列模型的提升效果尤其好,對YOLO系列的提升效果不明顯。因為RPN層的訓練速度對于Faster-RCNN影響頗大。但是對于YOLO,這并不是影響其速度的關鍵。在此基礎中,本文探索了對于飛機目標檢測的兩項改進。另外,錨框樣式的豐富以及多尺度訓練也提升了飛機的目標檢測。
實驗五驗證了自行改進的特征提取網(wǎng)絡和不同特征網(wǎng)絡對目標檢測的效果。如表6所示,自行重構(gòu)的58層參差網(wǎng)絡比流行的參差網(wǎng)絡精度提高了1.2%。
表6 不同網(wǎng)絡的平均檢測精度
從實驗數(shù)據(jù)可知,殘差網(wǎng)絡可以有效解決神經(jīng)網(wǎng)絡的退化問題。,當VGG16網(wǎng)絡普通加深卷積層具有19層模型的時候,map尚能提高1%,當繼續(xù)加深模型,map精度劇烈下降。采用殘差網(wǎng)絡方式,基本有效解決了神經(jīng)網(wǎng)絡的退化問題。采用NP層反饋機制快速自適應算法后,速度提高了18%,提高了模型的有效性。
主要針對2個方面的研究:1)引入候選區(qū)域數(shù)目調(diào)節(jié)層優(yōu)化模型,針對飛機的目標檢測做出一些模型優(yōu)化。通過引入自適應反饋候選區(qū)域數(shù)量的方法進行動態(tài)調(diào)整,達到提高速度、提高模型有效性的目的;2)提高模型可靠性,利用殘差網(wǎng)絡的優(yōu)勢,重構(gòu)并且優(yōu)化了底層特征提取,精度提高了3.7%。
針對目標檢測的實時性與準確性要求,以卷積神經(jīng)網(wǎng)絡為基礎,搭建了多種框架的模型進行訓練。通過比較各網(wǎng)絡性能的優(yōu)劣,找到適用目標識別的網(wǎng)絡。基于殘差的目標識別算法,相較于傳統(tǒng)的目標識別算法,可以避免由于人為提取目標特征而帶來的誤差,在識別精度上有了巨大的提升。對于復雜背景下的目標,殘差網(wǎng)絡的shortcut反饋機制能夠有效地降低網(wǎng)絡訓練的難度,使得更深層次的網(wǎng)絡依然能夠有效地訓練使用殘差的目標檢測應用于目標識別中,殘差網(wǎng)絡無論在檢測率還是速度上都優(yōu)于原始網(wǎng)絡VGG16。引入反饋機制,控制候選區(qū)數(shù)目,達到提高算法速度的目的。
基于二階段的目標檢測算法,在現(xiàn)有候選區(qū)域生成網(wǎng)絡的基礎上,很難再在速度上有所提高。后續(xù)可以考慮在特征提取模塊和ROI池化模塊進行優(yōu)化、改進,以提高網(wǎng)絡的檢測率。