秦慧穎,雷曉春,2,江澤濤,2
(1.桂林電子科技大學(xué) 計算機(jī)與信息安全學(xué)院, 桂林 541004;2.桂林電子科技大學(xué) 廣西圖像圖形與智能處理重點實驗室, 桂林 541004)
自動駕駛近年來備受關(guān)注,如激光雷達(dá)、目標(biāo)檢測等相關(guān)技術(shù)得到飛速發(fā)展。無人車自動行駛過程主要依靠車載的攝像頭、激光雷達(dá)、已建好的高精地圖等來完成。在指定場景下,如果沒有高精地圖,那么無人車將依靠激光雷達(dá)進(jìn)行避障以及車載攝像頭進(jìn)行目標(biāo)的識別與檢測,從而能順利有序地進(jìn)行相應(yīng)的行駛操作。本文使用華為無人車(下文簡稱無人車)作為實驗對象,基于ModelArts平臺進(jìn)行數(shù)據(jù)集的制作與模型的訓(xùn)練。基本場景為模擬現(xiàn)實路況,采用紅綠燈、斑馬線、限速和解除限速等標(biāo)志,設(shè)置行人等障礙物,車道線形狀包括直線形、環(huán)形和S形,場景圖如圖1所示。
圖1 華為無人車挑戰(zhàn)賽模擬場景圖
無人車模擬交通場景,通過目標(biāo)檢測算法識別與檢測基本路況信息,來進(jìn)行相應(yīng)的控制操作。通過對不同數(shù)據(jù)集在不同算法以及不同參數(shù)下的幾組實驗找到優(yōu)化模型,并實際應(yīng)用于無人車模擬路況行駛。本文對訓(xùn)練得到的模型準(zhǔn)確度進(jìn)行了測試,同時選出較好的模型部署在小車上進(jìn)行對比。同時,模擬路況的一些實際情況,對模型進(jìn)行了改進(jìn),將顏色容易混淆的紅綠燈進(jìn)行位置劃分,對比未改進(jìn)之前的模型能更精確地判斷紅綠燈的狀態(tài)。
無人車在行駛過程中,分別使用攝像頭獲取實時路況信息,激光雷達(dá)檢測運行過程中是否存在障礙物。實際運行過程中,在激光雷達(dá)檢測到有障礙物時,無人車應(yīng)進(jìn)行避障處理,應(yīng)減速或者直接停下,圖2為模擬行人過斑馬線的場景。而實時路況則是在相應(yīng)的路況下,無人車也應(yīng)及時作出相應(yīng)反應(yīng)?;韭窙r信息包括紅綠燈、斑馬線、限速和解除限速。例如,根據(jù)紅綠燈的規(guī)則,無人車在檢測當(dāng)時處于紅燈則應(yīng)在指定位置之前立即停下,遇到綠燈正常通行,在斑馬線處和遇到限速標(biāo)志后應(yīng)減速等。
圖2 模擬行人過斑馬線
無人車的控制部分分為兩個模塊,激光雷達(dá)和攝像頭獲取的信息同時對無人車的運行情況進(jìn)行控制。激光雷達(dá)主要檢測前方障礙物;攝像頭主要用于識別相應(yīng)的基礎(chǔ)路況信息。而基礎(chǔ)路況信息是需要進(jìn)行處理和識別的。容易觀察到,基本路況信息中的目標(biāo)比較穩(wěn)定、容易識別,所以采用目標(biāo)檢測進(jìn)行處理比較合適。使用目標(biāo)檢測算法訓(xùn)練出模型,在實時路況中,無人車可以進(jìn)行路況識別檢測,并作出相應(yīng)的反應(yīng)。無人車在運行過程中使用模擬環(huán)境,訓(xùn)練數(shù)據(jù)也采用從模擬環(huán)境采集的信息。在訓(xùn)練模型的過程中,選擇幾種性能比較好的算法進(jìn)行訓(xùn)練,并通過比較訓(xùn)練模型的精度來進(jìn)行較好的模型選擇。
通過無人車攝像頭拍攝了3000多張模擬場景圖片,將這些圖片在ModelArts平臺上進(jìn)行數(shù)據(jù)標(biāo)注,制作成了原始數(shù)據(jù)集DSv1(下文該原始數(shù)據(jù)集均使用DSv1表示)。標(biāo)注目標(biāo)分別為紅綠燈中的紅、黃和綠燈,斑馬線、限速和解除限速六類目標(biāo)。由于數(shù)據(jù)集數(shù)量較少,且訓(xùn)練出來的模型效果不是很理想,所以要對數(shù)據(jù)集進(jìn)行圖像處理和圖像增強(qiáng),以提高數(shù)據(jù)集的訓(xùn)練效果。同時,也對原始數(shù)據(jù)集進(jìn)行了數(shù)據(jù)清洗,增加數(shù)據(jù)集的質(zhì)量以及可用性,來訓(xùn)練出更適應(yīng)模擬環(huán)境的模型。圖像增強(qiáng)主要使用原始數(shù)據(jù)集進(jìn)行旋轉(zhuǎn)、疊加以及增加噪聲等處理。原始數(shù)據(jù)集加上進(jìn)行圖像增強(qiáng)之后的數(shù)據(jù)集,制作成了8000多張的數(shù)據(jù)集DSv2(下文該數(shù)據(jù)集均使用DSv2表示)以及20 000張的數(shù)據(jù)集DSv3(下文數(shù)據(jù)集均使用DSv3表示)。
訓(xùn)練的目標(biāo)是分別識別紅綠黃燈、斑馬線、限速以及解除限速標(biāo)志。于是對數(shù)據(jù)集進(jìn)行篩選,去掉容易混淆的數(shù)據(jù)集:如綠燈和黃燈,以及紅燈和黃燈容易混淆的圖像。并讓每個類別的數(shù)據(jù)量盡量相近。DSv2篩選之后剩余6000張圖片,制作成數(shù)據(jù)集DSv4(下文該數(shù)據(jù)集均使用DSv4表示)。經(jīng)過實驗對比表明,訓(xùn)練集和驗證集之間的比例參數(shù)在8∶2和9∶1時效果會較好。因此訓(xùn)練過程中,訓(xùn)練集和驗證集之間的比例設(shè)置為8∶2或者9∶1,分別進(jìn)行訓(xùn)練,觀察模型的精度。不同的算法和不同的數(shù)據(jù)集獲得較佳的訓(xùn)練效果使用的比例也不同。大量訓(xùn)練之后的結(jié)果顯示,大多數(shù)算法中訓(xùn)練集與驗證集的比值DSv1使用9∶1;DSv2使用8∶2進(jìn)行訓(xùn)練效果較好。而在實際實驗中,我們使用不同的參數(shù)值進(jìn)行實驗,對比得出較好的比例參數(shù)。
數(shù)據(jù)集制作完成后,需要選擇目標(biāo)檢測算法進(jìn)行訓(xùn)練。不同的目標(biāo)檢測算法和相應(yīng)的參數(shù)都會對模型的精度造成影響。通過實驗采用不同的數(shù)據(jù)集對不同的算法以及不同的參數(shù)設(shè)置來對比得到精度較高的模型。選擇使用并在ModelArts上進(jìn)行訓(xùn)練的算法主要有:YOLOv3ResNet18,F(xiàn)asterRCNNResNet50,RetinaNetResNet50,YOLOv3 Darknet53。其中不同的算法使用不同的預(yù)訓(xùn)練模型,對數(shù)據(jù)進(jìn)行遷移訓(xùn)練。下面將具體介紹算法的預(yù)訓(xùn)練模型,訓(xùn)練集與驗證集的比值以及訓(xùn)練的效果(通過模型的參數(shù)值進(jìn)行體現(xiàn)),其中所有的實驗環(huán)境均使用Python3,Tensorflow的版本為1.13.1。
模型的參數(shù)值為Recall(召回率、查全率),Precision(精確率、查準(zhǔn)率),Accuracy(準(zhǔn)確率)和F1 Score(F1值)。其中具體含義及計算為:
Recall:預(yù)測為正確的正例數(shù)據(jù)占實際為正例數(shù)據(jù)的比例,R=TP/(TP+FN)
Precision:預(yù)測正確的正例數(shù)據(jù)占預(yù)測為正例數(shù)據(jù)的比例,P=TP/(TP+FP)
Accuracy:正確分類的樣本個數(shù)占總樣本個數(shù),A=(TP+TN)/N
F1score:調(diào)和平均值,F(xiàn)=2/(1/P+1/R)=2*P*R/(P+R)
ResNet18網(wǎng)絡(luò)搭載YOLOv3使用ImageNet-1k預(yù)訓(xùn)練模型進(jìn)行訓(xùn)練。ResNet18中有18個帶權(quán)值的層(convl有一個,conv1.x到conv2.x每一個含2×2個,池化層有一個),ResNet網(wǎng)絡(luò)層次較深,故訓(xùn)練效果較好[2]。算法的流程見圖3所示。YOLOv3[3]訓(xùn)練速度快,同時在訓(xùn)練效果上會有所下降。表1展示了不同數(shù)據(jù)集下使用不同訓(xùn)練集與驗證集比值訓(xùn)練模型的參數(shù)值。YOLOv3對比起較新的YOLOv4[4]來看,還是具備很好的性能。YOLOv4提升的是訓(xùn)練速度,就訓(xùn)練效果來看,延用YOLOv3會更適合本模型的訓(xùn)練。
表1 YOLOv3_ResNet18實驗參數(shù)及結(jié)果展示
圖3 使用YOLOv3ResNet18訓(xùn)練模型流程圖
ResNet50網(wǎng)絡(luò)搭載FasterRCNN使用Pascal VOC2007預(yù)訓(xùn)練模型進(jìn)行訓(xùn)練。訓(xùn)練模型流程見圖4所示。ResNet50分為5個Stage,其中Stage0的結(jié)構(gòu)比較簡單,相當(dāng)于對輸入進(jìn)行預(yù)處理,后四個Stage由Bottleneck(瓶頸層,也稱編碼層)組成,Stage1~Stage5分別包含3、4、6,3個Bottleneck。表2展示了不同數(shù)據(jù)集下使用不同訓(xùn)練集與驗證集比值訓(xùn)練模型的參數(shù)值。Faster RCNN是在Fast RCNN基礎(chǔ)上的改進(jìn),使用區(qū)域建議網(wǎng)絡(luò)(Region Proposal Network, RPN)。RPN是端到端訓(xùn)練的,生成高質(zhì)量區(qū)域建議框,用于Fast RCNN來檢測,這很好地改進(jìn)了Fast RCNN在計算區(qū)域建議遇到的問題[5]。
圖4 使用FasterRCNNResNet50訓(xùn)練模型流程圖
表2 FasterRCNN_ResNet50實驗參數(shù)及結(jié)果展示
ResNet50網(wǎng)絡(luò)搭載RetinaNet使用VOC07預(yù)訓(xùn)練模型進(jìn)行訓(xùn)練(在VOC07上mAP為83.15%)。訓(xùn)練模型流程如圖5所示。該算法也使用ResNet50進(jìn)行搭載,RetinaNet誕生于YOLOv3之前,針對One-stage模型中前景和背景類別不平衡的問題,提出Focal Loss損失函數(shù),用來降低大量Easy Negatives(Easy Negatives指的是容易進(jìn)行區(qū)分的負(fù)樣本,相對應(yīng)的為Hard Negatives是較容易被劃分為正樣本的負(fù)樣本。Hard Negatives權(quán)重提高,對模型的訓(xùn)練是有好處的)在標(biāo)準(zhǔn)交叉熵中所占權(quán)重[6]。ReinaNet有效的檢測了Focal Loss損失函數(shù)的有效性。表3展示了不同數(shù)據(jù)集下使用不同訓(xùn)練集與驗證集比值訓(xùn)練模型的參數(shù)值。
表3 RetinaNet_ResNet50實驗參數(shù)及結(jié)果展示
圖5 使用RetinaNetResNet50訓(xùn)練模型流程圖
Darknet框架下搭載的YOLOv3使用YOLOv3-Darknet53的COCO預(yù)訓(xùn)練模型進(jìn)行訓(xùn)練。訓(xùn)練模型流程如圖6所示。Darknet是一個較為輕型的完全基于C與CUDA的框架,易于安裝,沒有任何依賴項,移植性非常好,支持CPU和GPU兩種計算方式。由此可以看出Darknet因為較輕型,沒有很強(qiáng)大的API,但是相比起來也顯得比較靈活。Darknet框架自身的這些特點,顯得更適配YOLO,這也與前面使用的ResNet18形成了對比。表4展示了不同數(shù)據(jù)集下使用不同訓(xùn)練集與驗證集比值訓(xùn)練模型的參數(shù)值。
圖6 使用YOLOv3Darknet53訓(xùn)練模型流程圖
表4 YOLOv3_Darknet53實驗參數(shù)及結(jié)果展示
從以上實驗數(shù)值對比來看,RetinaNet_ResNet50的訓(xùn)練效果較好,同時觀察到訓(xùn)練時間也不是最長的。將實驗所得模型部署在ModelArts上并進(jìn)行預(yù)測,得到預(yù)測結(jié)果如圖7~圖11所示??梢钥吹剑褂媚P皖A(yù)測所得的限速、解除限速、斑馬線以及紅綠燈的識別效果。展示結(jié)果為實驗結(jié)果較好的模型,模型選擇的為數(shù)據(jù)集為DSv3使用RetinaNet_ResNet50訓(xùn)練所得的模型。經(jīng)比較使用該算法綜合性能在四種算法最佳,較適合用來進(jìn)行訓(xùn)練這類數(shù)據(jù)集。選擇實驗過程所得的幾個訓(xùn)練較好的模型進(jìn)行實際運行測試。
圖7 使用模型預(yù)測限速、斑馬線
圖8 使用模型預(yù)測解除限速
圖9 使用模型預(yù)測黃燈
圖10 使用模型預(yù)測綠燈
圖11 使用模型預(yù)測紅燈
模型訓(xùn)練好之后,進(jìn)行實際環(huán)境的運行來觀察模型是否真正適用,即對模型進(jìn)行實際場景下的測試。無人車在模擬路況下使用訓(xùn)練好的模型運行,而在實際運行過程中發(fā)現(xiàn)攝像頭會對現(xiàn)場的場景進(jìn)行二值化處理。由于紅綠燈主要通過顏色進(jìn)行區(qū)分,二值化處理之后模型效果會大幅下降。此時之前模型中對紅綠燈的訓(xùn)練效果大打折扣,對此的改進(jìn)為將標(biāo)注的紅綠燈轉(zhuǎn)化為標(biāo)注紅綠燈所在的位置,如圖12所示劃分。因為紅綠燈分為三塊,每一塊的位置都是固定的,這種情況下在二值化處理之后仍會有很好的識別和檢測效果。在運行過程中記錄運行數(shù)據(jù),能起到類似測試的效果,會對模型的改進(jìn)方向起到了指引的作用。
圖12 紅綠燈按區(qū)域進(jìn)行劃分
同一個數(shù)據(jù)集在數(shù)據(jù)量較少的情況下,可以使用圖像增強(qiáng)的方式對數(shù)據(jù)集進(jìn)行擴(kuò)充,使得訓(xùn)練的效果會更好。同時,在增大了數(shù)據(jù)集的情況下,需要適度地調(diào)整訓(xùn)練集和驗證集之間的比例,以達(dá)到更好的訓(xùn)練效果以及更精確的模型。在同一個數(shù)據(jù)集下,不同的算法所得的精度也不同。不同的算法加上預(yù)訓(xùn)練模型適配的場景會有所差異,通過實驗可以對比出差異,從而更好地訓(xùn)練出目標(biāo)模型。同時,理論與現(xiàn)實存在著一些差異。由于模型的適用場景可能會不同,造成模型沒有訓(xùn)練時顯示的效果好。也會出現(xiàn)有些模型準(zhǔn)確度較高,但是在實際運行環(huán)境中效果可能不如準(zhǔn)確度稍低的模型,經(jīng)過實際實驗效果才能真正檢驗一個模型所適應(yīng)的環(huán)境和它的優(yōu)劣。
注:本文為華為云人工智能大賽無人車挑戰(zhàn)杯比賽各階段相關(guān)技術(shù)測試及驗證介紹,使用的無人小車為賽事提供的比賽車輛,基于華為云的AI開發(fā)平臺——ModelArts進(jìn)行數(shù)據(jù)標(biāo)注及模型訓(xùn)練。