張怡萌,陳 寧,余順年
(集美大學(xué)機械與能源工程學(xué)院,福建 廈門 361021)
隨著科技的發(fā)展,人工智能在計算機領(lǐng)域逐漸成為了研究的熱門話題,其在各個領(lǐng)域的應(yīng)用引起了人們的關(guān)注。近年來,深度學(xué)習(xí)領(lǐng)域的創(chuàng)新發(fā)展,給計算機視覺帶來了新的突破性的研究。尤其是近年來對于計算機的發(fā)展有了更高的需求,需要計算機更加智能化和擬人化,能夠具備更強的邏輯處理能力進行預(yù)判和分析。目前,計算機視覺技術(shù)多用于目標(biāo)檢測、識別以及跟蹤等方面。場景識別技術(shù)是計算機視覺領(lǐng)域的一個重要的研究課題,而深度學(xué)習(xí)是近階段人工智能方向的研究熱點。
場景識別技術(shù)經(jīng)歷了長時間的發(fā)展,而傳統(tǒng)的場景識別技術(shù)在目前的應(yīng)用中存在很大的局限性。隨著深度學(xué)習(xí)技術(shù)的不斷發(fā)展,基于卷積神經(jīng)網(wǎng)絡(luò)的深度遷移學(xué)習(xí)技術(shù)應(yīng)用在場景識別中的研究已經(jīng)得到了廣泛的關(guān)注。
隨著移動機器人技術(shù)的發(fā)展,以及人們對于各種傳感器應(yīng)用的不斷理解,場景識別技術(shù)也逐漸由簡單的室內(nèi)環(huán)境識別擴展到場景更為復(fù)雜的室外環(huán)境識別。在室外移動機器人和無人駕駛技術(shù)領(lǐng)域,利用環(huán)境感知、道路識別和場景理解成為了機器人領(lǐng)域的研究熱點。斯坦福大學(xué)的Mohan[1]結(jié)合了深度反卷積神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng),形成了一種用于場景分析的新網(wǎng)絡(luò)結(jié)構(gòu)。該研究使用多分塊訓(xùn)練,首先對場景信息有效地學(xué)習(xí),然后通過反卷積網(wǎng)絡(luò)對道路區(qū)域進行像素級分割。rust等人[2]提出了一種卷積神經(jīng)網(wǎng)絡(luò),用于學(xué)習(xí)在像素級別區(qū)分不同的圖像塊和注釋卷積塊網(wǎng)絡(luò)。文章合并了圖像塊的空間信息,并將其作為網(wǎng)絡(luò)的輸入。同時將網(wǎng)格與模型結(jié)合,用于查找特定類型的像素位置。該方法將圖像塊進行分類,并在KITTI 數(shù)據(jù)集進行檢測,得到了良好的效果。這種方法的主要優(yōu)點是可以提高各種場景下檢測結(jié)果的魯棒性,并提高檢測模型的適用性。
本文針對傳統(tǒng)的室外場景識別技術(shù)魯棒性弱和識別精度低等問題,提出了一種基于語義分割的改進的deeplabV3+算法的室外場景識別技術(shù)。該方法在深度學(xué)習(xí)的基礎(chǔ)上,嘗試?yán)酶倪M后的K-近鄰算法對大量的特征點進行檢索關(guān)鍵特征后提取與交叉匹配比對,之后把提取到的信息,用語義分割的結(jié)果表達出來。本文在VOC2012和cityscapes兩個不同的數(shù)據(jù)集下使用改進后的算法進行檢測,并用自定義建立的數(shù)據(jù)庫進行室外場景的實驗結(jié)果驗證,對場景中的全部特征進行識別,之后輸入未標(biāo)簽的新數(shù)據(jù)進行匹配,從而實現(xiàn)室外場景的語義重建。
深度學(xué)習(xí)(deep learning)的概念由加拿大的 G.E.Hinton 博士[3]在2006年提出,是一種基于深度置信網(wǎng)絡(luò)非監(jiān)督貪心逐層訓(xùn)練算法,將低層特征結(jié)合起來創(chuàng)建更抽象的高層特征。隨著深度學(xué)習(xí)研究內(nèi)容不斷創(chuàng)新發(fā)展,目前已經(jīng)應(yīng)用在機器視覺、數(shù)據(jù)處理、視頻分析、智能駕駛和語言翻譯等眾多領(lǐng)域。2016年和人類世界圍棋冠軍進行比賽DeepMind公司開發(fā)的AlphaGO[4],是深度學(xué)習(xí)的應(yīng)用潛力得到進一步的挖掘。到目前,深度學(xué)習(xí)在數(shù)據(jù)、算法和模型上取得了驚人的進展,也成功促使了人工智能技術(shù)大規(guī)模的發(fā)展和應(yīng)用。
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)是基于深度學(xué)習(xí)理論的一種人工神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)可省去圖像預(yù)處理與特征抽取等步驟,將數(shù)據(jù)作為輸入[5]。源于仿生學(xué)的啟發(fā),在二十世紀(jì)六十年代初,Hubel 和 Wiesel 以貓為對象實施了視覺實驗,研究提出了視覺皮層功能分層模型[6]。CNN的基本結(jié)構(gòu)為:輸入層、卷積層(convolutional layer)、池化層(pooling layer)、全連接層及輸出層。在卷積神經(jīng)網(wǎng)絡(luò)中,卷積層和池化層通常有多個,并且采用交替設(shè)置。
本文比對了各模型在PASCAL VOC2012測試集的MIOU,如表1所示,DeeplabV3+的準(zhǔn)確率MIOU值要高于其它幾種神經(jīng)網(wǎng)絡(luò)。
表1 各個語義分割框架在PASCAL VOC2012數(shù)據(jù)集上
因此,本文基于deeplabV3+框架進行實驗,使用一種改進后的K-近鄰算法對神經(jīng)網(wǎng)絡(luò)進行優(yōu)化,同原始的神經(jīng)網(wǎng)絡(luò)實驗結(jié)果進行對照。
2.2.1 deeplabV3+網(wǎng)絡(luò)結(jié)構(gòu)
2015年,谷歌發(fā)布了DeepLab模型。經(jīng)過不斷的改進以及優(yōu)化卷及神經(jīng)網(wǎng)絡(luò),將模型升級為DeepLab-V2[7]和DeepLab-V3[8],新的模型具有更強大的建模技術(shù)以及特征提取功能。隨后,谷歌在DeepLab-V3的基礎(chǔ)添加了一個簡單高效的解碼器模塊[9]用于優(yōu)化分割后的特征目標(biāo),主要用于特征目標(biāo)的邊界優(yōu)化,并將更新后的模型命名為DeepLab-V3+[10],同時對多孔金字塔池化(ASPP)[11-13]和解碼器模塊使用可分離的卷積神經(jīng)網(wǎng)絡(luò),從而為語義分割提供了一個計算速度更快、分割能力更強的網(wǎng)絡(luò)結(jié)構(gòu)。
Deeplabv3+采用編碼器-解碼器的方式,編碼器部分使用Xception網(wǎng)絡(luò)[14]作為基礎(chǔ)網(wǎng)絡(luò)進行特征提取。Xception網(wǎng)絡(luò)是一種深度可分離的卷積網(wǎng)絡(luò)。為了解決物體魯棒分割問題,該算法引入了 ASPP 模塊。將圖像輸入進該算法中時,首先經(jīng)過卷積網(wǎng)絡(luò)得到一個初始的特征圖,然后將特征圖輸入到一個1*1的卷積層中,以降低特征圖的層次。其目的是減少特征圖的通道(這里由256通道減少為48通道)。解碼器部分將低層次功能特征與高層次功能特征結(jié)合到一起,將編碼器中處理后的特征圖再次輸入進一個1*1的卷積中,得到一個更低層次的特征圖,再次減少特征圖通道數(shù),然后使用4x插值采樣實現(xiàn)雙線性特征圖合并。最后經(jīng)過3*3卷積操作后采用4倍的雙線性插值,以恢復(fù)原始圖像的分辨率并獲得與原始圖像相同的尺寸的分割后的圖片。
2.2.2 K-近鄰算法
K-近鄰(K-Nearest Neighbor,K-NN)[15]是求解分類問題的一種常用算法,是數(shù)據(jù)挖掘算法的一種。簡單表示為:輸入一個新的未添加標(biāo)簽的數(shù)據(jù),然后在原始訓(xùn)練集標(biāo)簽數(shù)據(jù)與該輸入數(shù)據(jù)最相似的K個標(biāo)簽,并且根據(jù)找到的這K個標(biāo)簽,來確定新數(shù)據(jù)集的分類。
K-近鄰方法是一種原理相對簡單且易于實現(xiàn)的分類識別算法。并且具有在K個近鄰樣本數(shù)和訓(xùn)練樣本總數(shù)N都趨近無窮大時并且k/N→0時,能夠保證K-近鄰規(guī)則是最優(yōu)的分類準(zhǔn)則等良好特性。但是,也存在著明顯的不足,K-近鄰算法在解決實際模式分類的問題時,K-近鄰算法在分類過多時,識別精度會有所下降,但可以通過增加樣本的數(shù)量,提高識別精度。因此,本文選擇采用K-近鄰方法來輔助深度學(xué)習(xí)系統(tǒng)進行室外場景識別實驗。
按照該算法的基本思路,以本次實驗的分類問題為例,在給出新的實例之后,根據(jù)與該實例相似度的訓(xùn)練樣本,選擇出該訓(xùn)練樣本與預(yù)測樣本的距離d的K個取值,并依據(jù)K的取值來確定新的實例:在運算過程中,系統(tǒng)會輸出連續(xù)的坐標(biāo)(X1,y1),(X2,y2),…,(Xn,yn),其中,Xi是該實例的特征向量表示,yi則是實例Xi對應(yīng)的類別。對于給定的實例,使用K-近鄰算法對樣本的預(yù)測估計可以表示為
(1)
其中,Lk(x)表示與實例X最相似的K個實例。
為了提高算法的精度,本文對K-近鄰算法的相似度計算方法進行了改進工作,即,對每個實例進行權(quán)重計算,具體體現(xiàn)為對于相似度的計算,考慮到測量的接收信號強度,提高接近度高的訓(xùn)練樣本的估計權(quán)值,考慮到多種算法的復(fù)雜程度以及準(zhǔn)確率。本文選擇使用歐式距離來代替原算法進行相似度的計算
(2)
為了提高訓(xùn)練樣本的估計權(quán)值,本文的權(quán)值選擇使用訓(xùn)練實例間的歐氏距離的倒數(shù),其中,第i個近鄰的權(quán)值設(shè)置為
(3)
歐式距離的冪次越高,與預(yù)測樣本差別較大的樣本在訓(xùn)練時發(fā)揮的作用就越小,對預(yù)測樣本的估計可以表示為
(3)
在確定實例的K-近鄰后,計算每個實例的決策權(quán)重,根據(jù)決策權(quán)重的大小,判斷其在預(yù)測的類別歸屬時發(fā)揮作用的大小[16]。
2.2.3 本文選取的模型
為了提高deeplabV3+的識別精度,本文的主要目的是在原有的開源deeplabV3+算法中加入K-近鄰算法進行改進,如圖1使所示:在實驗前,要對自己的數(shù)據(jù)集進行標(biāo)簽工作,由于數(shù)據(jù)集樣本數(shù)量比較大,因此標(biāo)簽工作非常復(fù)雜繁瑣,為解決此問題,本文在對數(shù)據(jù)進行處理時,針對于數(shù)據(jù)集的處理工作,引入非監(jiān)督學(xué)習(xí)的概念,使用K-近鄰算法對公開數(shù)據(jù)集進行特征提取分類,然后把分類結(jié)果應(yīng)用于deeplabV3+測試算法中,進行對自定義數(shù)據(jù)集的識別測試工作。改進后的模型算法,如圖2所示。
圖1 算法流程
圖2 改進后的deeplabV3+模型框架
訓(xùn)練數(shù)據(jù)集采用開源的VOC2012數(shù)據(jù)集、cityscapes數(shù)據(jù)集以及自定義采集的數(shù)據(jù)集進行實驗。對于自己采集的數(shù)據(jù)集,由于樣本數(shù)量較少,因此利用數(shù)據(jù)增強方式對數(shù)據(jù)進行擴充。擴充后的數(shù)據(jù)集樣本數(shù)量增加,大量的樣本使得訓(xùn)練能夠更加準(zhǔn)確多樣性,有效防止訓(xùn)練過程中由于樣本不足導(dǎo)致的過擬合現(xiàn)象,模型的魯棒性也能得到提升。
如圖3所示,本次實驗所拍攝的圖片為校園及周邊環(huán)境,共采集圖片800張,圖像采集時設(shè)計包括晝夜、雨天等不同環(huán)境下的室外場景。樣本集隨機選取 600 張圖像生成訓(xùn)練集,其余 200 張圖像則作為測試集。
圖3 部分?jǐn)?shù)據(jù)集示例
為了使測試結(jié)果更具有說服力,考慮對采集到的數(shù)據(jù)集進行數(shù)據(jù)擴增。本次實驗分別從COCO數(shù)據(jù)集和KITTI數(shù)據(jù)集中各分選出1500張適合本次實驗的室外環(huán)境的圖片,加入進自定義的數(shù)據(jù)集中進行擴充。擴充后的數(shù)據(jù)集樣本容量為3800張圖片,其中2850張為訓(xùn)練集,其余950張圖片作為測試集使用。
目前的deeplabV3+實驗方法需要采用人工標(biāo)注和輔助標(biāo)注結(jié)合的方式對集裝箱數(shù)據(jù)集進行標(biāo)注,人工標(biāo)注主要使用labeIme樣本目標(biāo)標(biāo)注軟件,利用該軟件進行自定義標(biāo)注時,需要按照目標(biāo)的形狀進行輪廓描繪,可生成所需要的json文件,然后通過編程語言把json文件轉(zhuǎn)換為后面訓(xùn)練所需要的png格式的語義圖片,labelme操作界面如圖4所示,圖片生成結(jié)果如圖5所示。
圖4 labelme標(biāo)注效果
圖5 標(biāo)簽轉(zhuǎn)換后生成的圖片
考慮訓(xùn)練集中的屬性分布,以及考慮到某些屬性不能使用語義分割將屬性分割并可視化。
本文改進的算法需要先對原有數(shù)據(jù)集進行訓(xùn)練,VOC數(shù)據(jù)集測試結(jié)果如圖6所示,僅對物體進行無背景的分割,且VOC數(shù)據(jù)集與本次實驗環(huán)境重合度不高,通過對比自定義數(shù)據(jù)集與VOC數(shù)據(jù)集樣本中的特征,提取出比對結(jié)果中相似度最高的樣本的分類標(biāo)簽,最終選取了6個屬性。具體屬性值見表2。
圖6 VOC數(shù)據(jù)集測試結(jié)果
表2 自制數(shù)據(jù)集與VOC數(shù)據(jù)集相似分類標(biāo)簽
使用Cityscapes數(shù)據(jù)集進行測試的結(jié)果如圖7所示,Cityscapes數(shù)據(jù)集樣本由多個國家的不同街道環(huán)境組成,數(shù)據(jù)集樣本容量大,且與本次實驗的環(huán)境類別重合度較高,通過對比自定義數(shù)據(jù)集樣本中的特征與Cityscapes數(shù)據(jù)集對應(yīng),提取出比對結(jié)果中相似度最高的樣本的分類標(biāo)簽,最終選取了12個屬性。具體屬性值見表3。
圖7 Cityscapes數(shù)據(jù)集測試結(jié)果
表3 自制數(shù)據(jù)集與Cityscapes數(shù)據(jù)集相似分類標(biāo)簽
由于VOC數(shù)據(jù)集的樣本分類標(biāo)簽屬性相對較少,而且沒有分離背景,因此不太適用于本次實驗的室外場景環(huán)境檢測中,而cityscapes數(shù)據(jù)集樣本是城市景觀,大多為街道環(huán)境,而且分類標(biāo)簽與本次實驗的實驗場景環(huán)境相似性更高,分類標(biāo)簽屬性也更多更適合于本次實驗環(huán)境。
本次實驗在ubuntu16.04桌面版系統(tǒng)下進行,在深度學(xué)習(xí)框TensorFlow下進行deeplabV3+和FCN的語義分割算法,計算機處理器為Inter(R)Core(TM)i7-7700K CPU@4.20GHz,內(nèi)存8GB,適配器為NVIDIA GeForce GTX 1080GPU。CUDA9.0版本并行計算框架配合CUDNN9.0版本是深度神經(jīng)網(wǎng)絡(luò)加速庫,使用python版本為3.6.8。
本文選擇使用Xception65網(wǎng)絡(luò)模型來初始化網(wǎng)絡(luò)參數(shù),并基于deeplabV3+的python版本進行模型的訓(xùn)練和測試,通過對應(yīng)網(wǎng)絡(luò)的配置文件修改訓(xùn)練策略參數(shù),其主要的訓(xùn)練策略如表4所示。
表4 主要訓(xùn)練策略
本次實驗從GitHub上下載了deeplabV3+的源碼。首先對于數(shù)據(jù)集的處理,TensorFlow使用TFrecord格式來進行數(shù)據(jù)存儲,T并且提供了豐富的函數(shù)方法對數(shù)據(jù)進行預(yù)處理工作。其對于模型進行初始化參數(shù)的設(shè)置,由于計算資源的限制,本實驗首先使用deeplabV3+網(wǎng)絡(luò)模型訓(xùn)練了VOC數(shù)據(jù)集以及cityscapes數(shù)據(jù)集,對數(shù)據(jù)集對應(yīng)特征進行比較之后,使用改進后的K-鄰近算法提取出樣本最相似的分類標(biāo)簽,本次實驗中,基礎(chǔ)的學(xué)習(xí)率設(shè)置為0.0001,學(xué)習(xí)率下降策略選擇使用poly,batch_size設(shè)置為12,權(quán)重衰減設(shè)置為0.0004,output_stride設(shè)置為4,對應(yīng)的空洞金字塔的3個空洞卷積參數(shù)分別設(shè)置為8,12,16。
使用改進后的算法對自定義的訓(xùn)練集和測試集進行訓(xùn)練,獲得模型的參數(shù)。實驗過程中,生成的損失率隨著時間的增加在不斷降低,當(dāng)降低到一定的范圍時,損失率得到相對穩(wěn)定的區(qū)間,取區(qū)間的最低點,得到的參數(shù)為損失率最小值。圖8所示為訓(xùn)練過程的網(wǎng)絡(luò)總損失值的變化曲線。圖9所示為整個訓(xùn)練過程的學(xué)習(xí)率變化曲線。
圖8 網(wǎng)絡(luò)總損失值的變化曲線
圖9 學(xué)習(xí)率變化曲線
圖中可以看出,在迭代次數(shù)大約40000次時,損失函數(shù)值開始趨近于穩(wěn)定,其中,隨著學(xué)習(xí)步數(shù)的不斷增加,學(xué)習(xí)率逐漸趨近于0,而總損失值逐漸趨近于0.4。
展示模型識別效果圖,輸入為一張圖片,輸出為一張語義分割圖,分割效果如圖10所示。
圖10 改進后的算法語義分割效果圖
Precision即準(zhǔn)確率,是在識別所有的實例時,系統(tǒng)識別出來的所有的實例A所占的比例,其公式為
(5)
Recall即召回率,是在識別出來的所有的實例A中,識別出來正確的A所占的比例,其公式為
(6)
以實例B為例,簡單說明TP、FP、FN的釋義。TP表示數(shù)據(jù)集中的實例B被正確識別為實例B;FP表示數(shù)據(jù)集中的實例B被識別成了實例C或者其它非B實例;FN表示數(shù)據(jù)集中的其它非B實例被識別為實例B。
AP即平均精度(Average-Precision),簡單來說,AP就是Precision-Recall曲線(P-R曲線)的面積,通常情況下,分類的準(zhǔn)確率越高,AP值越高。
改進后的語義分割結(jié)果與原本的deeplabV3+網(wǎng)絡(luò)相比,識別結(jié)果分析如表5、圖11所示:
表5 實驗結(jié)果
圖11 改進前后結(jié)果對比示意圖
本次實驗是在測試公開數(shù)據(jù)集結(jié)果的基礎(chǔ)上測試自定義數(shù)據(jù)集,與現(xiàn)有的測試數(shù)據(jù)集的方法不同,省去了對數(shù)據(jù)集進行標(biāo)簽的工作,減少了大量的前期準(zhǔn)備工作,節(jié)省了實驗的時間,輸入新的未添加標(biāo)簽的數(shù)據(jù)后,將該數(shù)據(jù)中能夠提取出來的每個特征與實驗中訓(xùn)練過的樣本中的生成的特征信息進行對應(yīng)比較。
試驗結(jié)果表明,改進后的語義識別方法比現(xiàn)有的直接使用deeplabV3+算法進行語義識別相比,縮短了訓(xùn)練時間,提升了訓(xùn)練精度。原本的方法在采集數(shù)據(jù)集之后花費了大量的時間在標(biāo)簽工作上,改進后的訓(xùn)練算法則避免了這一繁瑣的過程,通過K-近鄰算法計算過相似性之后在進行結(jié)果輸出的方式,比原本的直接輸出方式的準(zhǔn)確率有提高,而且工作效率也有所提高,使室外場景的語義識別效果得到提升。
本文運用了深度學(xué)習(xí)的原理,提出了一種基于語義分割的室外場景識別方法,該方法主要通過進行實驗來確認(rèn)環(huán)境的語義識別結(jié)果,同時對改進后的deeplabV3+算法與原本的算法進行對比試驗,得到相對較好的結(jié)果。本次實驗發(fā)現(xiàn)改進后的算法在可行性上提供了有力的支撐,由于原本的算法在對自定義數(shù)據(jù)集進行訓(xùn)練之前要經(jīng)過繁瑣的標(biāo)簽過程,而改進后的算法在原本深度學(xué)習(xí)的基礎(chǔ)上引入了一種改進后K-近鄰算法的概念,去掉了前期標(biāo)注的過程,引入分類標(biāo)簽,利用原有數(shù)據(jù)集與自定義數(shù)據(jù)集樣本的相似特征進行實驗,減少了算法的前期準(zhǔn)備時間,提高了識別的準(zhǔn)確率以及算法工作的效率。
最終的實驗結(jié)果證實了本文的實驗方案是可行的,同時有效的提升了工作效率,為后續(xù)進行室外場景的語義分割提供了可行性。
本文的實驗方案雖然能提升室外場景語義分割的速度和效率,但是識別精度以及準(zhǔn)確性仍有一定的誤差,這對于實時檢測還是能造成一定的影響,下一步的研究工作可以考慮在保證準(zhǔn)確率的同時能夠提高訓(xùn)練速度以及減小實時識別的誤差影響。