施 非,邱 臻,韓 勤,李金耿,錢惠敏,項文波
(1.河海大學(xué)能源與電氣學(xué)院,江蘇 南京 211100; 2.浙江華云信息科技有限公司,浙江 杭州 310008;3.南京理工大學(xué)自動化學(xué)院,江蘇 南京 210098)
目標(biāo)檢測是計算機(jī)視覺研究領(lǐng)域中的一個研究熱點(diǎn),在交通監(jiān)控、圖像分析、自動駕駛等方面有著廣泛的應(yīng)用。目標(biāo)檢測的主要任務(wù)是從靜態(tài)圖像或動態(tài)視頻中檢測并定位感興趣的目標(biāo)對象,即識別并定位感興趣目標(biāo)。目前,基于深度卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法[1]已成為目標(biāo)檢測領(lǐng)域的研究熱點(diǎn)。常用的基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法包括基于區(qū)域提議的兩階段目標(biāo)檢測算法和基于位置回歸的一階段目標(biāo)檢測算法。前者的代表性算法主要包括R-CNN[2](Region-based Convolutional Neural Network)、Faster R-CNN[3]、Mask R-CNN[4]等;后者的代表性算法主要包括YOLO[5](You Only Look Once)、SSD[6](Single Shot Multibox Detector)等。兩階段目標(biāo)檢測算法得益于預(yù)先的區(qū)域提議,檢測精度較高,一階段檢測算法則檢測速度較快。
在目標(biāo)檢測中,訓(xùn)練算法所用的圖像通常會事先標(biāo)出所含目標(biāo)的類別和區(qū)域,訓(xùn)練時會在圖像中采用區(qū)域提議或基于錨機(jī)制的方法提取一系列候選區(qū)域[7],且根據(jù)指標(biāo)IoU(Intersection over Union),即候選區(qū)域和標(biāo)記的目標(biāo)區(qū)域的交集與并集比是否超過給定的閾值(一般取0.5)確定為正樣本(IoU0.5)或負(fù)樣本(IoU<0.5)。在訓(xùn)練樣本集中,通常會出現(xiàn)樣本數(shù)據(jù)的類間不平衡問題[8]和簡單樣本-難分樣本數(shù)量不平衡問題[9-10](指訓(xùn)練數(shù)據(jù)集包含過量簡單樣本)。樣本數(shù)據(jù)的類間不平衡問題包括:1)不同類別目標(biāo)的訓(xùn)練樣本數(shù)量不平衡[11],即有些類別的訓(xùn)練樣本數(shù)量較多,而另一些類別的訓(xùn)練樣本數(shù)量較少,從而影響目標(biāo)分類的準(zhǔn)確性;2)基于錨機(jī)制生成的正、負(fù)錨樣本數(shù)量的比例懸殊[12],從而影響目標(biāo)檢測的準(zhǔn)確性;3)背景像素的數(shù)量遠(yuǎn)大于前景像素的數(shù)量,從而影響目標(biāo)分割的準(zhǔn)確性。而簡單樣本-難分樣本數(shù)量不平衡問題是指訓(xùn)練樣本中的易識別樣本過多,難識別樣本相對很少,此種情況下,會導(dǎo)致模型在訓(xùn)練過程中稀釋有效梯度[13],從而影響算法的檢測準(zhǔn)確率及泛化性能。樣本數(shù)據(jù)的類間不平衡問題和簡單樣本-難分樣本數(shù)量不平衡問題通常會同時出現(xiàn),并導(dǎo)致模型退化。
向鴻鑫等[14]綜述了在分類問題中存在不平衡數(shù)據(jù)的處理方法,分為預(yù)處理方法和挖掘方法。這些方法分別從數(shù)據(jù)分布及分類器選擇角度出發(fā),改善基于不平衡數(shù)據(jù)的分類器的分類性能。在基于深度神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法中,數(shù)據(jù)的特征表示學(xué)習(xí)和分類是一個整體過程,通??紤]從修改數(shù)據(jù)分布角度改善數(shù)據(jù)不平衡引發(fā)的問題。
本文研究現(xiàn)有目標(biāo)檢測算法解決數(shù)據(jù)不平衡引發(fā)問題的方法,并將它們分為2類:基于損失值的難例挖掘方法[1,5]和基于可變權(quán)重?fù)p失函數(shù)的數(shù)據(jù)平衡方法[6,15]?;趯?類方法的分析比較,本文提出結(jié)合2類方法的優(yōu)勢,更好地改善數(shù)據(jù)不平衡導(dǎo)致的檢測準(zhǔn)確率低的問題。本文將這種思想運(yùn)用在Faster R-CNN目標(biāo)檢測算法中,具體地,修改Faster R-CNN的損失函數(shù)為可變權(quán)重?fù)p失函數(shù),且對前向傳播的樣本損失值排序并挖掘難例加入反向傳播,繼而提高檢測準(zhǔn)確率。在不同數(shù)據(jù)集和不同基礎(chǔ)網(wǎng)絡(luò)下的實驗結(jié)果表明,本文提出的Faster R-CNN改進(jìn)算法可有效提高檢測準(zhǔn)確率。
基于損失值的難例挖掘方法[16-17]和基于可變權(quán)重?fù)p失函數(shù)的數(shù)據(jù)平衡方法通過不同的方式處理不平衡數(shù)據(jù)。前者對訓(xùn)練樣本的損失值排序,并根據(jù)規(guī)則挖掘損失值較大的難分樣本;后者通過給每個樣本對應(yīng)的損失函數(shù)施加可變權(quán)重[14,18-19]的方法解決數(shù)據(jù)不平衡問題。
難例挖掘的思想在不平衡數(shù)據(jù)的處理方法[14]中已被使用,例如上采樣方法[20]、訓(xùn)練SVM[21-22]時所使用的Bootstrapping(拔靴法)[23-24]、基于Boosting的挖掘算法[25-26]、代價敏感的挖掘算法。但這些難例挖掘方法通常需要先訓(xùn)練網(wǎng)絡(luò),并在訓(xùn)練完成后固定網(wǎng)絡(luò),使用新的樣本繼續(xù)訓(xùn)練,較大程度地增加了網(wǎng)絡(luò)訓(xùn)練的時間成本。而在基于深度神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測方法中,通常采用在線難例挖掘方法,使得在提高網(wǎng)絡(luò)性能的同時,有效控制訓(xùn)練網(wǎng)絡(luò)所需時間成本的增加。
在基于深度神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測方法中采用的在線難例挖掘方法通常是基于訓(xùn)練損失值實現(xiàn)的,即在模型訓(xùn)練過程中,對訓(xùn)練樣本的損失值進(jìn)行排序,并根據(jù)規(guī)則挖掘難分樣本(難例),將難例加入反向傳播更新網(wǎng)絡(luò)參數(shù)。常用的方法有OHEM[1,27](Online Hard Example Mining)和OHNM[5](Online Hard Negative Mining)。OHEM提出將每個batch的樣本輸入網(wǎng)絡(luò)模型,并將當(dāng)前損失值進(jìn)行排序,選出若干最大的損失值對應(yīng)的樣本作為難分樣本,并基于這些難分樣本反向傳播更新網(wǎng)絡(luò)參數(shù)。在這種方法下,對應(yīng)損失值較小的簡單樣本得到了抑制,從而可改善簡單樣本-難分樣本數(shù)量不平衡問題。OHNM是OHEM的改進(jìn),在根據(jù)損失值對難分樣本進(jìn)行排序的基礎(chǔ)上,以所有正樣本的數(shù)量為參照,按照正負(fù)樣本比例為1∶3選取負(fù)樣本。OHEM既可以改善簡單樣本-難分樣本數(shù)量不平衡的問題,又可以通過固定比例選取合適的負(fù)樣本數(shù)量,改善正、負(fù)樣本數(shù)量不平衡的問題。
基于可變權(quán)重?fù)p失函數(shù)的數(shù)據(jù)平衡方法旨在通過損失函數(shù)的可變權(quán)重的調(diào)節(jié)平衡數(shù)據(jù)。代表性的損失函數(shù)有Class Balance Loss[15]和Focal Loss[6]。基于Class Balance Loss的方法,給每一類目標(biāo)分配一個可變權(quán)重,當(dāng)某一類目標(biāo)的樣本數(shù)量增加時,其對應(yīng)的權(quán)重逐漸減小,以達(dá)到抑制某類訓(xùn)練樣本的數(shù)量過量的問題。因此,該方法能處理引言中說明的第一種類間不平衡問題,即不同類別目標(biāo)的訓(xùn)練樣本數(shù)量不平衡。基于Focal Loss的方法,引入了2個可變權(quán)重,一個權(quán)重用以調(diào)節(jié)正負(fù)樣本的比例以改善類間不平衡問題,另一個權(quán)重則用來改善簡單樣本-難分樣本的數(shù)量不平衡問題,分別處理了正負(fù)樣本不平衡和過量簡單樣本問題。
本文對上述4種常用的不平衡數(shù)據(jù)處理方法的性能進(jìn)行比較,如表1所示。
表1 不平衡數(shù)據(jù)處理方法性能對比
Faster R-CNN算法在訓(xùn)練時采用隨機(jī)抽樣的方式選取正負(fù)樣本。當(dāng)訓(xùn)練數(shù)據(jù)集中簡單樣本-難分樣本的數(shù)量不平衡(即訓(xùn)練數(shù)據(jù)集包含過量簡單樣本)時,以隨機(jī)方式抽取樣本會導(dǎo)致難分樣本被抽取的概率明顯小于簡單樣本,從而使得深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)抽取的特征表示更偏向于簡單樣本,繼而使得模型訓(xùn)練結(jié)果不是最優(yōu),且泛化性能較弱。此外,F(xiàn)aster R-CNN算法在區(qū)域提議部分生成的正樣本數(shù)遠(yuǎn)小于負(fù)樣本數(shù),導(dǎo)致訓(xùn)練樣本的類間不平衡。針對這2類數(shù)據(jù)不平衡問題,本文提出修改Faster R-CNN的損失函數(shù)為可變權(quán)重?fù)p失函數(shù)Focal Loss,且在網(wǎng)絡(luò)中增加難例挖掘模塊,選取損失值較大的前若干個樣本(每個批次取一半的樣本)作為難例,加入樣本集進(jìn)行反向傳播,具體的網(wǎng)絡(luò)結(jié)構(gòu)如圖1(b)(見2.2節(jié))所示。
Faster R-CNN算法采用的分類損失函數(shù)L為[2]:
(1)
(2)
它是一種對數(shù)損失函數(shù),特別地:
(3)
訓(xùn)練過程中,如果正樣本的預(yù)測輸出概率越大,對應(yīng)的損失Lcls則越小;如果負(fù)樣本的預(yù)測輸出概率越小,對應(yīng)的損失Lcls也越小。也就是說,簡單樣本對應(yīng)的損失函數(shù)小。如果訓(xùn)練數(shù)據(jù)集中存在大量的簡單樣本,則網(wǎng)絡(luò)參數(shù)的收斂速度較慢,并且可能無法逼近最優(yōu)。另一方面,正負(fù)樣本的損失在網(wǎng)絡(luò)參數(shù)的更新過程中作用無差別,如果訓(xùn)練樣本集中,負(fù)樣本的數(shù)量遠(yuǎn)大于正樣本的數(shù)量,則網(wǎng)絡(luò)參數(shù)更偏向于負(fù)樣本的特性。
因此,本文引入Focal Loss損失函數(shù)[9]計算每個樣本的損失,表達(dá)式為:
(4)
其中,α[0,1],0,可調(diào)節(jié)樣本數(shù)據(jù)中正負(fù)樣本數(shù)量不平衡,及簡單樣本-難分樣本數(shù)量不平衡問題。對于簡單正樣本,其預(yù)測概率pi較大,通過增大,(1-pi)會大大減小,降低權(quán)重;同樣,對于簡單負(fù)樣本,預(yù)測概率pi較小,通過增大,pi會大大減小,降低權(quán)重,這是對于簡單樣本的抑制過程。α(1-pi)與(1-α)pi直接控制著正負(fù)樣本對總損失的權(quán)重,直觀上,α取較大值可以降低負(fù)樣本的權(quán)重,但是(1-pi)和pi也在抑制負(fù)樣本的權(quán)重,根據(jù)實驗經(jīng)驗,反而要減小α值來平衡正負(fù)樣本權(quán)重,本文實驗中參數(shù)α、分別取0.25和2。
雖然Focal Loss可改善簡單樣本-難分樣本數(shù)量不平衡問題,但為了提高網(wǎng)絡(luò)的檢測性能,本文進(jìn)一步提出在原Faster R-CNN網(wǎng)絡(luò)結(jié)構(gòu)中增加難例挖掘模塊(見圖1(b)中的Hard Example Miner模塊)實現(xiàn)難例樣本的選取,以進(jìn)一步平衡簡單樣本-難分樣本的數(shù)量比。首先,網(wǎng)絡(luò)前向傳播所有區(qū)域提議部分生成的候選區(qū)域樣本,并得到其分類損失;然后,按損失值從大到小的順序排列樣本,并選取前若干個損失值較大的樣本(每個batch取一半的樣本),送入網(wǎng)絡(luò)ROI池化層進(jìn)行傳播,更新網(wǎng)絡(luò)參數(shù)。
(a) Faster R-CNN
(b) 本文算法圖1 Faster R-CNN與本文算法的網(wǎng)絡(luò)結(jié)構(gòu)對比
在網(wǎng)絡(luò)中增加訓(xùn)練模塊,不可避免地會增加訓(xùn)練時間,為了盡可能降低訓(xùn)練時間成本的增加幅度,本文分別從2個方面著手:一是僅挖掘分類損失值較大的一部分樣本作為難例,重新訓(xùn)練網(wǎng)絡(luò);二是在網(wǎng)絡(luò)訓(xùn)練中使用了A、B這2個相同子網(wǎng)絡(luò),如圖1(b)所示。子網(wǎng)絡(luò)A用于前向傳播,計算損失值,子網(wǎng)絡(luò)B根據(jù)損失值排序選擇難例樣本,并將這些難例樣本進(jìn)行反向傳播,更新網(wǎng)絡(luò)參數(shù)。
圖1給出了本文改進(jìn)算法與原Faster R-CNN算法的網(wǎng)絡(luò)結(jié)構(gòu)對比圖。由圖1可知,本文算法的改進(jìn)之處包含以下幾個方面:1)在分類部分,采用Focal Loss函數(shù)代替了原網(wǎng)絡(luò)中的Softmax損失函數(shù);2)引入了難例挖掘模塊;3)在訓(xùn)練網(wǎng)絡(luò)中增加了與子網(wǎng)絡(luò)A相同的子網(wǎng)絡(luò)B,實現(xiàn)難例選擇及難例的反向傳播。由圖1可知,通過在分類部分引入Focal Loss損失函數(shù),本文提出的基于OHEM的Faster R-CNN改進(jìn)算法調(diào)整了網(wǎng)絡(luò)結(jié)構(gòu),優(yōu)化了訓(xùn)練方法,并在不改變數(shù)據(jù)集的情況下充分訓(xùn)練了數(shù)據(jù)集中的難分樣本,提高了檢測精度。本文的改進(jìn)算法具有以下優(yōu)點(diǎn):1)通過引入可變權(quán)重?fù)p失函數(shù)和難例挖掘模塊,改善了數(shù)據(jù)不平衡問題,提高了算法的平均檢測精度;2)子網(wǎng)絡(luò)B的引入,使得難例的選擇和訓(xùn)練無需手動操作,實現(xiàn)了端到端的訓(xùn)練[28];3)本文提出的不平衡數(shù)據(jù)改進(jìn)算法思想可拓展至其他基于深度神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法中,泛化能力較強(qiáng)。
為了驗證本文改進(jìn)算法的有效性,進(jìn)行了2組實驗,分別在不同數(shù)據(jù)集以及不同基礎(chǔ)網(wǎng)絡(luò)上,對比本文算法與Faster R-CNN算法的性能。
Pascal VOC為圖像分類、檢測和分割任務(wù)提供了一套標(biāo)準(zhǔn)化的數(shù)據(jù)集,包括VOC 2007數(shù)據(jù)集和VOC 2012數(shù)據(jù)集。數(shù)據(jù)集中包含person、dog、car等20類生活中的常見目標(biāo)。VOC 2007中包含9963幅標(biāo)注過的圖片,由train、val、test這3個部分組成,共標(biāo)注出24640個物體。對于檢測任務(wù),VOC 2012的train、val、test包含2008—2011年的所有對應(yīng)圖片,其中train、val共計11540幅圖片,27450個物體。
本文在相同的實驗平臺Caffe下,分別在Pascal VOC 2007數(shù)據(jù)集和Pascal VOC 07+12數(shù)據(jù)集上進(jìn)行Faster R-CNN及本文算法性能的對比實驗。
表2給出了采用Pascal VOC 2007的訓(xùn)練集訓(xùn)練不同算法,進(jìn)行70000次迭代后,對Pascal VOC 2007的測試集進(jìn)行測試得到的20類目標(biāo)的檢測精度對比結(jié)果。由表2可知,70000次迭代訓(xùn)練下,本文提出的Faster R-CNN改進(jìn)算法(簡記為Focal+OHEM+Faster R-CNN)對20類目標(biāo)的平均檢測精度(mean Average Precision, mAP)達(dá)到了69.8%,較原算法提高了0.9個百分點(diǎn),較僅采用OHEM改進(jìn)Faster R-CNN算法(簡記為OHEM+Faster R-CNN)提高了0.5個百分點(diǎn),較僅采用Focal Loss函數(shù)改進(jìn)Faster R-CNN算法(簡記為Focal+Faster R-CNN)提高了0.5個百分點(diǎn)。表3給出了采用Pascal VOC 07+12的訓(xùn)練集訓(xùn)練不同算法,并進(jìn)行70000次迭代后,對Pascal VOC 2007+12的測試集進(jìn)行測試的結(jié)果對比。由表3可知,改進(jìn)算法對20類目標(biāo)的平均檢測精度達(dá)到了73.2%,較原算法提高了1.7個百分點(diǎn),較僅采用OHEM改進(jìn)Faster R-CNN算法提高了0.9個百分點(diǎn),較僅采用Focal Loss函數(shù)改進(jìn)Faster R-CNN算法提高了1.1個百分點(diǎn)。
表2 70000次迭代下使用Pascal VOC 2007數(shù)據(jù)集訓(xùn)練各算法的目標(biāo)檢測精度結(jié)果 單位:%
表4為2種數(shù)據(jù)集在70000次迭代下訓(xùn)練時間和FPS(Frame Per Second)指標(biāo)的對比結(jié)果??梢钥闯觯W(wǎng)絡(luò)結(jié)構(gòu)的改變,使得本文的改進(jìn)算法在訓(xùn)練時間上增加了2 h左右,但檢測速度FPS的變化很小。
表4 訓(xùn)練時間、FPS對比表
此外,本文給出了檢測結(jié)果對比圖,如圖2所示。由圖2可知,本文提出的基于可變權(quán)重?fù)p失函數(shù)和難例挖掘模塊的Faster R-CNN改進(jìn)算法在數(shù)據(jù)集Pascal VOC 2007和Pascal VOC 07+12上訓(xùn)練所得的檢測效果圖都較原Faster R-CNN算法檢測出了更多的目標(biāo)。
(a) Faster R-CNN檢測結(jié)果圖
(b) 本文改進(jìn)算法檢測結(jié)果圖圖2 原算法與改進(jìn)算法的檢測結(jié)果對比
為了進(jìn)一步驗證本文提出方法的有效性,將Faster R-CNN算法的基礎(chǔ)網(wǎng)絡(luò)VGG-16更換為更深的網(wǎng)絡(luò)ResNet-101,并分別以Pascal VOC2007和Pascal VOC2007+12為訓(xùn)練集,以Pascal VOC2007為測試集,進(jìn)行對比實驗。實驗結(jié)果如表5所示,在Pascal VOC2007數(shù)據(jù)集上訓(xùn)練平均檢測精度提高了1.3個百分點(diǎn);在Pascal VOC2007+12數(shù)據(jù)集上訓(xùn)練平均檢測精度提高了1.5個百分點(diǎn)。
表5 70000次迭代下ResNet-101基礎(chǔ)網(wǎng)絡(luò)下目標(biāo)檢測精度結(jié)果 單位:%
更進(jìn)一步地,圖3給出了采用ResNet-101基礎(chǔ)網(wǎng)絡(luò)時2種算法的檢測結(jié)果對比,由圖3可看出,多目標(biāo)重疊時本文的改進(jìn)算法有著更好的檢測效果。
(a) Faster R-CNN檢測結(jié)果圖
(b) 本文改進(jìn)算法檢測結(jié)果圖圖3 ResNet-101基礎(chǔ)網(wǎng)絡(luò)下檢測結(jié)果對比
基于深度卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法已成為目標(biāo)檢測領(lǐng)域的研究熱點(diǎn)。訓(xùn)練數(shù)據(jù)集中存在的類間不平衡問題和簡單樣本-難分樣本數(shù)量不平衡問題,影響了目標(biāo)檢測算法的性能。本文針對這2個問題,提出了一種基于可變權(quán)重?fù)p失函數(shù)和難例挖掘模塊的Faster R-CNN改進(jìn)算法。本文將改進(jìn)算法與原算法在不同情況下進(jìn)行對比,包括不同數(shù)據(jù)集和采用不同的基礎(chǔ)網(wǎng)絡(luò),實驗結(jié)果表明了本文所提出算法的有效性。后續(xù)將進(jìn)一步研究提升網(wǎng)絡(luò)訓(xùn)練效率和檢測速度的方法[29]。