孟祥澤
(吉林建筑大學(xué)電氣與計算機(jī)學(xué)院,吉林長春 130118)
圖像目標(biāo)檢測是計算機(jī)視覺當(dāng)中關(guān)鍵的研究領(lǐng)域,其中目標(biāo)分類與目標(biāo)定位是評判圖像目標(biāo)檢測的重要標(biāo)準(zhǔn)。目前卷積神經(jīng)網(wǎng)絡(luò)(CNN)發(fā)展突飛猛進(jìn),成為當(dāng)前圖像分類的主流研究方法,C N N 通過多層神經(jīng)網(wǎng)絡(luò)提取出圖像中大量特征信息,進(jìn)行目標(biāo)分類,具有極強(qiáng)的魯棒性與泛化能力,對于多尺度多目標(biāo)的檢測具有重大意義。圖像目標(biāo)檢測的研究熱點也就在于, 如何使用更高效的C N N 對圖像目標(biāo)進(jìn)行分類,如何在一張圖片上快速準(zhǔn)確的定位一個目標(biāo)。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)建立在認(rèn)知機(jī)(Neocognitron)[1]基礎(chǔ)上,把卷積運(yùn)算和采樣操作引入到人工神經(jīng)網(wǎng)絡(luò),使提取出的特征具備一定的空間不變性。C N N 的核心設(shè)計思想包括以下幾點[2,3]。
(1)局部連接。CNN具有很強(qiáng)的視覺局部性,即兩像素點距離越近關(guān)聯(lián)性越強(qiáng),距離越遠(yuǎn)關(guān)聯(lián)性就會越弱,CNN在對圖像做處理時,只對局部鄰域做稠密連接。(2)權(quán)重共享。C N N 采用卷積核做卷積處理,在局部連接中,每個神經(jīng)元對應(yīng)的卷積核參數(shù)相同。(3)多層卷積與池化。CNN通常由卷積層后面追加一個池化層,這種組合會重復(fù)多次,用以提取出圖像的特征,通過邊界擴(kuò)充保證輸入與輸出的尺寸不發(fā)生變化進(jìn)而還可以強(qiáng)化邊緣特征。
為了提高網(wǎng)絡(luò)精度前人學(xué)者進(jìn)行大量研究以優(yōu)化CNN,Lin等人[4]提出網(wǎng)中網(wǎng)(NIN)模型采用多層感知層(MLP)[5]代替?zhèn)鹘y(tǒng)CNN的卷積過程以提取圖像當(dāng)中高度抽象的特征。Zeiler等人[6]提出的反卷積神經(jīng)網(wǎng)絡(luò)模型,這是一種可視化的過程用來驗證各層提取到的特征圖,并在此基礎(chǔ)上提高網(wǎng)絡(luò)精度。Jaderberg等人[7]提出了空間變換網(wǎng)絡(luò)(STN),能夠自適應(yīng)地將數(shù)據(jù)進(jìn)行空間變換和對齊保持不變性,如今也有將卷積核參數(shù)放在神經(jīng)網(wǎng)絡(luò)當(dāng)中一同訓(xùn)練得到一個提取特征能力更強(qiáng)大的卷積核。
Alexnet模型[8]在每一層卷積之后,都做了局部響應(yīng)歸一化(LRN),池化層采用最大池化法,使用ReLu激活函數(shù)來代替tanh函數(shù),采用雙GPU訓(xùn)練,引入Dropout隨機(jī)失活[9]在訓(xùn)練階段隨機(jī)刪除掉一些節(jié)點,減少神經(jīng)元復(fù)雜的共同適應(yīng)性,減緩了過擬合問題。
VGG模型[10]于2014年提出,其核心思想是利用較小的卷積核不斷堆疊增加網(wǎng)絡(luò)深度,以此提升整個網(wǎng)絡(luò)架構(gòu)性能。利用較小的卷積核代替更大的卷積核可以保證感受野范圍不變的同時又減少了參數(shù)量,提高了訓(xùn)練速度[11]。
2014年出現(xiàn)了Inception系列,進(jìn)一步使用更小的卷積核,更多的神經(jīng)網(wǎng)絡(luò)層,Inception-v1也就是GoogleNet通過引入Inception模塊提取出不同尺寸的圖像特征,并且為了防止深層而出現(xiàn)的梯度消失問題引入了SoftMax輔助分類網(wǎng)絡(luò)[12]。
Google在GoogleNet的基礎(chǔ)之上提出了BN-Inception[13]在每個卷積層后加入BN層(Batch Normalization),避免梯度消失問題。Inception-v3進(jìn)一步將一個n*n的卷積核劃分成了1*n和n*1的卷積核這種非對稱的拆分方式,減少參數(shù)的數(shù)量,增加特征的多樣性,進(jìn)一步提高了分類精度。
以上的模型大多從增加神經(jīng)網(wǎng)絡(luò)的層數(shù)來提高精度,然而網(wǎng)絡(luò)的層數(shù)并非越多越好,深度神經(jīng)網(wǎng)絡(luò)隨著網(wǎng)絡(luò)層數(shù)的增加會導(dǎo)致神經(jīng)網(wǎng)絡(luò)的退化,使誤差非常大。為了解決網(wǎng)絡(luò)退化問題,2015年何凱明等人提出了深度殘差網(wǎng)絡(luò)(ResNet)[14],解決了網(wǎng)絡(luò)退化的問題,使得增加神經(jīng)網(wǎng)絡(luò)的層數(shù)已不是問題,現(xiàn)如今的C N N 也一直在更新但都是基于ResNet,ResNet的提出極大的提高了系統(tǒng)的準(zhǔn)確率,是圖像分類領(lǐng)域的重大突破。
在使用C N N 解決給定圖片只有單個物體時的分類問題可以發(fā)揮很好的效果,但是一張圖片往往有很復(fù)雜的背景包含數(shù)十種物體,CNN難以有所成效。所以需要目標(biāo)檢測算法將圖像中的物體檢測出來在交給C N N 進(jìn)行分類?,F(xiàn)今而言, 目標(biāo)檢測算法大致可分為三類, 一階段(one-stage)檢測算法,二階段(two-stage)檢測算法,anchor-free檢測算法。two-stage的檢測過程分為兩個步驟。首先由算法生成若干個候選框,再通過C N N 對候選框當(dāng)中的物體進(jìn)行分類。one-stage則是對目標(biāo)的邊界框和類別概率進(jìn)行回歸,相對來說精度有所損失,但速度較twostage模式的算法更快。
圖1 R-CNN 流程圖Fig.1 R-CNN flow chart
首先介紹目標(biāo)檢測算法的評價指標(biāo):(1)IoU(交并比)指由目標(biāo)檢測算法產(chǎn)生的候選框與真正的標(biāo)記框之間的重疊程度,也就是它們之間的交集和并集的比值,最理想的情況下IoU=1指完全重疊,通常而言IoU0.5認(rèn)為定位比較準(zhǔn)確。(2)mAP(mean Average Precession,平均精度均值)用來評價由目標(biāo)檢測算法對一張圖片做出候選框的正確率。
2014年Girshick等人[15]利用CNN提取圖像特征替代傳統(tǒng)的圖像處理技術(shù),并采用聚類搜索的Selective Search算法[16]代替滑動窗口提取候選區(qū)域,R-CNN處理流程比較復(fù)雜大概分成以下幾步。(1)候選區(qū)域的提取,通過Selective Search從輸入圖像上提取2000個左右的候選區(qū)域。(2)特征提取,將所有區(qū)域裁剪或縮放到固定的227×227維度,利用C N N 提取特征,并輸出到緊連的兩個全連接層。(3)分類,使用SVM(Support Vector Machine,支持向量機(jī))對特征進(jìn)行分類,對于每一個類別都有一個SVM。(4)去掉冗余框,一個物體可能被多個不同的框選中,采用NMS(Non-Maximum Supression,非極大值抑制)[17]去掉冗余框。(5)邊界框的回歸,使用線性回歸修正邊界框的位置和大小,每一個邊界框都要單獨設(shè)置一個回歸器,RC N N 算法流程如圖1。
R-C N N 在圖像目標(biāo)檢測領(lǐng)域取得了重大突破,但其仍存在缺點:輸入圖像經(jīng)過剪裁和變形后會導(dǎo)致信息丟失和位置信息扭曲,從而影響了識別精度;由于R-N N 有大量的重復(fù)計算,需要對每張圖片中的上千個變形后的區(qū)域反復(fù)調(diào)用C NN,計算非常耗時,速度較慢;S V M 更適用于小樣本,在這個場景中效率準(zhǔn)確率并不理想。
圖2 RPN 結(jié)構(gòu)Fig.2 RPN structure
基于R-CNN的問題Girshick等人又提出了Fast RCNN[18],相對于R-CNN主要進(jìn)行了三方面改進(jìn)。直接對原始圖像做卷積操作,而不再是對每個候選區(qū)域都做一次卷積,減少了大量的重復(fù)計算;同時引入了ROI Pooling(Region of Interest Pooling,感興趣區(qū)域池化),根據(jù)映射關(guān)系可以將不同尺寸的候選區(qū)域?qū)?yīng)到固定尺寸的特征圖,然后放入到全連接層中做處理;使用了SoftMax層代替了SVM進(jìn)行分類。但是Fast R-CNN沿用此前的Selective Search的方法挑選候選區(qū)域,仍舊耗費時間,對于實時性要求很高的場景Fast R-CNN無法滿足。
為了解決Fast R-CNN無法滿足實時性要求的缺陷,也就在于如何更高效的生成候選區(qū)域,在2016年Ren等人[19]提出了Faster R-CNN,在原有的Fast R-CNN基礎(chǔ)上結(jié)合了區(qū)域候選網(wǎng)絡(luò)(Region Proposal Network,RPN)。R P N 通過共享卷積層特征。
RPN通過滑動窗口輸出一個256維的向量,然后兵分兩路做處理,一路走cls層,該層由一個1*1的卷積和一個SoftMax構(gòu)成,用SoftMax來判斷候選框是前景還是背景,另一路走reg層做邊界框回歸來調(diào)整邊界框大小和位置,如此便可快速確定候選區(qū)域。在有了RPN之后,Faster RC N N 首先輸入圖片經(jīng)過C N N 得到特征圖,通過R P N 快速得到候選區(qū)域,在通過R O I 以及全連接輸出最終分類結(jié)果。利用滑動窗口方法,采用錨框機(jī)制(anchor box)和邊界框回歸方法快速獲得多尺度的候選區(qū)域RP N的結(jié)構(gòu)如圖2所示。
two-stage目標(biāo)檢測算法不斷向前發(fā)展還出現(xiàn)了FPN[20],深層特征和淺層特征融合提升了檢測小目標(biāo)物體精度。Mask R-CNN[21]在Faster R-CNN基礎(chǔ)上使用ROI Align替換ROI Pooling增加了目標(biāo)掩膜輸出支路進(jìn)行像素級的預(yù)測,其在實例分割,關(guān)鍵點檢測有很大應(yīng)用。Cascade R-CNN[22]使用多個不同的IOU閾值,訓(xùn)練多個級聯(lián)的檢測器,其mAp達(dá)到了50.9%。TridentNet[23]利用空洞卷積構(gòu)建的一個三分支網(wǎng)絡(luò),相比之前的算法如FPN,更好地解決了多尺度檢測問題。
為了使檢測速度更快, 學(xué)者們提出了一階段檢測器,舍棄了二階段檢測器中的提取候選區(qū)域費時的步驟。其核心思想是將目標(biāo)檢測問題轉(zhuǎn)換為回歸問題求解,利用權(quán)重參數(shù)將分類和目標(biāo)框的預(yù)測相關(guān)聯(lián),進(jìn)行回歸分析。
一階段檢測算法的先河之作就是YOLO(You Only Look Once)[24],主要思想就是把目標(biāo)檢測問題轉(zhuǎn)換為直接邊界框選取和類別概率的問題,省去了候選框的選取,YOLO的運(yùn)行速度可以達(dá)到45f/s,真正實現(xiàn)了端到端的目標(biāo)檢測算法,可以滿足實時性的要求。
2017年Redmon等人[25]提出了YOLOv2,大致做了以下幾點改進(jìn):(1)對于每一個卷積層都使用了BN操作,舍棄Dropout操作,使模型收斂性顯著提高。(2)采用錨框來預(yù)測邊界框。(3)使用Darknet-19(19個卷積層和5個最大池化層構(gòu)成)作為YOLOv2主干網(wǎng)絡(luò)并用用1*1卷積替換YOLO中的全連接層。
2018年Redmon等人[26]又提出了YOLOv3,大致做了以下幾點改進(jìn):(1)參考FPN采用了3個不同尺度的特征圖進(jìn)行目標(biāo)檢測。(2)使用Darknet-53(借鑒ResNet設(shè)計,精度與ResNet-101相當(dāng))作為YOLOv2主干網(wǎng)絡(luò)。(3)使用多標(biāo)簽分類器代替SoftMax進(jìn)行分類。(4)改進(jìn)YOLO的損失函數(shù),采用了二元交叉熵作為損失函數(shù)進(jìn)行訓(xùn)練,實現(xiàn)了對同一個邊界框進(jìn)行多個類別的預(yù)測。
2020年Bochkovskiy等人[27]提出了YOLOv4使用CSPDarknet53作為主干網(wǎng)絡(luò),通過引入Mosaic數(shù)據(jù)增強(qiáng)方法與使用GA算法選擇最優(yōu)超參數(shù),并且使用PANet網(wǎng)絡(luò)代替FPN,提高小目標(biāo)檢測物體的檢測效果。YOLOv4其在COCO數(shù)據(jù)集上的檢測精度達(dá)到了43.5%。
無論是one-stage還是two-stage都采用錨框機(jī)制,生成的錨框較多而目標(biāo)物體卻很少。就會造成正負(fù)錨框失衡,增加訓(xùn)練時間。錨框的使用會引入了很多超參數(shù),當(dāng)與多尺度目標(biāo)檢測結(jié)合使用時會變得更加復(fù)雜。自CornerNet開始,目標(biāo)檢測已邁入anchor-free時代。
2019年提出CenterNet[28],該算法首先通過全卷積神經(jīng)網(wǎng)絡(luò)得到熱點圖找到目標(biāo)中心點,再基于目標(biāo)中心點回歸得到目標(biāo)尺寸、3D坐標(biāo)方向、姿態(tài)信息等。該算法通過三個網(wǎng)絡(luò)(Rsenet-18、DLA-34、Hourglass-104)來輸出預(yù)測值,整個過程舍棄了錨框機(jī)制,NMS操作,大大減少了網(wǎng)絡(luò)的計算量和訓(xùn)練時間。同年提出一種基于全卷積神經(jīng)網(wǎng)絡(luò)的逐像素目標(biāo)檢測算法FCOS[29],與基于錨框的算法不同的是其直接對特征圖的每個位置與原圖邊框進(jìn)行回歸。為了提高檢測精度,引入center-ness(中心度) 用于降低檢測效果不理想的目標(biāo)框權(quán)重, 通過N M S 確定最終檢測結(jié)果。在檢測時由于目標(biāo)真實框重疊,可能會出現(xiàn)的語義模糊情況,FCOS采用多級預(yù)測方法解決語義模糊問題。同樣不引入錨框機(jī)制,節(jié)省了大量時間。
在2019年9月,北京大學(xué)和紐約州立大學(xué)石溪分校的研究者提出CBNet(Composite Backbone Network)[30],其思想就是通過多個相同且彼此相鄰的主干網(wǎng)絡(luò)(backbone)相互連接構(gòu)成的一個性能更優(yōu)的主干網(wǎng)絡(luò)來對特征圖進(jìn)行目標(biāo)檢測。這種集成的主干網(wǎng)絡(luò)的初始化僅需要單個主干網(wǎng)絡(luò)的預(yù)訓(xùn)練即可完成,而單個主干網(wǎng)絡(luò)的預(yù)訓(xùn)練如Re sNe t等早已研究透徹。對于前述的各種目標(biāo)檢測算法在使用C B N e t 后在C O C O 數(shù)據(jù)集上m A P 提升大概1.5%~3%,截止到2020年基于CBNet改進(jìn)后的Cascade Mask R-CNN算法已是最優(yōu)。
本文首先簡單介紹在C N N 發(fā)展歷程當(dāng)中具有里程碑意義的AlexNet,VGG,Inception,Resnet等網(wǎng)絡(luò)結(jié)構(gòu)。隨后從候選框提取,回歸,anchor-free三個方面綜述目前基于C N N 的目標(biāo)檢測算法,最后簡單介紹了逐漸火熱起來的CBNet模型,可以看到圖像目標(biāo)檢測在未來仍然具有很大的發(fā)展?jié)摿吞嵘臻g。
CNN在訓(xùn)練時需要占用大量的內(nèi)存,耗費大量時間,隨著移動互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,用戶對便攜性設(shè)備的需求量增加單獨使用某種CN N網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行分類時可能會存在一定的局限性。為了提高目標(biāo)檢測在特殊環(huán)境下的識別率,如在目標(biāo)與背景顏色一致,多個目標(biāo)又重疊在一起,要識別的目標(biāo)被嚴(yán)重遮擋等極端情況下,可將不同的卷積神經(jīng)網(wǎng)絡(luò)技術(shù)相結(jié)合,充分利用各自的優(yōu)點,同時針對不同物體的特殊結(jié)構(gòu)設(shè)計相應(yīng)的神經(jīng)網(wǎng)絡(luò),來提高極端情況下的目標(biāo)檢測精度。