鄭欽浩,楊 貞,楊 振
(1.江西科技師范大學(xué)通信與電子學(xué)院,江西 南昌 330000; 2.麥格納汽車系統(tǒng)(蘇州)有限公司,江蘇 蘇州 215026)
近年來隨著人工智能技術(shù)的迅速發(fā)展,自動駕駛技術(shù)[1]將廣泛應(yīng)用于真實交通場景,車輛和行人檢測作為自動駕駛技術(shù)的重要組成部分,也將成為計算機(jī)視覺領(lǐng)域的熱門研究方向。迄今,目標(biāo)檢測方法的發(fā)展一般劃分為2個階段:1)傳統(tǒng)機(jī)器學(xué)習(xí)方法階段;2)深度學(xué)習(xí)方法階段[2-3]。傳統(tǒng)機(jī)器學(xué)習(xí)方法首先需對圖像進(jìn)行預(yù)處理;然后通過窗口滑動技術(shù)確定候選區(qū)域;接著對候選區(qū)域進(jìn)行特征提取,如:尺度不變特征變換特征[4](Scale Invariant Feature Transform,SIFT)、方向梯度直方圖特征[5](Histogram of Oriented Gradient,HOG)、哈爾特征[6](Harr)、加速魯棒特征[7](Speeded Up Robust Feature,SURF)等;最后利用分類器判定目標(biāo)的類別信息以實現(xiàn)目標(biāo)檢測功能。然而,上述傳統(tǒng)機(jī)器學(xué)習(xí)方法存在2個顯著的缺陷:1)特征均是基于手工設(shè)計的,泛化能力較差,難以適應(yīng)不同場景的檢測任務(wù);2)滑動窗口方法會生成過多冗余的候選窗口,加之特征提取的過程過于復(fù)雜,將導(dǎo)致檢測速度慢,難以在實際應(yīng)用中落地。因而,早期的目標(biāo)檢測技術(shù)發(fā)展進(jìn)程緩慢,精度提升有限。
2012年,Krizhevsky等人[8]首次將卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)應(yīng)用于ILSVRC[9](ImageNet Large Scale Visual Recognition Challenge)中,所訓(xùn)練的深度卷積網(wǎng)絡(luò)模型AlexNet在圖像分類和目標(biāo)檢測任務(wù)中的準(zhǔn)確率均位于第一名?;诖耍繕?biāo)檢測技術(shù)得到快速的發(fā)展,并涌現(xiàn)出大量優(yōu)秀方法。總體上,目前基于深度卷積網(wǎng)絡(luò)的目標(biāo)檢測方法可以分為2個分支:基于Two-Stage的檢測方法和基于Single-Stage的檢測方法。R-CNN[10]是基于深度卷積網(wǎng)絡(luò)的Two-Stage目標(biāo)檢測器,其使用選擇性搜索算法[11](Selective Search,SS)生成2000個左右的候選框并逐一輸入到深度網(wǎng)絡(luò)中;然后,在基礎(chǔ)網(wǎng)絡(luò)之后接入SVM進(jìn)行分類,同時接入邊框回歸以生成更加精確的物體邊框。雖然相對于傳統(tǒng)方法,R-CNN極大地提高了準(zhǔn)確率,但由于沒有考慮特征的共享計算,其計算效率非常低。因此,在R-CNN的基礎(chǔ)上,SPP-Net[12]和Fast R-CNN[13]使用共享計算的方法對R-CNN進(jìn)行加速,同時利用空間金字塔池化(Spatial Pyramid Pooling)和感興趣區(qū)域池化(RoI Pooling)替代全連接層以解決深度網(wǎng)絡(luò)需要固定輸入圖片大小的問題。但是上述2種方法的訓(xùn)練和測試速度均較慢,無法滿足實時性的需求。在此基礎(chǔ)上,F(xiàn)aster R-CNN[14]做了更進(jìn)一步的改進(jìn),提出Anchor的思想,并使用區(qū)域提取網(wǎng)絡(luò)(Regional Proposal Network,RPN)替代選擇性搜索算法生成候選框。在區(qū)域提取網(wǎng)絡(luò)中,F(xiàn)aster R-CNN會對候選框進(jìn)行二分類(正樣本和負(fù)樣本)以去除大部分負(fù)樣本,避免造成類別不平衡問題,接著對候選框進(jìn)行初步調(diào)整,以備在RoI Pooling之后完成邊框的二次調(diào)整。Two-Stage方法的優(yōu)點是檢測精度高,缺點是速度太慢。考慮到目標(biāo)檢測效率的因素,Single-Stage方法隨后被提出,其代表方法是YOLO[15]和 SSD(單次檢測器)[16]。YOLO使用卷積神經(jīng)網(wǎng)絡(luò)最頂層的特征圖預(yù)測類別置信度和邊框偏置,將檢測問題作為回歸問題進(jìn)行處理,具有檢測速度快的優(yōu)點。然而,YOLO使用了全連接層,這會導(dǎo)致空間信息丟失、定位錯誤和目標(biāo)漏檢等問題,尤其對小目標(biāo)的檢測效果較差,影響最終的檢測精度。SSD借用Faster R-CNN中的Anchor思想,并且使用多個不同尺度的特征圖進(jìn)行檢測,由于各個特征圖的感受野不同,所以SSD可以很好地適應(yīng)不同大小目標(biāo)的檢測。但是SSD的先驗框大小是人為手工設(shè)定的,沒有通過學(xué)習(xí)獲得自適應(yīng)參數(shù),因此不能很好地適應(yīng)復(fù)雜場景下的目標(biāo)檢測任務(wù)。此外,由于淺層特征圖的語義信息較差,因此SSD對小目標(biāo)的檢測效果并不理想。針對上述SSD存在的問題,本文引入K-means++聚類算法以獲得自適應(yīng)參數(shù),同時,設(shè)計高效特征融合模塊以增強淺層特征圖的語義信息。
SSD的基礎(chǔ)網(wǎng)絡(luò)是VGG16[17](最后2個全連接層改為卷積層)。為了獲取更大的感受野,SSD在基礎(chǔ)網(wǎng)絡(luò)后再添加4個卷積層,這4個卷積層由1×1卷積核和3×3卷積核組合生成,最后在每個檢測層的后面接入2個卷積預(yù)測器,其中一個負(fù)責(zé)輸出類別(前景+背景)置信度,另一個負(fù)責(zé)邊框回歸。SSD的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 SSD的網(wǎng)絡(luò)結(jié)構(gòu)
SSD首先對圖片進(jìn)行預(yù)處理,其輸入的圖片大小為300×300×3;然后提取基礎(chǔ)網(wǎng)絡(luò)中的Conv4_3和Conv7作為用于直接檢測的特征圖;最后提取額外卷積層中的Conv8_2、Conv9_2、Conv10_2和Conv11_2作為用于直接檢測的特征圖。由于SSD使用了多尺度特征圖,且每一層用于檢測的特征圖具有不同的大小,所以其方法可以很好地兼顧圖片中可能出現(xiàn)的各種大小的物體??傊?,SSD每一層特征圖具有不同大小的感受野,因此,低層特征圖可用于小目標(biāo)檢測,高層特征圖可用于大目標(biāo)檢測。
SSD為每個特征圖設(shè)計了不同數(shù)量、尺度和寬高比例的先驗框,這些先驗框為一系列由一定規(guī)則生成的固定數(shù)量和大小的目標(biāo)框組成。先驗框的具體大小是由尺度和寬高比例決定的,且每一層特征圖對應(yīng)著一個尺度,尺度的生成方法如式(1):
(1)
其中,sk表示第k個特征圖中先驗框的尺度,smin為0.2,smax為0.9,m表示用于檢測的特征圖個數(shù),在SSD中,m的值為6。每一層特征圖上的每個網(wǎng)格都需要設(shè)定不同數(shù)量和大小的先驗框;Conv4_3、Conv10_2、Conv11_2這3層特征圖上的每一個網(wǎng)格產(chǎn)生4個先驗框,寬高比例ar1取{1,2,1/2};Conv7、Conv8_2、Conv9_2這3層特征圖上的每一個網(wǎng)格產(chǎn)生6個先驗框,ar2寬高比例取{1,2,1/2,3,1/3}。在確定尺度和寬高比之后,先驗框大小可由式(2)和式(3)得出。
(2)
(3)
(4)
在SSD中,第1個檢測層的先驗框數(shù)量為38×38×4=5776,第2層為19×19×6=2166,第3層為10×10×6=600,第4層為5×5×6=150,第5層為3×3×4=36,第6層為1×1×4=4,網(wǎng)絡(luò)總計會輸出8732個先驗框。
SSD的正負(fù)樣本生成規(guī)則是先計算每個真實框與所有先驗框的IOU(Intersection Over Union),取二者IOU值最大的先驗框與真實框進(jìn)行匹配;對于其余未匹配到的先驗框,當(dāng)二者之間的IOU超過閾值0.5時,將該先驗框與真實框進(jìn)行匹配。若存在某個先驗框與所有真實框的IOU均超過0.5時,此時取IOU最大的真實框與該先驗框進(jìn)行匹配。將與真實框匹配的先驗框設(shè)置為正樣本,未匹配到的為負(fù)樣本。由于網(wǎng)絡(luò)在執(zhí)行前向計算時,會生成8732個先驗框,其中大部分都是負(fù)樣本。因此,這將引發(fā)正負(fù)樣本不平衡問題,導(dǎo)致在計算Loss的時候,負(fù)樣本占據(jù)極大比重,從而使模型難以收斂。所以在進(jìn)行匹配之后,使用困難樣例挖掘策略將正負(fù)樣本比例控制在1:3,最后輸入到網(wǎng)絡(luò)中進(jìn)行訓(xùn)練。
與常用的目標(biāo)檢測損失函數(shù)一樣,SSD的損失函數(shù)由分類損失和位置損失2個部分組成,如式(5):
(5)
其中,x為預(yù)測框與不同類別的真實框的匹配結(jié)果;c為預(yù)測框的類別置信度信息;l為預(yù)測框的位置信息;g為真實框的位置信息;N表示匹配到的先驗框數(shù)量,當(dāng)N=0時,總損失為0;α為權(quán)重系數(shù);Lloc(x,l,g)為位置損失;Lconf(x,c)為分類損失。位置損失為預(yù)測框與真實框之間的Smooth L1 Loss,如式(6):
(6)
(7)
(8)
(9)
(10)
分類損失使用經(jīng)典的Softmax Loss,如式(11):
(11)
由于SSD的先驗框?qū)捀弑壤且揽咳斯そ?jīng)驗手動設(shè)定的,因此不適用于復(fù)雜場景下的車輛和行人檢測任務(wù)。針對這一問題,本文在SSD的基礎(chǔ)上,引入K-means++聚類算法[18]對Anchor的寬高比例進(jìn)行自適應(yīng)學(xué)習(xí),算法流程如算法1所示。
算法1K-means++聚類算法流程
輸入:KITTI數(shù)據(jù)集中所有歸一化后真實框?qū)捀弑冉M成的集合S,聚類中心數(shù)K
過程:
1:從S中隨機(jī)選擇一個向量作為第一個聚類中心
2:計算S中的每個向量到所有聚類中心的距離和D(X),基于D(X)使用線性概率挑選出下一個聚類中心
3:重復(fù)步驟1~步驟2直到找到所有的聚類中心
4:計算每個向量到每個聚類中心的歐氏距離
5:把每個向量分配到歐氏距離最小的聚類中心簇,生成K個簇
6:重新計算每個簇的聚類中心
7:重復(fù)步驟5~步驟6,直到每個聚類中心不再變化
輸出:K個歸一化后真實框?qū)捀弑鹊木垲愔行?/p>
SSD的不同特征圖網(wǎng)格會生成不同數(shù)量的先驗框。基于此,本文將K的值設(shè)置為4和6,然后將KITTI數(shù)據(jù)集中的真實框原始寬高除以圖片寬度以進(jìn)行歸一化,接著將歸一化的寬高結(jié)果作為K-means++聚類算法的輸入,最后輸出聚類中心。在訓(xùn)練和測試的時候,KM-SSD會執(zhí)行2次K-means++聚類算法,再使用輸出的聚類中心結(jié)果計算出最終的先驗框大小,如式(12)和式(13):
(12)
(13)
SSD方法在小目標(biāo)檢測上的精度較差,這是由于小目標(biāo)檢測受限于信息量少導(dǎo)致的。針對此問題,本文對SSD的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行改進(jìn),使低層特征圖得到高層特征圖的上下文信息輔助,圖2展示了KM-SSD的網(wǎng)絡(luò)結(jié)構(gòu)。
圖2 KM-SSD的網(wǎng)絡(luò)結(jié)構(gòu)
受Feature-fused SSD[19]的啟發(fā),本文尋求一種高效的特征融合方法以求在保持SSD速度快的優(yōu)勢基礎(chǔ)上提升其精度,避免類似DSSD[20]將大量特征融合從而導(dǎo)致速度驟降的問題。所以針對Conv4_3的特征表達(dá)能力不足的問題,本文設(shè)計一個高效的特征融合模塊(Mergence Module),將Conv5_3與Conv4_3的特征圖融合在一起,從而加強融合后的特征圖的表征能力以改進(jìn)分類性能。由于Conv5_3的尺寸為19×19×512,所以需要使用上采樣,將Conv5_3的尺寸放大一倍以同Conv4_3的尺寸保持一致。為了盡可能降低過多的模型參數(shù)量對模型速度的影響,本文在對Conv5_3進(jìn)行上采樣的時候,用雙線性插值替代反卷積核以減少模型參數(shù)量,特征融合模塊如圖3所示。
圖3 特征融合模塊
與使用Conv-BN[21]-ReLU組合塊的方法不同,本文設(shè)計了Conv-ReLU-L2 Norm組合塊,并且沒有進(jìn)行過多的融合計算,僅對需要融合的2層特征圖進(jìn)行一次融合計算。具體做法是將Conv4_3和Conv5_3(通過雙線性插值完成上采樣)分別作為2個Conv-ReLU-L2 Norm組合塊的輸入,再將二者的輸出結(jié)果進(jìn)行元素求和,最后直接將融合后的特征圖替代原來的Conv4_3用于目標(biāo)檢測任務(wù)中。
KITTI數(shù)據(jù)集[22]是目前自動駕駛領(lǐng)域中最重要的數(shù)據(jù)集之一,由德國卡爾斯魯厄理工學(xué)院和豐田美國技術(shù)研究院聯(lián)合構(gòu)建。KITTI數(shù)據(jù)集的圖片采集場景包括市區(qū)、鄉(xiāng)村和高速公路,每張圖像中最多達(dá)15輛車和30個行人,還有各種程度的遮擋與截斷。因此,本文選擇在KITTI數(shù)據(jù)集上進(jìn)行車輛和行人檢測實驗。由于官方僅提供訓(xùn)練集的標(biāo)注文件,所以需要將原來的訓(xùn)練集劃分為訓(xùn)練集和測試集,本文的訓(xùn)練集和測試集的劃分比例為9:1。KITTI原來的訓(xùn)練集有7481張圖片,包含8個類別標(biāo)簽,本文保留其中的5個類別標(biāo)簽,即:Car、Van、Truck、Tram和Pedestrian。接著通過格式轉(zhuǎn)換代碼將原來的KITTI數(shù)據(jù)集標(biāo)注格式轉(zhuǎn)化為SSD所需要的VOC格式,即把原來的txt格式的標(biāo)注文件轉(zhuǎn)化為xml格式。最后根據(jù)Pascal VOC數(shù)據(jù)集[23]的要求,將相關(guān)的文件存放到Annotations、ImageSets和JPEGImages這3個文件夾中。
劃分好的訓(xùn)練集和測試集中的各類別數(shù)量如圖4所示。
圖4 數(shù)據(jù)集中的各類別數(shù)量
本文實驗的硬件詳細(xì)配置如下:計算機(jī)的CPU為Intel(R)Core(TM)i7-8700,CPU的頻率為3.20 GHz,內(nèi)存為8 GB,顯卡型號為NVIDIA GeForce GTX 1050 Ti。軟件環(huán)境為基于64位的Windows 10操作系統(tǒng),深度學(xué)習(xí)框架使用Pytorch 0.4.1,并行計算框架為CUDA 9.0,深度神經(jīng)網(wǎng)絡(luò)加速庫為cuDNN v7.3.1。
在進(jìn)行訓(xùn)練的時候,本文將初始學(xué)習(xí)率設(shè)置為0.0001。由于顯存受限,本文將batch_size設(shè)定為12,這對最終的模型精度會造成一定的影響。
在推理的過程中,設(shè)定置信度過濾閾值為0.01,這樣可以濾除大部分無效框。接著使用非極大值抑制消除屬于同一類別的同一目標(biāo)重復(fù)框,具體的做法如下:
1)將目標(biāo)框的置信度得分按照類別進(jìn)行排序,保留置信度得分最高的目標(biāo)框。
2)對其余的目標(biāo)框進(jìn)行遍歷,如果存在某一目標(biāo)框與最高置信度得分的目標(biāo)框的IOU超過設(shè)置的閾值,則舍棄該目標(biāo)框。
3)重復(fù)步驟1和步驟2,直到處理完所有的目標(biāo)框。
TP(True Positive)、FP(False Positive)、FN(False Negative)、IOU、Precision(準(zhǔn)確率)、Recall(召回率)、P-R曲線(準(zhǔn)確率-召回率曲線)、AP(Average Precision)、mAP是幾個關(guān)于目標(biāo)檢測性能評價的重要概念。TP表示預(yù)測正確的目標(biāo)框數(shù)量。FP表示預(yù)測錯誤的目標(biāo)框數(shù)量。FN表示漏檢的真實框(Ground Truth)數(shù)量。IOU表示目標(biāo)框和真實框的交疊率,即二者的交集和并集的比值,在SSD中,IOU也被稱為Jaccard。Precision表示預(yù)測正確的目標(biāo)框在全部預(yù)測框中所占的比例。Recall表示預(yù)測正確的目標(biāo)框在全部真實框中所占的比例。P-R曲線表示Precision與Recall之間的關(guān)系,雙方是一對矛盾的性能度量,一般會出現(xiàn)當(dāng)一方升高或降低的時候,另一方就會相應(yīng)地降低或升高。AP表示平均精確度(P-R曲線所形成的面積),根據(jù)P-R曲線上的Precision求平均值得出。mAP是每個類別AP的平均值,也是目前目標(biāo)檢測領(lǐng)域最常用的性能度量。其中Precision、Recall、AP、mAP的計算方法如式(14)~式(17):
(14)
(15)
(16)
(17)
基于劃分好的KITTI數(shù)據(jù)集,本文將SSD和KM-SSD在mAP和平均檢測時間上進(jìn)行了比較。如表1所示,SSD的mAP是62.7%,平均檢測時間為0.162 s。KM-SSD的mAP是69.8%,平均檢測時間為0.133 s。本文提出的KM-SSD方法不僅將SSD的mAP提高7.1個百分點,更將SSD的平均檢測時間降低了0.029 s。
表1 mAP和平均檢測時間比較
圖5為SSD和KM-SSD在各訓(xùn)練迭代次數(shù)下的mAP對比,可以看到,在前25000次迭代中,SSD在mAP上始終超過KM-SSD;在25000次迭代后,KM-SSD在mAP上始終超過SSD;在85000次迭代后,這2種方法都逐漸收斂。
圖5 各訓(xùn)練迭代次數(shù)下的mAP對比
圖6是真實框與檢測結(jié)果對比,可以看到,SSD在遠(yuǎn)距離下的車輛目標(biāo)檢測效果不好,存在漏檢的問題,而本文提出的KM-SSD方法檢測到了全部目標(biāo)。
(a)真實框結(jié)果
圖7是密集場景下的真實框與檢測結(jié)果對比,可以看到,SSD在密集場景下的車輛目標(biāo)檢測效果不好,存在漏檢的問題,而本文提出的KM-SSD方法檢測到了大部分目標(biāo)。
(a)真實框結(jié)果
從實驗結(jié)果可以得出,本文使用的K-means++聚類算法可以為后續(xù)邊框回歸提供好的初始條件,從而提升了目標(biāo)的定位精度。本文設(shè)計的特征融合模塊可以有效增強SSD淺層特征圖的語義信息,從而提升了遠(yuǎn)處車輛目標(biāo)的檢測效果,同時改善了SSD在密集場景下的車輛目標(biāo)漏檢問題。此外,由于特征融合模塊使用雙線性插值替代反卷積核進(jìn)而減少了不必要的模型參數(shù)量,因此KM-SSD不僅使SSD的準(zhǔn)確度得到大幅度的提升,更提高了SSD的檢測速度,可見本文所使用的K-means++聚類算法的有效性和特征融合方法的高效性。
本文通過K-means++聚類算法和特征融合方法改進(jìn)SSD,并在KITTI數(shù)據(jù)集上進(jìn)行了車輛和行人檢測實驗。實驗結(jié)果表明,本文提出的KM-SSD方法不僅在mAP上相對于SSD提升了7.1個百分點,而且在檢測速度上大幅度超過SSD,從而驗證了本文設(shè)計的特征融合模塊的高效性,可為今后的特征融合方法帶來一定的啟發(fā)。此外,本文應(yīng)用到改進(jìn)SSD的K-means++聚類算法也可被其它的目標(biāo)檢測方法借鑒。由于目前實驗的硬件條件有限,本文沒有在SSD的基礎(chǔ)網(wǎng)絡(luò)上做進(jìn)一步的實驗,比如使用ResNet[24]或DenseNet[25]等更深的網(wǎng)絡(luò)替換原來的VGG16,這是后期需要研究的地方。此外,將本文提出的KM-SSD方法在Pascal VOC數(shù)據(jù)集和MS COCO數(shù)據(jù)集[26]上進(jìn)行驗證也是今后的進(jìn)一步工作。