付陽陽,陶建軍,王夏黎,李妮妮,袁紹欣
(1.長安大學(xué) 信息工程學(xué)院,陜西 西安 710064;2.紹興市交通建設(shè)有限公司,浙江 紹興 312000)
斑馬線作為道路交通中重要的組成部分,其存在可以幫助行人安全通行。對于輔助駕駛系統(tǒng)中,行人的行走意圖一直被人們所研究但未全面攻破。對于輔助駕駛來說,分析斑馬線區(qū)域內(nèi)的行人意圖是一項必不可少的工作。人們也一直在研究檢測斑馬線更精準(zhǔn)更全面的方法,利用現(xiàn)代科技對斑馬線進行檢測為輔助駕駛的預(yù)警系統(tǒng)提供了幫助,為車輛的無人駕駛提供了更加可靠且準(zhǔn)確的數(shù)據(jù),使得行人的安全系數(shù)得以提升。
斑馬線的檢測技術(shù)在不斷發(fā)展,如Toldo[1]提出的滅點法,其實質(zhì)即為聚類算法,是直線約束圖像中的兩個消失點,然后用RANSAC方法來進行滿足約束條件的直線組擬合,該算法不僅計算量大,并且實用性差;再如雙極系數(shù)法[2-4]是根據(jù)灰度的差異來獲得我們所需要的區(qū)域,然后進行斑馬線的檢測,但是該算法主要利用人工能力,使得分割不夠精確。深度學(xué)習(xí)方法逐漸發(fā)展起來,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)斑馬線檢測是將原始圖像進行灰度化、逆透視、二值化處理后利用邊緣檢測算法(如canny[5-6],sobel[5-7])提取垂直方向邊緣信息后進行霍夫變換[8-9]來檢測斑馬線,該方法檢測精度很低且適用性較差,受用面積比較狹小,對于存在缺損的斑馬線不能檢測;現(xiàn)有神經(jīng)網(wǎng)絡(luò)算法檢測斑馬線算法較多,較好的有語義分割[10-11]的算法,Long[12]等提出FCN,它在進行語義分割時感受野固定且其分割物體時細(xì)節(jié)容易丟失或著被平滑;Badrinarayanan等[13]提出SegNet,其采用了池化索引來保存圖像的輪廓信息,降低了參數(shù)量,但是當(dāng)對低分辨率的特征圖進行池化時,會忽略鄰近像素的信息;Ronneberger等[14]提出了U-Net[15]模型,它使用圖像切塊進行訓(xùn)練,但是其在卷積過程中沒有加pad,導(dǎo)致網(wǎng)絡(luò)最后的輸出與輸入大小不一樣;Zhang等[16]提出PSPNet[17]模型,提出金字塔模塊來聚合背景信息,但采用4種不同的金字塔池化模塊,對細(xì)節(jié)的處理要求較高;到提出新DeepLabV3 ASPP模型,采用了Multigrid,提出了ASPP,加入了BN,但其不能捕捉圖像大范圍信息,圖像層的特征整合只存在于 ASPP中。
針對上述提到的檢測精度低、實時性差、檢測不全面的問題,本研究提出了改進的SegNet模型,并將本研究模型與語義分割的U-Net模型、PSPNet模型、原始SegNet模型在斑馬線檢測進行對比試驗,尋求檢測斑馬線最為精準(zhǔn)的算法,經(jīng)過對比試驗得到對于檢測斑馬線精確度最好的模型,達到應(yīng)用復(fù)雜場景中為車輛提供良好預(yù)警提示的目的。
SegNet是一種為了自動駕駛或者智能機器人的圖像語義分割深度網(wǎng)絡(luò),SegNet最吸引人的特點是對于分辨率低的輸入圖像,它的解碼器使用了上采樣的方式,SegNet為了降低學(xué)習(xí)上采樣的虛耗,將編碼器獲得的池化索引應(yīng)用到上采樣。SegNet使用了卷積操作,將特征圖進行增多,使其變密集,供特征提取。這樣操作可以使模型具有良好分割性能的背景下揭示了內(nèi)存與精度的權(quán)衡。
SegNet模型主要針對于道路場景應(yīng)用,在整體上運用了編碼器-解碼器(Encoder-Decoder)的結(jié)構(gòu)。關(guān)于輸入數(shù)據(jù)存在空間維度的增減問題,SegNet模型使用編碼器來進行,而對于編碼器造成的問題,解碼器使用反卷積來解決,恢復(fù)數(shù)據(jù)的空間維度以及目標(biāo)的細(xì)節(jié)。編碼器與解碼器之間會存在直接的信息關(guān)聯(lián),這樣解碼器可以實現(xiàn)對目標(biāo)細(xì)節(jié)進行更好的恢復(fù)。
傳統(tǒng)SegNet模型的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,Input為輸入圖像,Output為輸出的分割圖像,不同顏色代表不同的分類。SegNet是一個對稱網(wǎng)絡(luò),由中間②即Pooling層與③即Upsampling層作為分割,左邊是通過卷積來提取高維特征,并通過Pooling使圖片變小,為Encoder,編碼器網(wǎng)絡(luò)由13個卷積層組成,對應(yīng)于VGG16網(wǎng)絡(luò)中用于對象分類的前13個卷積層。因此,對于初始化訓(xùn)練的權(quán)重,可以從訓(xùn)練用于大數(shù)據(jù)集分類的權(quán)重中獲得。而且為了在編碼器的輸出處保留更高的分辨率特征映射,可以舍棄全連接層。這樣SegNet模型中編碼器的參數(shù)減少。編碼器與解碼器一一對應(yīng),解碼器也有13層。右邊是反卷積與Upsampling,通過反卷積重新獲得圖像分類以后的特征,填充缺失的內(nèi)容,Upsampling作為Pooling的逆過程,使圖像變大,為Decoder,最后一個卷積層會輸出所有的類別,網(wǎng)絡(luò)的最后通過Softmax函數(shù),輸出不同分類的最大值,最終完成圖像像素級別的不同分類,得到每個像素屬于斑馬線的概率。Pooling Indices為Pooling前后的對應(yīng)位置,會被模型在Encoder Networ時使用Pooling記錄,Pooling后的Indices輸出到對應(yīng)的Upsampling。Convolutional Encoder-Decoder為Encoder每一層卷積對應(yīng)Decoder的一層卷積,融合高分辨率信息。
圖1 傳統(tǒng)SegNet模型網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Network structure of traditional SegNet model
以提高檢測斑馬線的精確度與實時性為目的,將原始SegNet模型進行改進。首先將金字塔池化模塊(SPP)融入,提高提取信息的全面性;然后進行結(jié)構(gòu)改進,將對稱結(jié)構(gòu)改為編碼不變,解碼減少的不對稱結(jié)構(gòu)。
本試驗將金字塔池化模塊融入到原始SegNet模型中,將其放在最后一層卷積層后面,構(gòu)造一種獨特的全局特征提取模塊,實現(xiàn)改進SegNet能夠有效獲得全局預(yù)警信息。
金字塔池化模塊后會生成不同級別的特征圖,它們最后會被展平且拼接起來,然后再將其送入到全連接層中進行分類,該設(shè)計的目的是消除CNN輸入固定大小的圖像這一缺點。
但是,傳統(tǒng)線性協(xié)整模型僅反映因變量對自變量的平均響應(yīng),由于條件均值只是概率分布的一個特征,如果希望知道在更多的分布特征上因變量和自變量的長期均衡關(guān)系,上述方法則無法勝任。一個改進的辦法是在不同的分位點上考察變量之間的關(guān)系。基于此,Xiao(2009)應(yīng)用Koenker和Bassett(1978)的分位數(shù)回歸方法,提出分位數(shù)協(xié)整模型(Quantile Cointegration Model)。記εt的τ分位數(shù)為Qε(τ),It={xt,Δxt-j}?j,則對于式(5)中的條件分位數(shù)為:
如圖2所示,金字塔池化模塊融合了4種不同金字塔尺度的特征。①表示最粗粒度的級別是全局池化。對特征圖采用4個不同尺度池內(nèi)核進行池化,對于其他的級別是將圖像進行劃分,然后將不同級別包含位置信息的bin進行組合,池化后我們需要進行卷積,采用1×1,2×2,3×3和6×6這4種不同尺寸的卷積操作得到多個尺寸的特征圖,并對這些尺寸的特征圖再次選擇1×1的卷積,降低通道數(shù),然后將得到降低了通道數(shù)的特征圖使用雙線性插值機型上采樣后得到與特征圖相同的尺寸,最后將不同尺度金字塔池化并將上采樣的特征斑馬線圖像與原來的斑馬線特征圖進行結(jié)合。圖2中方框POOL表示采用1×1,2×2,3×3和6×6這4種不同尺寸的Pooling操作得到多個尺寸的特征圖,并對這些尺寸的特征圖再次進行“1×1的Conv”來減少通道數(shù)。然后采用雙線性插值進行UPSAMPLE,即通過上采樣來獲得金字塔模塊前相同尺寸的特征圖,并在通道上進行拼接CONCAT。
圖2 金字塔池化模塊Fig.2 Pyramid pooling module
金字塔池化模塊在卷積層的后面對每一張斑馬線圖片都進行了多方面的特征提取,有效地提取到斑馬線的特征信息,而且SegNet模型經(jīng)過與金字塔池化模塊融合后,可以輸入任意尺度的斑馬線圖像,可以實現(xiàn)從全局中提取出語境信息,提高了斑馬線識別的精度。
為了減少網(wǎng)絡(luò)模型的運行時間,提高斑馬線檢測的實時性,將模型對稱的結(jié)構(gòu)進行改進,改為編碼不變,解碼減少的不對稱結(jié)構(gòu),這種結(jié)構(gòu)極大地提升了運行速度。
主要是利用改進后的SegNet[18-19]來進行斑馬線像素點位置的檢測,得到斑馬線檢測圖像。改進的SegNet結(jié)構(gòu)依然是分為編碼和解碼兩部分,主要將解碼部分減少,編碼部分不變,在解碼部分利用1×1 的卷積核來減少網(wǎng)絡(luò)參數(shù),這樣利用減少的網(wǎng)絡(luò)時間來提高模型的運行速度,同時提高了檢測斑馬線的實時性。
在斑馬線圖像中存在大量的冗余信息,我們將斑馬線圖像進行壓縮,來減少信息的冗余。我們利用模型的編碼部分卷積層來獲得各種不同的斑馬線圖像特征信息,將斑馬線圖像的感受野增大,來保證我們在進行斑馬線檢測時不會存在上下文的信息減少或者可能增多。細(xì)節(jié)的處理也是不可避免,對細(xì)節(jié)的處理到位,才能減少邊緣信息的丟失,防止丟失情況的發(fā)生,我們對細(xì)節(jié)進行微調(diào)整,將下采樣存儲的索引信息完成上采樣的特點應(yīng)用到解碼器的4個上卷積層,并且在其中加入 1 × 1的卷積核實現(xiàn)網(wǎng)絡(luò)參數(shù)的減少。設(shè)計改進后的SegNet 算法架構(gòu)如圖3所示。圖3中Input為輸入圖像。PPM為金字塔池化模塊,是為了獲取全局信息,從而達到減少斑馬線細(xì)節(jié)信息丟失的目的。其中,Conv,Deconv,maxpool和RelU分別為卷積、反卷積、最大池化,激活函數(shù),Softmax+Argmax獲取到斑馬線圖像特征點位置。
圖3 改進后的SegNet模型結(jié)構(gòu)Fig.3 Improved SegNet model structure
3.1.1 數(shù)據(jù)集準(zhǔn)備
本研究主要采集了1 150張斑馬線[20]圖像樣本作為本研究數(shù)據(jù)集,主要來源于兩部分,一部分是通過網(wǎng)絡(luò)搜取到的網(wǎng)頁圖片,為了獲得真實場景下的斑馬線圖像,另一部分通過人工實景采集斑馬線區(qū)域圖像,盡可能得到各種干擾情況下的斑馬線圖像。由于采集到的圖像數(shù)量較少,因此采用圖像翻轉(zhuǎn)、添加高斯噪聲、圖像增強等方法擴充數(shù)據(jù)樣本,使樣本數(shù)據(jù)能夠滿足訓(xùn)練需求,使得訓(xùn)練后的模型能夠滿足不同情況下的斑馬線檢測需求。第1種水平翻轉(zhuǎn),改變圖像,擴充樣本;第2種在原始圖像上添加高斯噪聲,通過改變系數(shù)、方差和均值等使圖像發(fā)生改變,擴充樣本;第3種圖像增強,改善圖像視覺效果,擴充樣本。將數(shù)據(jù)樣本使用標(biāo)注工具labelme標(biāo)注后得到j(luò)son文件,然后將json文件轉(zhuǎn)換為用于斑馬線檢測訓(xùn)練的標(biāo)簽集。圖像樣本包含了不同方向不同場景下的拍攝,并且存有各種其他標(biāo)線影響和各種不同的遮擋物遮擋及斑馬線有污損等情況的干擾,將其隨機劃分出80%為訓(xùn)練集,20%為測試集。測試集圖像為不同拍攝背景下的斑馬線圖像,符合測試要求。
3.1.2 試驗環(huán)境
所有試驗是采用PyCharm平臺開發(fā),使用基于Python語言的Tensorflow深度學(xué)習(xí)框架搭建SegNet,U-Net,PSPNet網(wǎng)絡(luò),實現(xiàn)各網(wǎng)絡(luò)模型關(guān)于斑馬線的檢測。
試驗中使用的服務(wù)器設(shè)備的相關(guān)配置如下:CPU為Intel(R)Core(TM)i7-8550U,顯卡為NVIDIA GeForce GTX 1050 with Max-Q Design,CUDA版本為10.0,CUDNN版本為7.4.1,操作系統(tǒng)為Win10,數(shù)據(jù)處理為Python3.6和tensorflow1.14。
3.1.3 訓(xùn)練過程
訓(xùn)練參數(shù)設(shè)置epoch為50,批處理量設(shè)置為14,學(xué)習(xí)率的初始值設(shè)置為0.01,動量配置為0.9,權(quán)重衰減配置為0.000 55,在試驗的Accuracy不在增加就停止訓(xùn)練。試驗在迭代了40次后停止了訓(xùn)練,圖4和圖5為訓(xùn)練的Accuracy曲線和訓(xùn)練過程的loss曲線。圖4中迭代次數(shù)為橫坐標(biāo),Accuracy為縱坐標(biāo),圖5中迭代次數(shù)為縱坐標(biāo),Loss值為橫坐標(biāo)。迭代35次后,訓(xùn)練集Accuracy收斂于98.6%,Loss值收斂于0.046,測試集Accuracy收斂于95.7%,Loss值收斂于0.205。
圖4 Accuracy曲線Fig.4 Curves of accuracy
圖5 Loss曲線Fig.5 Loss curves
3.2.1 評價指標(biāo)
在試驗的數(shù)據(jù)集上進行測試,本研究使用相同的數(shù)據(jù)集進行改進SegNet模型、原始SegNet模型、U-Net模型以及PSPNet模型等不同模型的訓(xùn)練,對于改進的SegNet模型實現(xiàn)了將斑馬線的檢測更加準(zhǔn)確且清晰,且對于有遮擋情況的斑馬線,本試驗也得到了較好的試驗結(jié)果,對斑馬線的分割檢測依然準(zhǔn)確,不會因為個別遮擋情況而受到很大的檢測干擾。
為了準(zhǔn)確客觀地分析試驗結(jié)果,本研究使用召回率P(Precision)、準(zhǔn)確率Re(Recall)、F1值3種評價標(biāo)準(zhǔn)來衡量模型的性能,其主要計算公式為:
(1)
(2)
(3)
式中,正確檢測出的斑馬線目標(biāo)數(shù)用T(Truepositive)表示,錯誤檢出的斑馬線目標(biāo)數(shù)用F(Falsepositive)表示,沒有被正確檢出的斑馬線目標(biāo)數(shù)用Fg(Falsenegative)表示。
當(dāng)Score_threhold=0.5 時,其在斑馬線數(shù)據(jù)集上性能對比結(jié)果如表1所示。改進SegNet模型在P,Re,F(xiàn)1值均更有優(yōu)勢。與其他模型對比,在準(zhǔn)確率與召回率兩項評價算法檢測性能的指標(biāo)當(dāng)中,改進后的 SegNet 網(wǎng)絡(luò)表現(xiàn)在準(zhǔn)確率的性能上有很大的提高,在保證一定的有效檢測數(shù)的同時,召回率的性能也有相應(yīng)提升。因此,在F1 分?jǐn)?shù)這項模型綜合評價指標(biāo)上,改進后的SegNet模型檢測精度有了顯著提升,并且斑馬線檢測時間也有所降低。試驗數(shù)據(jù)表明,本算法比其他算法更具有優(yōu)勢,且綜合評定結(jié)果更穩(wěn)定。
表1 4種模型性能對比Tab.1 Comparison of performance of 4 models
3.2.2 檢測結(jié)果分析
本研究為證明改進SegNet模型的檢測效果,依次對改進SegNet模型、原始SegNet模型、U-Net模型以及PSPNet模型分別進行了試驗,選取相同情況下的斑馬線圖片進行測試。可以得到改進后的SegNet模型檢測效果明顯準(zhǔn)確率高于其他模型的檢測效果,PSPNet模型的檢測效果特別差,只檢測出斑馬線的一點區(qū)域,而且還錯將停止線檢測為斑馬線;U-Net模型檢測效果稍好,但存在檢測不均的問題,可以大體檢測出斑馬線;原始SegNet模型基本可以將斑馬線檢測出來,但是也存在檢測不到位不精準(zhǔn)的問題,斑馬線的邊緣部分并沒有檢測出來;改進SegNet模型可以清晰地檢測出斑馬線區(qū)域并且可以精準(zhǔn)檢測邊緣部分,檢測精確度達到97.6%。由檢測結(jié)果分析可知相較于原始SegNet模型,U-Net模型和PSPNet模型,改進后的SegNet模型斑馬線檢測效果最好。
從表2中,對比其他模型,可以看出改進后的SegNet模型測試運行時間最短,證明了本研究模型的運行速度最快,實時性得到提高。
表2 各模型測試平均時間Tab.2 Average test time of each model
本研究基于改進的SegNet模型進行斑馬線檢測,使其更適應(yīng)于輔助駕駛系統(tǒng)中的預(yù)警場景,為無人車提供幫助。主要將SegNet模型的特征提取網(wǎng)絡(luò)部分進行改進,融入金字塔池化模塊,將模型對稱的結(jié)構(gòu)改為編碼不變,解碼減少的不對稱結(jié)構(gòu),有效提高了檢測準(zhǔn)確率和實時性。在進行試驗訓(xùn)練前對數(shù)據(jù)集進行了相應(yīng)的處理,有效擴大了試驗樣本與多樣,提升了訓(xùn)練的準(zhǔn)確性。試驗表明,改進后的SegNet 模型可以有效的對斑馬線進行檢測,并且檢測精度有所提高,實時性有所提升,具有良好的魯棒性,雖然存在檢測不全面的問題,但是基本可以滿足對于多數(shù)場景和復(fù)雜路況的斑馬線檢測需求。在以后對于斑馬線檢測的研究中,將會對模型進一步優(yōu)化,并考慮其他改進方法,使其檢測更加準(zhǔn)確有效,使模型的實時性和準(zhǔn)確性更高。