自動(dòng)駕駛科普:無(wú)人車能夠上路的五個(gè)過(guò)程詳解
與人類用雙眼去觀察路面、用手去操控方向盤類似,無(wú)人車用一排攝像機(jī)去感知環(huán)境,用深度學(xué)習(xí)模型指導(dǎo)駕駛。大體來(lái)說(shuō),這個(gè)過(guò)程分為五步:
記錄環(huán)境數(shù)據(jù)
分析并處理數(shù)據(jù)
構(gòu)建理解環(huán)境的模型
訓(xùn)練模型
精煉出可以隨時(shí)間改進(jìn)的模型
如果你想了解無(wú)人車的原理,那這篇文章不容錯(cuò)過(guò)。
記錄環(huán)境數(shù)據(jù)
一輛無(wú)人車首先需要具備記錄環(huán)境數(shù)據(jù)的能力。
具體來(lái)說(shuō),我們的目標(biāo)是得到左右轉(zhuǎn)向角度的均勻分布。這倒也不難操作,可以以順時(shí)針和逆時(shí)針?lè)较蛟跍y(cè)試場(chǎng)地內(nèi)繞圈的方式實(shí)現(xiàn)。這種訓(xùn)練有助于減少轉(zhuǎn)向偏差,避免長(zhǎng)時(shí)間駕駛后汽車從道路一邊慢慢漂移到道路另一邊的尷尬情境。
此外,以慢速(例如每小時(shí)10英里)行駛也有助于在轉(zhuǎn)彎時(shí)記錄平滑的轉(zhuǎn)向角,在這里駕駛行為被分類為:
直線行駛:0《=X《0.2
小轉(zhuǎn)彎:0.2《=X《0.4
急轉(zhuǎn):X》=0.4
恢復(fù)到中心
其中,X為轉(zhuǎn)向角,r為旋轉(zhuǎn)半徑(單位為米),計(jì)算轉(zhuǎn)向角的公式為X=1/r。上面提到的“恢復(fù)到中心”在數(shù)據(jù)記錄過(guò)程中很重要,它幫助車輛學(xué)會(huì)在即將撞上,馬路崖子時(shí)回到車道中心。這些記錄數(shù)據(jù)保存在driving_log.csv中,其中每一行都包含:
文件路徑到鏡頭前中央相機(jī)圖像
文件路徑到前左相機(jī)圖像
文件路徑到前右相機(jī)圖像
轉(zhuǎn)向角
在記錄環(huán)境數(shù)據(jù)的過(guò)程中,我們需要記錄約100000個(gè)轉(zhuǎn)向角的圖像,以便提供足夠的數(shù)據(jù)訓(xùn)練模型,避免因樣本數(shù)據(jù)不足導(dǎo)致的過(guò)擬合。通過(guò)在數(shù)據(jù)記錄過(guò)程中定期繪制轉(zhuǎn)向角直方圖,可以檢查轉(zhuǎn)向角是否為對(duì)稱分布。
分析處理數(shù)據(jù)
第二步是為構(gòu)建模型分析和準(zhǔn)備剛剛記錄的數(shù)據(jù),此時(shí)的目標(biāo)是為模型生成更多的訓(xùn)練樣本。
下面這張圖片由前中央相機(jī)拍攝,分辨率為320*160像素,包含紅色、綠色和藍(lán)色的channel。在Python中,可以將其表示為一個(gè)三維數(shù)組,其中每個(gè)像素值的范圍在0到255之間。
司機(jī)視線以下的區(qū)域和兩邊的車道標(biāo)志一直是自動(dòng)駕駛技術(shù)中研究的重點(diǎn)。這兩部分可以使用Keras中的Cropping2D裁剪圖像,減少輸入到模型中的噪聲。
我們可以用開(kāi)源的計(jì)算機(jī)視覺(jué)庫(kù)OpenCV從文件中讀取圖像,然后沿垂直軸翻轉(zhuǎn),生成一個(gè)新的樣本。OpenCV非常適合自動(dòng)駕駛汽車用例,因?yàn)樗怯?u>C++語(yǔ)言編寫的。像傾斜和旋轉(zhuǎn)這樣的其他圖像增強(qiáng)技術(shù),也有助于產(chǎn)生更多的訓(xùn)練樣本。
此外,還需要通過(guò)乘以-1.0翻轉(zhuǎn)其轉(zhuǎn)向角。
之后,可以用Numpy開(kāi)源庫(kù)將圖像重新塑造成一個(gè)三維數(shù)組,方便下一步的建模。
構(gòu)建理解環(huán)境的模型
圖像數(shù)據(jù)搞定后,我們需要為無(wú)人車構(gòu)建理解環(huán)境信息的深度學(xué)習(xí)模型,從記錄的圖像中提取特征。
具體來(lái)說(shuō),我們的目標(biāo)是將包含153600像素的輸入圖像映射到包含單個(gè)浮點(diǎn)值的輸出。英偉達(dá)之前提出的模型的每一層都提供了特定的功能,作為基礎(chǔ)架構(gòu)效果應(yīng)該不錯(cuò)。
英偉達(dá)模型相關(guān)論文地址:https://arxiv.org/pdf/1604.07316v1.pdf
之后,我們需要將三維數(shù)組規(guī)范化為單位長(zhǎng)度,防止模型中較大的值偏差。注意我們將其除以255.0,因?yàn)檫@是一個(gè)像素的最大可能值。
還要適當(dāng)減少人類視野以下的車前場(chǎng)景和車前上方圖像的像素,以減少噪音。