霍愛清,楊玉艷,謝國坤
(1.西安石油大學 電子工程學院,陜西 西安 710065; 2.西安交通工程學院 電氣工程學院,陜西 西安 710000)
隨著智能交通的不斷發(fā)展,對車輛目標的實時檢測[1]成為自動駕駛系統(tǒng)中非常重要的一項任務。在深度學習目標檢測算法中[2],目標邊框從無到有以及邊框變化的過程在一定程度上體現(xiàn)了檢測是One-stage還是Two-stage的。Two-stage算法通常精度較高,但速度較慢,例如Faster R-CNN(faster region-convoluntional neural network)[3];One-stage算法將Two-stage算法的兩個階段合二為一,在一個階段里完成目標物體的定位和類別預測,速度一般比Two-stage算法更快,但精度會有所損失,其典型算法如YOLO(you only look once)[4]、SSD(single shot multi box detector)[5]等。
針對車輛目標檢測,胡輝等[6]結合多尺度訓練、可變形位置敏感ROI池化和軟化非極大值抑制算法,提出了基于R-FCN模型的車輛檢測方法,減少了復雜環(huán)境中車輛目標的漏檢率;金宇塵等[7]基于YOLOv2算法融合多尺度特征層信息建立額外檢測特征層,并提出自適應損失函數(shù)與難樣本生成的方法對網(wǎng)絡模型進行訓練,提高了車輛目標檢測的準確率與召回率。基于深度卷積神經(jīng)網(wǎng)絡的算法雖然能夠提升檢測精度,但其復雜度、參數(shù)量以及計算量都隨之增大。Iandola F N等[8]在SqueezeNet網(wǎng)絡設計中通過限制通道數(shù)量,使用1×1卷積核代替3×3卷積核來加深網(wǎng)絡,在ImageNet分類任務中實現(xiàn)了參數(shù)量的大幅減少;Howard A G等[9]提出了滿足移動設備要求的高效模型MobileNets,采用深度可分離卷積構建輕量級網(wǎng)絡,將卷積過程分解為深度卷積、逐點卷積兩部分,實現(xiàn)通道內(nèi)卷積和通道間卷積的分離,達到了減少模型參數(shù)量的目的;劉萬軍等[10]利用深度可分離卷積設計了一種反殘差模塊,有效減少了模型計算量和存儲量。
綜上可知,提升檢測算法的準確性和實時性已不再是難題,而主干特征提取網(wǎng)絡中大量卷積層所導致的參數(shù)量和計算量大的問題是目前難以克服的新難題,并且回歸損失優(yōu)化和IOU(intersection over union)[11]優(yōu)化并不完全等價,無法直接優(yōu)化預測框和真實框之間沒有重疊的部分。為提高模型訓練速度,得到更好的識別度,本文提出一種基于YOLOv3的改進算法,其主要改進包括以下兩點:
(1)對YOLOv3算法的主干特征提取網(wǎng)絡和殘差單元結構進行改進,使用深度可分離卷積代替?zhèn)鹘y(tǒng)卷積后對通道施加注意力機制,并采用更適合訓練深層神經(jīng)網(wǎng)絡的Swish激活函數(shù),使其在增加網(wǎng)絡深度和寬度的同時,減少網(wǎng)絡模型的參數(shù)量和計算量;
(2)為提高目標框回歸的收斂速度和精度,提出引入CIOU(complete intersection over union)損失作為回歸優(yōu)化損失,在一定程度上解決了損失優(yōu)化方向不一致的問題,同時可以降低損失函數(shù)對大誤差離群點的敏感度,使目標框回歸更加穩(wěn)定。
YOLOv3[12]算法是基于YOLO和YOLOv2[13]的改進算法,不同于Faster R-CNN等Two-stage目標檢測算法,它將圖像分割成不同網(wǎng)格,每個網(wǎng)格負責相應的物體,支持多類別目標檢測,能夠在保持精度的情況下達到更快的檢測速度。YOLOv3的網(wǎng)絡結構如圖1所示,是一種端到端的實時目標檢測框架,主要包含Darknet-53特征提取網(wǎng)絡以及多尺度預測網(wǎng)絡。
圖1 YOLOv3網(wǎng)絡結構
Darknet-53網(wǎng)絡包含大量的卷積操作,其主要特點是使用了殘差單元Residual Block[14],通過引入殘差跳躍連接結構,緩解了深度卷積神經(jīng)網(wǎng)絡在加深網(wǎng)絡層數(shù)時帶來的梯度消失等問題。Residual Block中的卷積層交替使用1×1和3×3兩種不同尺寸的卷積核,每一次卷積之后連接均值為0、方差為1的BN(BatchNorm)批歸一化處理層,然后再加入Leaky ReLU(leaky rectified linear unit)激活函數(shù)進行非線性激活。
在預測階段,將Darknet-53特征提取網(wǎng)絡得到的特征層F1、F2和F3分別輸入到多尺度預測網(wǎng)絡中,F(xiàn)3經(jīng)過卷積操作得到粗尺度特征層3,用于檢測大尺度目標;特征層3經(jīng)過上采樣先與F2融合,再經(jīng)過卷積得到中尺度特征層2,用于檢測中尺度目標;特征層2再經(jīng)過上采樣與F1融合卷積,繼而得到細尺度特征層1,用于檢測小尺度目標,這種特征金字塔網(wǎng)絡(feature pyramid network,F(xiàn)PN)[15]結構使算法對不同尺度的目標都能達到較好的預測效果。最后,將3個不同尺度特征層的預測信息進行組合,經(jīng)過非極大抑制(non maximum suppression,NMS)[16]算法得到最終的預測結果。
YOLOv3網(wǎng)絡雖然在檢測精度和速度上已經(jīng)取得了較好的平衡,但其主干特征提取網(wǎng)絡中23層的Residual Block共包含了53個卷積層,在提取特征的同時給整個網(wǎng)絡帶來了龐大的計算量和參數(shù)量。然而普通移動設備中有限的內(nèi)存和計算能力并不能達到YOLOv3網(wǎng)絡檢測的數(shù)據(jù)要求,參數(shù)量的增加給網(wǎng)絡模型移植帶來很大困難,給整個網(wǎng)絡的訓練過程也增加了一定難度。此外,YOLOv3算法主要采用均方誤差損失函數(shù)和二值交叉熵損失函數(shù),其中均方誤差損失在給予大誤差更高權重的同時犧牲掉了其它小誤差數(shù)據(jù)的預測效果,進而降低了模型的檢測精度。
傳統(tǒng)卷積的每一步計算都要考慮所有通道中每一個卷積核,例如,對于一張H×W的圖片,通道數(shù)為3,設定卷積層共4個通道,每個通道包含3個卷積核,每個卷積核的大小為3×3,最終輸出4個特征層。若使用傳統(tǒng)卷積算法,其卷積過程如圖2所示,在不考慮偏置的情況下參數(shù)量為Ntraditional=3×3×3×4=108, 計算量為Ctraditional=H×W×3×3×3×4=108×H×W。
圖2 傳統(tǒng)卷積過程
相比于傳統(tǒng)卷積,深度可分離卷積[17]的卷積過程由深度卷積(depthwise convolution)和逐點卷積(pointwise convolution)兩部分組成,可以極大地壓縮模型參數(shù)量,同時還能保持和傳統(tǒng)卷積相差較小的精度。同樣對于一張通道數(shù)為3的H×W圖片,深度可分離卷積的卷積過程如圖3所示。
在第一部分深度卷積中,一個卷積核負責一個通道,輸入層的通道數(shù)、卷積核數(shù)和卷積后的特征層數(shù)三者保持一致。深度卷積部分的參數(shù)量為Ndepthwise=3×3×3=27, 計算量為Cdepthwise=H×W×3×3×3=27×H×W。 第二部分逐點卷積的運算與傳統(tǒng)卷積非常相似,將深度卷積后的特征層在深度方向上進行加權組合,卷積核尺寸為1×1×M,M為上一層的通道數(shù),最終有幾個卷積核就會輸出幾個新的特征層。逐點卷積部分中涉及的參數(shù)量和計算量分別為Npointwise=1×1×3×4=12,Cpointwise=H×W×1×1×3×4=12×H×W。 經(jīng)過逐點卷積之后,同樣輸出了4個特征層,與傳統(tǒng)卷積的輸出維度相同。深度可分離卷積的總參數(shù)量Nseparable=Ndepthwise+Npointwise=27+12=39, 總計算量為Cseparable=Cdepthwise+Cpointwise=39×H×W。 可以得出,在相同輸入相同輸出的情況下,深度可分離卷積的參數(shù)量和計算量大約是傳統(tǒng)卷積的1/3,能夠有效減少算法的計算成本,提高算法效率。
圖3 深度可分離卷積過程
為解決YOLOv3算法中Darknet-53網(wǎng)絡引起的參數(shù)量大、計算成本高的問題,提出利用深度可分離卷積和注意力機制對殘差單元進行重新設計,并根據(jù)新的殘差單元重新構建主干特征提取網(wǎng)絡結構。其中新殘差單元(new block)的結構如圖4所示。
圖4 New Block結構
New Block在Darknet-53的Residual Block基礎上增添了5×5尺寸的卷積核,交替使用3×3和5×5卷積核以減少殘差單元疊加的層數(shù),并在3×3或5×5卷積層中采用深度可分離卷積代替普通卷積,以減少模型參數(shù)量和計算量。為解決深度可分離卷積減少參數(shù)量的同時存在一定程度的提取特征不精細的問題,在3×3或5×5深度可分離卷積后對通道施加一次注意力機制。先進行全局平均池化,然后依次進行通道數(shù)較小和通道數(shù)較大的1×1卷積,分別用來壓縮特征和拓張?zhí)卣鳎笤侔褍纱尉矸e后的結果與深度可分離卷積后的特征層相乘。完成注意力機制的施加后再進行1×1卷積降維,并與New Block原始輸入的特征進行相加,得到New Block的輸出結果。同時,New Block將BatchNorm層后的Leaky ReLU激活函數(shù)全部替換成Swish激活函數(shù)[18],其函數(shù)構成如式(1)所示
(1)
式(1)中β為訓練中可調(diào)節(jié)的參數(shù),當β=0時,Swish函數(shù)變?yōu)榫€性函數(shù)f(x)=0.5x; 當β→±∞時,σ(x)=(1+e-β x)-1為0或1,Swish函數(shù)變?yōu)镽eLU函數(shù)f(x)=max(0,x)。 所以,Swish函數(shù)是介于線性函數(shù)與ReLU函數(shù)之間的平滑函數(shù),其效果優(yōu)于ReLU和Leaky ReLU函數(shù),更適合訓練深層神經(jīng)網(wǎng)絡。
圖5為改進后的新主干特征提取網(wǎng)絡,包含16層New Block,相比原YOLOv3中23層Residual Block,共減少了7層。由于YOLOv3的Darknet-53特征提取網(wǎng)絡輸出F1、F2、F3這3個特征層作為多尺度預測網(wǎng)絡的輸入,這3個特征層分別是輸入圖片長和寬壓縮3次、4次、5次的結果,因此在網(wǎng)絡改進中,需要先找出新主干特征提取網(wǎng)絡里輸入圖片長和寬壓縮3次、4次、5次的有效特征層。由圖5可知,輸入圖片長和寬壓縮3次的結果即為Block3的輸出,將其作為特征提取網(wǎng)絡的第一層輸出F1;Block4的輸出為長和寬壓縮4次的結果,由于Block5的步長為1,為了加深網(wǎng)絡深度獲得更好的特征層,將Block4與Block5合并,作為特征提取網(wǎng)絡的第二層輸出F2;同理,將Block6與Block7合并,作為特征提取網(wǎng)絡的第三層輸出F3。
圖5 新主干特征提取網(wǎng)絡結構
在采用新主干特征提取網(wǎng)絡的同時,保留原YOLOv3特征金字塔結構的多尺度預測網(wǎng)絡,得到改進后的YOLOv3網(wǎng)絡結構如圖6所示。利用新主干特征提取網(wǎng)絡增加網(wǎng)絡深度和寬度后,將特征提取網(wǎng)絡輸出的3個有效特征層輸入到特征金字塔網(wǎng)絡中,通過兩次上采樣與淺層特征融合分別進行預測,再利用多個1×1卷積來幫助降維,使網(wǎng)絡能夠準確預測出不同尺度的目標。
圖6 改進后的YOLOv3網(wǎng)絡結構
YOLOv3算法的損失函數(shù)組成如式(2)所示,主要體現(xiàn)在對目標框的坐標、置信度和分類類別3個方面的衡量
(2)
在目標框回歸過程中,YOLOv3采用均方誤差(mean square error,MSE)損失函數(shù),MSE函數(shù)連續(xù)且處處可導,隨著誤差的減小,梯度也在減小,有利于收斂。但當預測值和真實值的差值大于1時,MSE會放大誤差,并且會對較大誤差給予更高的權重,這就會犧牲其它小誤差數(shù)據(jù)的預測效果,最終降低整體的模型性能。而且,MSE函數(shù)的回歸損失優(yōu)化和IOU(intersection over union)優(yōu)化并不是完全等價的,其Loss越低并不等價于IOU值越高,無法直接優(yōu)化預測框和真實框之間沒有重疊的部分。
AAAI2020會議上同時提出了DIOU(distance intersection over union)和CIOU(complete intersection over union)[19],由于DIOU將預測框與真實框之間的距離、重疊率以及尺度都考慮進去,所以DIOU要比IOU更加符合對目標框回歸的衡量,而CIOU在DIOU的基礎上多加入了長寬比因素,使目標框回歸更加穩(wěn)定,收斂速度更快且精度更高。基于CIOU的考慮因素更全面,本文采用CIOU損失替換YOLOv3的MSE損失,CIOU與CIOU損失的計算分別如式(3)、式(4)所示
(3)
(4)
其中,ρ2(b,bgt) 表示預測框和真實框中心點之間的歐氏距離,c代表的是能夠同時包含預測框和真實框的最小閉包區(qū)域的對角線距離,v衡量了框的長寬比,而α中既包含了面積交并比IOU,又融合了v, 兩者之積αv就是CIOU比DIOU多考慮的部分。
本文實驗在Windows10操作系統(tǒng)下進行,深度學習框架為Keras2.1.5;計算機CPU為Intel Core i7-10750H,內(nèi)存為16 GB;GPU為NVIDIA GeForce GTX 1650,顯存為8 GB;程序運行軟件為Anaconda平臺下的VSCode(visual studio code),使用Python3.6版本;配置了NVIDIA CUDA10.0 和Cudnn7.4.1加速GPU運算;并且安裝了Tensorflow1.13.2和Numpy1.17.4等一系列第三方庫來支持代碼的運行。
對YOLOv3網(wǎng)絡和改進YOLOv3網(wǎng)絡分別進行訓練,訓練采用動量因子為0.9的梯度下降法,共進行75個周期訓練。網(wǎng)絡設置不同大小的學習率,每25個周期分別設置學習率為0.001、0.0001、0.000 01。受GPU內(nèi)存限制,訓練批量數(shù)據(jù)設置為4,以防止出現(xiàn)內(nèi)存爆滿現(xiàn)象。最后利用Tensorflow第三方庫中的Tensorboard可視化訓練過程,其中改進YOLOv3網(wǎng)絡的損失變化曲線如圖7所示,圖中橫坐標為周期(epoch),縱坐標為損失(loss)。
圖7 改進YOLOv3網(wǎng)絡損失曲線
由于曲線后階段縱軸變化范圍極小,為直觀看到每個周期的Loss值,將該曲線分3段顯示,結果如圖8(a)~圖8(c)所示,分別為不同學習率下的分段損失曲線。
圖8 改進YOLOv3不同學習率下的分段損失曲線
從圖7和圖8損失曲線可以看出,改進YOLOv3網(wǎng)絡的損失函數(shù)值在剛開始迅速下降,隨著訓練周期的增加,在20個周期后曲線的下降速度逐漸緩慢,并且在40個周期后趨于穩(wěn)定,Loss值穩(wěn)定變化在0.114到0.119之間,此時再調(diào)低學習率對Loss值的影響不大,網(wǎng)絡損失最終收斂于0.117左右,達到了神經(jīng)網(wǎng)絡在訓練階段的預期學習效果。
圖9(a)、圖9(b)分別為YOLOv3和改進YOLOv3網(wǎng)絡的回歸損失(regression loss)曲線。由于YOLOv3算法在目標框回歸過程中采用MSE損失函數(shù),對大誤差離群點比較敏感,容易出現(xiàn)發(fā)散現(xiàn)象。從圖9可以看出,改進YOLOv3算法使用CIOU作為回歸損失后,在訓練過程中目標框回歸比YOLOv3更加穩(wěn)定,收斂速度和精度更高。
圖9 YOLOv3和改進YOLOv3網(wǎng)絡回歸損失曲線對比
針對目標檢測的不同評價指標,先對兩種不同改進方法進行消融實驗,然后將改進YOLOv3算法與其它目標檢測算法進行比較,分別進行參數(shù)量、訓練時間和FPS(frames per second)對比分析,平均精度(average precision,AP)和平均精度均值(mean average precision,mAP)對比分析,以及可視化結果對比分析。
(1)不同改進方法消融實驗
為獲得更高性能的車輛目標檢測算法,在訓練階段分別采用本文提出的主干特征提取網(wǎng)絡改進、損失函數(shù)改進以及兩方法組合改進,這些方法對YOLOv3算法在參數(shù)量和準確率方面的提升效果見表1。
表1 不同改進方法對算法性能的提升
從表1可以看出,改進后的主干特征提取網(wǎng)絡通過增加網(wǎng)絡深度和寬度,模型參數(shù)量相比原YOLOv3算法下降了39.89 M,同時算法準確率提高了約2.5個百分點。而使用損失函數(shù)改進方法減少了算法對大誤差離群點的敏感度,對檢測精度也有一定的提升,mAP值提高了約1.2個百分點。由此可以說明,改進算法1和改進算法2對YOLOv3算法分別有一定的性能提升效果。而使用兩種方法的組合對YOLOv3算法進行改進并訓練,得到的改進YOLOv3算法參數(shù)量為19.56 M,比YOLOv3算法下降了近67%,mAP為90.03%,提高了3.68%,說明采用改進后的主干特征提取網(wǎng)絡和CIOU回歸優(yōu)化損失降低了模型參數(shù)量,同時也提高了模型檢測的準確率,改進后的YOLOv3算法具有較明顯的優(yōu)越性。
(2)參數(shù)量、訓練時間和FPS(frames per second)對比
在訓練周期和學習率相同的情況下,對Faster R-CNN、SSD、YOLOv3算法,YOLOv3-Tiny、Mobilenet-YOLOv3輕量級算法,以及改進YOLOv3算法均使用本文數(shù)據(jù)集進行訓練,訓練中的參數(shù)量、訓練時間和FPS對比數(shù)據(jù)見表2。
表2 不同算法參數(shù)量、訓練時間和FPS對比
由表2可知,改進YOLOv3算法的參數(shù)量為19.56 M,相比其它算法參數(shù)量最少,訓練時間最短,尤其在模型參數(shù)量下降方面比YOLOv3-Tiny和Mobilenet-YOLOv3兩種輕量級算法更有優(yōu)勢。改進YOLOv3算法的參數(shù)量比YOLOv3算法下降了近67%,訓練時間也相對減少約4.5 h,同時在圖片處理速度上有著明顯提升,每秒提高了8幀,能夠對視頻進行流暢處理。
(3)AP和mAP對比
為驗證改進YOLOv3算法的有效性,實驗均使用本文數(shù)據(jù)集進行訓練,設置相同置信度、相同周期的權重進行測試,對比了Faster R-CNN、SSD、YOLOv3算法,YOLOv3-Tiny、Mobilenet-YOLOv3輕量級算法,以及本文改進YOLOv3算法的AP和mAP值,實驗結果見表3。
根據(jù)表3數(shù)據(jù)可以看出,本文提出的改進YOLOv3算法mAP為90.03%,相較于Faster R-CNN、SSD、YOLOv3算法分別提升了8.05%、4.38%、3.68%,相較于YOLOv3-Tiny和Mobilenet-YOLOv3兩種輕量級算法分別提升了7.88%和4.72%,并且每一類的AP值相對其它幾種算法均有不同程度的提升,說明采用改進后的主干特征提取網(wǎng)絡和CIOU回歸優(yōu)化損失提升了模型的檢測性能,具有較明顯的優(yōu)越性。
(4)可視化結果對比
為了驗證本文算法是否存在對小目標漏檢、誤檢等情況,對含有不同大小的車輛目標、光線遮擋、夜晚場景和太陽反光等幾種場景進行了可視化實驗,圖10為YOLOv3和改進YOLOv3算法在不同道路環(huán)境下的檢測效果對比結果,其中左列采用YOLOv3算法,右列采用改進YOLOv3算法。
從圖10檢測結果可知,YOLOv3算法存在小目標漏檢情況,在光線遮擋、夜晚場景和太陽反光的情況下均出現(xiàn)了漏檢和誤檢現(xiàn)象,本文提出的改進YOLOv3算法很大程度地減少了小目標漏檢情況,在復雜道路環(huán)境下均沒有出現(xiàn)漏檢、誤檢現(xiàn)象,并且分類置信度更高,檢測效果更好。
表3 不同算法的AP和mAP值對比
圖10 YOLOv3和改進YOLOv3算法可視化結果對比
本文提出了一種改進YOLOv3算法對車輛目標進行實時檢測,解決了深度卷積神經(jīng)網(wǎng)絡參數(shù)量大、實時性差等問題。在主干特征提取網(wǎng)絡改進中使用深度可分離卷積代替?zhèn)鹘y(tǒng)卷積并對通道施加注意力機制,增加網(wǎng)絡深度和寬度的同時減少了參數(shù)量和計算量;在目標框回歸優(yōu)化損失上引入了CIOU損失,緩解了模型訓練過程中目標框回歸出現(xiàn)的發(fā)散現(xiàn)象,以及MSE損失優(yōu)化和IOU優(yōu)化不完全等價對模型性能的影響,使得目標框回歸更加穩(wěn)定,收斂速度和精度更高。對實驗結果分析可知,改進YOLOv3算法mAP相比原YOLOv3算法提升了3.68%,F(xiàn)PS每秒提高了8幀,同時參數(shù)量下降了近67%,在檢測精度、檢測速度、模型大小上均優(yōu)于YOLOv3等其它算法,具有較高的適用性和魯棒性。