陽 珊,王 建,胡 莉,劉 波,趙 皓,3
1.西南科技大學(xué) 信息工程學(xué)院,四川 綿陽 621010
2.深圳市朗馳欣創(chuàng)科技股份有限公司,廣東 深圳 518000
3.中國科學(xué)技術(shù)大學(xué) 信息科學(xué)技術(shù)學(xué)院,合肥 230026
目標(biāo)檢測作為計算機視覺中的一項基本任務(wù),以識別給定圖片中存在目標(biāo)的類別和位置為目的,已被廣泛應(yīng)用于各個領(lǐng)域,如人臉檢測、行人檢測、自動駕駛。近年來,隨著深度學(xué)習(xí)技術(shù)的不斷發(fā)展,基于深層卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測方法層出不窮,主流的算法大致可分為兩類:兩階段目標(biāo)檢測器(two-stage)[1-2]和一階段目標(biāo)檢測器(one-stage)[3-4],前者將目標(biāo)檢測任務(wù)分為兩步進行,較后者而言,結(jié)構(gòu)更為復(fù)雜,計算開銷巨大,速度相對較慢,但相應(yīng)的其檢測精度也更高。一階段目標(biāo)檢測器得益于其高實時性,使其更容易在移動終端部署,故越來越多的學(xué)者投身于one-stage目標(biāo)檢測的研究。YOLO[5-6]作為一階段目標(biāo)檢測器的開山鼻祖,將物體檢測看作回歸問題,基于單獨的end-to-end網(wǎng)絡(luò),完成從原始圖像的輸入到物體位置和類別的輸出。隨后SSD[7-8]系列算法的提出,進一步提升了一階段目標(biāo)檢測器的實時性。
不同的網(wǎng)絡(luò)結(jié)構(gòu)提出,使得分類和回歸預(yù)測精度不斷提升,實時性也在不斷提高。事實上,損失函數(shù)對模型的學(xué)習(xí)也至關(guān)重要,在Smooth L1之后,為提高回歸精度,提出了IoU loss[9]、GIoU[10]以及DIoU[11]一系列損失。但對于重疊目標(biāo)場景,無論是網(wǎng)絡(luò)結(jié)構(gòu)還是損失函數(shù),目前的研究都相對較少。目標(biāo)檢測任務(wù)中的重疊可分為兩類:一種是非目標(biāo)物體的遮擋,這類遮擋常見的解決方式為通過增加樣本數(shù)量來提高模型的魯棒性,另一種是目標(biāo)間的遮擋,通常需要提高網(wǎng)絡(luò)模型的辨別能力,對損失函數(shù)或網(wǎng)絡(luò)結(jié)構(gòu)進行針對性改進。
本文針對目標(biāo)密集場景目標(biāo)識別率不高,基于固定經(jīng)驗閾值的NMS算法,導(dǎo)致預(yù)測框不準(zhǔn)確的問題,提出一種改進回歸損失函數(shù)與動態(tài)非極大值抑制的目標(biāo)檢測框架。
RetinaNet[12]作為主流的one-stage目標(biāo)檢測算法,采用ResNet+FPN作為骨干網(wǎng)絡(luò)提取特征,其網(wǎng)絡(luò)部分結(jié)構(gòu)與FPN中提到的結(jié)構(gòu)并不完全一致,它使用特征金字塔的P3、P4、P5、P6、P7,其中前3層與FPN中產(chǎn)生方式一樣,通過上采樣和橫向連接拼接產(chǎn)生,P6在特征層P5上再通過了3×3卷積核卷積得到,而P7則是在P6的基礎(chǔ)上添加RELU激活函數(shù),然后再通過3×3卷積核卷積得到。FPN上選用的Anchor感受野從32×32到512×512,每層之間的長度為兩倍關(guān)系。每層金字塔有9個不同長寬比例和尺寸大小的Anchor,可適應(yīng)不同尺度的目標(biāo)。分類子網(wǎng)絡(luò)和回歸子網(wǎng)絡(luò)的參數(shù)不共享,但網(wǎng)絡(luò)結(jié)構(gòu)相似,都是小型FCN網(wǎng)絡(luò),利用金字塔層作為輸入,連接4個3×3的卷積層,再進行分類和回歸預(yù)測。分類損失函數(shù)是RetinaNet的亮點之一,F(xiàn)ocal Loss基于交叉熵?fù)p失函數(shù)進行改進,減小負(fù)樣本的權(quán)重,提高正樣本的權(quán)重,旨在解決類別不平衡的問題,取得了不錯的檢測效果。
遮擋對目標(biāo)檢測器存在兩個方面影響:第一,非目標(biāo)物體對目標(biāo)的遮擋會帶來目標(biāo)信息的缺失,進而導(dǎo)致漏檢;而目標(biāo)之間的相互遮擋,往往會引入大量的干擾信息,導(dǎo)致虛檢。第二,重疊使模型對NMS的閾值選取更為敏感,如圖1所示,目標(biāo)周圍存在大量其他同類別目標(biāo)時,其預(yù)測框的回歸會向其他目標(biāo)偏移,導(dǎo)致目標(biāo)的預(yù)測框定位不準(zhǔn)確,且如果NMS閾值選取過小,周圍的預(yù)測框?qū)⒈贿^濾掉,但該框又是正確的預(yù)測,NMS閾值選取過大,會帶來更多的虛檢。針對以上兩個問題,本文基于RetinaNet目標(biāo)檢測框架,從回歸定位損失函數(shù)和非極大值抑制后處理算法兩個方面進行改進,提出D-RetinaNet,利用結(jié)合排斥因子Rep的GIoUloss替換SmoothL1回歸損失函數(shù),降低候選邊框向鄰近真值偏移概率。并在回歸子網(wǎng)絡(luò)最后一層添加一個同步的density預(yù)測Head,并將預(yù)測值作為NMS方法的動態(tài)閾值,可有效緩解目標(biāo)之間的相互遮擋導(dǎo)致模型學(xué)習(xí)不準(zhǔn)確的問題。
圖1 遮擋示意圖Fig.1 Sketch of occluded target
RetinaNet原文采用Smooth L1回歸損失函數(shù),雖取得了不錯的效果,但Smooth L1將邊界框的四個坐標(biāo)值獨立地進行損失計算,并簡單相加,忽視了坐標(biāo)值之間的關(guān)聯(lián)性。并且實際評價框的指標(biāo)是計算預(yù)測框與真值框的IoU,具有相同大小Smooth L1(x)損失的多個檢測框,IoU差異可能很大,如圖2。而IoU Loss可以較好地改善這一點,但它也存在其他缺點,比如預(yù)測框和目標(biāo)框相離時IoU損失值為0,無法對預(yù)測框進行優(yōu)化。此外,兩框相交面積相等時,損失值相同,無法判斷預(yù)測框和目標(biāo)框的相交情況。因此無法準(zhǔn)確衡量定位信息,可能降低模型的檢測性能。
圖2 損失值對比圖Fig.2 Diagram of comparative analysis of loss
針對上述問題,使模型更能適應(yīng)Anchor Box比例分布不均的情況,采用GIoU損失作為邊界框回歸預(yù)測的損失函數(shù),GIoU計算示意圖見圖3,計算式如式(1)、(2):
圖3 GIoU示意圖Fig.3 Sketch map of GIoU
A、B分別代表兩個錨框和目標(biāo)框,C代表可同時覆蓋A、B的最小矩形。通過計算C中沒有覆蓋A和B的面積占整個C總面積的比值,再用A與B的IoU減去這個比值,得到GIOU。
同時為提高模型對遮擋物體的檢測性能,在GIoU Loss基礎(chǔ)上加入一項排斥因子[13],用于增大預(yù)測框與周圍其他目標(biāo)框間的距離,防止預(yù)測框向其他目標(biāo)框回歸。排斥因子定義如式(3)~(6),這里預(yù)測框和其他目標(biāo)框的度量距離不使用IoU,避免預(yù)測框足夠大時,導(dǎo)致?lián)p失值下降。
針對后處理算法NMS的過濾閾值單一,難以適應(yīng)樣本多變的場景,在回歸分支最后一層增加一個密度預(yù)測分支,用于預(yù)測目標(biāo)間的遮擋程度[14],將預(yù)測的密度值應(yīng)用到NMS中,提高它的辨別能力,使其可自適應(yīng)復(fù)雜多變的場景,減少假陽性和漏檢,提高檢測精度[15]。該分支的結(jié)構(gòu)簡單,與回歸分支共享網(wǎng)絡(luò)參數(shù),僅在回歸子網(wǎng)絡(luò)最后一層添加一個同步的density預(yù)測Head,由3×3卷積核和sigmoid激活層構(gòu)成,幾乎不增加網(wǎng)絡(luò)的參數(shù)量,能保證模型訓(xùn)練速度,網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.4 Schematic diagram of network structure
對每個位置預(yù)測密度,通過計算與目標(biāo)框G與周圍其他目標(biāo)框的IoU,取最大的IoU值對預(yù)測值進行監(jiān)督,式(8)為NMS算法閾值計算方式。密度估計損失函數(shù)選用簡單的smoothl1損失,如式(9),將其看作回歸任務(wù)進行學(xué)習(xí)。
圖5為使用密度d作為非極大值抑制的篩選閾值和傳統(tǒng)算法閾值的對比,可以看出D-NMS隨著迭代次數(shù)變化不斷調(diào)整閾值,而傳統(tǒng)NMS閾值始終保持不變。輸入圖片各個位置的目標(biāo)重疊程度不同,不斷調(diào)整的閾值顯然更能適應(yīng)場景的多變。
圖5 不同NMS方法閾值變化圖Fig.5 Threshold changes of different NMS methods
本實驗在PASCAL VOC和自制建筑垃圾數(shù)據(jù)集上進行訓(xùn)練和測試。PASCAL采用VOC07+12(train+val)訓(xùn)練進行,測試集采用VOC07 test。自制數(shù)據(jù)集利用Intel Real Sense采集到130張原始圖片,通過翻轉(zhuǎn)、添加噪聲、Mixup和Random Erase的方式對原始圖像進行增廣,最后得到847張圖片,增廣后的圖片如圖6所示。
圖6 數(shù)據(jù)集增廣效果圖Fig.6 Data augumention
并參照VOC的標(biāo)注格式,利用LabelImg標(biāo)注軟件進行標(biāo)簽標(biāo)記,數(shù)據(jù)集劃分為訓(xùn)練集542張,驗證集135張和測試集170張。由于建筑垃圾部分類別差距十分小,拆卸后的磚塊顏色和形狀與木材非常相似,容易混淆。將其分為3個類別,包括Plastic、Wood、Concrete。建筑垃圾存在大量長條狀的木材和塑料等,導(dǎo)致模型對垃圾的定位效果不高,故數(shù)據(jù)處理時,利用K-means方法對數(shù)據(jù)集中的先驗框聚類[16],分別得到三組長寬比和縮放比用于生成Anchor box。
本文采用mAP(mean average precision)評估網(wǎng)絡(luò)模型檢測性能,計算公式如下:
其中,C表示數(shù)據(jù)集類別數(shù),c表示某一類別,Recall表示召回率,表示樣本中的正樣本有多少被預(yù)測正確了,Precision為精確度,表示預(yù)測為正的樣本中有多少是真正的正樣本。TP則為正樣本被分為正的數(shù)量,F(xiàn)N為把正樣本錯誤地預(yù)測為負(fù)的數(shù)量,F(xiàn)P表示把負(fù)樣本錯誤地預(yù)測為正的數(shù)量。故TP+FN為全部正樣本數(shù)量,TP+FP為全部被分為正樣本的數(shù)量。
TP和FP根據(jù)IoU(intersetion over union)閾值定義,TP為與真值框IoU大于該閾值的預(yù)測,反之則為FP。IoU計算公式如下:
對比表1分析可知,替換損失函數(shù)為Rep-GIoU Loss,利用預(yù)測的密度引導(dǎo)NMS后,在PASCAL VOC上本文算法平均準(zhǔn)確率可達到82.9%,比RetinaNet提高1.3個百分點,且檢測速度幾乎不變。對比SSD和YOLOv3,檢測精度分別提高6.1個百分點和4.2個百分點。FCOS作為Anchor-free目標(biāo)檢測方法可達到79.1%準(zhǔn)確率,高性能目標(biāo)檢測器EfficientDet[17]準(zhǔn)確率為78.9%,都低于本文提出方法準(zhǔn)確率。
表1 不同目標(biāo)檢測算法對比Table 1 Comparison of different target detection algorithms
對比分析表2可以看出,改進后的D-RetinaNet各類別目標(biāo)檢測精度都有提升,包括部分小目標(biāo)類別(如bird、Aeroplane)。表3對大中小目標(biāo)檢測效果進行對比,PASCAL VOC數(shù)據(jù)集中較多的類別不存在小目標(biāo),中、大目標(biāo)占比更大,可以看出各尺度目標(biāo)檢測精度都有提升,改進后的小目標(biāo)mAP提高了0.8個百分點。
表2 各個類別的AP對比Table 2 AP for each category %
表3 不同尺度目標(biāo)檢測精度對比Table 3 Comparison of different scale objects %
對比分析表4可得,相比傳統(tǒng)的NMS算法,本文提出的Density-NMS提高了1.3個百分點,可達到與Soft-NMS[18]相當(dāng)?shù)臏?zhǔn)確率。但Soft-NMS犧牲了邊界框的高置信度,在保留更多真陽性預(yù)測框的同時也保留了更多的假陽性預(yù)測框。總體來看,本文算法的綜合性能是最優(yōu)的。
表4 不同NMS算法對比Table 4 Comparison of different NMS algorithms
同時,本文在自制建筑垃圾數(shù)據(jù)集上對比了Retina-Net和改進后算法,檢測結(jié)果如表5。RetinaNet模型可達到92.3%的準(zhǔn)確率,而改進后的D-RetinaNet可達到95.1%,提高了2.8個百分點。
表5 自制數(shù)據(jù)集效果對比Table 5 Comparison of self-made data sets
表6對每個模塊的貢獻進行了分析,可以看出改進后的GIoU損失的引入,將模型的平均準(zhǔn)確率提高了2.5個百分點,將模型的平均準(zhǔn)確率提高了2.5個百分點,同時Density_NMS的加入也進一步提高了檢測準(zhǔn)確率,最終可達到95.1%準(zhǔn)確率。檢測效果如圖7所示。由檢測圖可以看出,被遮擋目標(biāo)的檢測效果有所提高,且對小目標(biāo)的識別效果也不錯。
圖7 檢測結(jié)果對比圖Fig.7 Comparison of detect results
表6 各模塊貢獻Table 6 Contribution of each module
全部實驗運行環(huán)境為Ubuntu系統(tǒng),顯存為24 GB,GPU為NVIDIA GeForce GTX TiTan X,利用CUDA10.1和CUDNNv7.6.5,加快GPU運算,編譯器為Pycharm。
在模型訓(xùn)練中,Smooth Ln(x)中的常參數(shù)σ設(shè)置為0.5,類別置信度閾值為0.3,損失函數(shù)中α設(shè)置為0.5,訓(xùn)練效果最好。IoU人工設(shè)定閾值為0.45,初始學(xué)習(xí)率為0.01,權(quán)重衰減為0.005,預(yù)防數(shù)據(jù)過擬合。選擇SGD優(yōu)化器優(yōu)化模型,Batch_size為12,損失最小為0.18和0.22。
本文提出D-RetinaNet檢測算法,在保證了檢測速度幾乎不變的同時,提高了RetinaNet算法對遮擋目標(biāo)的檢測性能?;贕IoU loss添加排斥因子Rep,加強網(wǎng)絡(luò)模型對遮擋目標(biāo)的學(xué)習(xí),提高了模型的識別能力。Density預(yù)測模塊的構(gòu)建不僅提高了后處理算法NMS的辨別能力,提高檢測器的檢測性能,使更多的準(zhǔn)確預(yù)測框得以保留。同時可輔助回歸分支更好地完成回歸任務(wù)。實驗結(jié)果表明,D-RetinaNet在PASCAL VOC和自制數(shù)據(jù)集上的平均精度較RetinaNet分別提高了1.3個百分點和2.8個百分點。其中遮擋目標(biāo)的精度提升更為顯著,驗證了改進GIoU loss和密度預(yù)測模塊的有效性。目前損失函數(shù)更傾向于回歸得到一個相對較大的檢測框,將來會針對該問題進一步研究,獲得更加貼合的預(yù)測框。