需要更換手機(jī)了:由TensorFlow Lite構(gòu)建無人駕駛微型汽車
今天在 Tensorflow公號(hào)看到推文Pixelopolis:由 TensorFlow Lite 構(gòu)建無人駕駛微型汽車?,作者介紹了他們?cè)诮衲闓oogle I/O大會(huì)上展示的TensorFlot Lite構(gòu)建的無人駕駛微型汽車的展品:Pixcelopolis。
▲ TensorFlow Lite構(gòu)建的無人駕駛微型車
每輛微型汽車都裝配有一部?Pixel?手機(jī),使用手機(jī)上的攝像頭檢測(cè)和理解周圍的信號(hào)。手機(jī)使用了?Pixel Neural Core?邊緣計(jì)算芯片(?Edge TPU?支持的機(jī)器學(xué)習(xí)),可感應(yīng)車道、避免碰撞和讀取交通標(biāo)志。
相比于基于云計(jì)算來實(shí)現(xiàn)視頻處理和物體檢測(cè),邊緣計(jì)算可以減少延遲對(duì)控制的影響(也許在5G下延遲影響小一點(diǎn))。
▲ 通過手機(jī)識(shí)別各種目標(biāo)的Pixelpolis
下圖是整個(gè)展品的布局,模仿了一個(gè)小型城鎮(zhèn)廣場(chǎng)周圍的交通環(huán)境。參觀者可以通過手機(jī)端的一個(gè)應(yīng)用模擬“站點(diǎn)”來選擇出現(xiàn)的目的地。展品中的微型車就可以駕駛到目的地,整個(gè)過程用戶可以查看車輛周圍以及所檢測(cè)到的物體。
▲ 演示區(qū)的道路設(shè)計(jì)
車模所有對(duì)外界的感知都來自于微型車膜前面的手機(jī)攝像頭,有它獲取前方的圖片并手機(jī)內(nèi)部署的神經(jīng)網(wǎng)絡(luò)完成車道保持、停車定位、障礙檢測(cè)等。通過手機(jī)底部的USB-C接口擴(kuò)展來與底層控制板通訊,完成電機(jī)控制等。
▲ 手機(jī)應(yīng)用程序與Pixelopolis交互
▲ 手機(jī)端可以查看車輛周圍所檢測(cè)到的物品
展品作者采取了與?論文:End-to-end Learning for Self-Driving Cars中相類似的技術(shù)錄像,使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來檢測(cè)每幀圖像內(nèi)的交通指示線,并給出方向盤的調(diào)整量。增加了LSTM利用前期拍攝的多個(gè)圖像幀進(jìn)行改進(jìn)。
▲ CNN 模型的輸入和輸出
控制器的模型很簡(jiǎn)單,下面代碼就給出了網(wǎng)絡(luò)的結(jié)構(gòu)構(gòu)成。
net_in = Input(shape = (80, 120, 3))
x = Lambda(lambda x: x/127.5 - 1.0)(net_in)
x = Conv2D(24, (5, 5), strides=(2, 2),padding="same", activation='elu')(x)
x = Conv2D(36, (5, 5), strides=(2, 2),padding="same", activation='elu')(x)
x = Conv2D(48, (5, 5), strides=(2, 2),padding="same", activation='elu')(x)
x = Conv2D(64, (3, 3), padding="same",activation='elu')(x)
x = Conv2D(64, (3, 3), padding="same",activation='elu')(x)
x = Dropout(0.3)(x)
x = Flatten()(x)
x = Dense(100, activation='elu')(x)
x = Dense(50, activation='elu')(x)
x = Dense(10, activation='elu')(x)
net_out = Dense(1, name='net_out')(x)
model = Model(inputs=net_in, outputs=net_out)
一個(gè)神經(jīng)網(wǎng)絡(luò)是否能夠達(dá)到很好的性能,關(guān)鍵在于如何準(zhǔn)備好讓它學(xué)習(xí)的訓(xùn)練樣本。為此。作者使用Unity, Udacity來構(gòu)建了模擬器,自動(dòng)生成訓(xùn)練車輛的圖像數(shù)據(jù)。
通過在軌道上設(shè)置多個(gè)路徑點(diǎn),?微型汽車?可以行駛到不同的地點(diǎn),并從中收集數(shù)據(jù)。在此模擬器中,我們每 50 毫秒收集一次圖像數(shù)據(jù)和轉(zhuǎn)角數(shù)據(jù)。
▲ 模擬器中的軌道中上設(shè)有多個(gè)路徑點(diǎn)
大家都知道,軟件虛擬出的場(chǎng)景圖片和實(shí)際拍攝到的圖片會(huì)有很大的差別,包括光線、周圍環(huán)境以及其他的噪聲。為了使得訓(xùn)練的神經(jīng)網(wǎng)絡(luò)能夠適應(yīng)實(shí)際要求,需要對(duì)數(shù)據(jù)進(jìn)行增強(qiáng)。
他們將以下變量添加到場(chǎng)景中:隨機(jī)的 HDRI 球體(具有不同的旋轉(zhuǎn)模式和曝光值)、隨機(jī)的環(huán)境亮度和顏色以及隨機(jī)出現(xiàn)的車輛。
▲ 各種環(huán)境下的數(shù)據(jù)增強(qiáng)
下圖給出了經(jīng)過訓(xùn)練之后,卷積神經(jīng)網(wǎng)絡(luò)的第一層對(duì)于輸入圖片的輸出。可以看出,它已經(jīng)能夠很好地將圖片中道路信息邊緣信息能夠很好的提取,對(duì)于背景可以進(jìn)行有效的壓制。
▲ 第一層神經(jīng)網(wǎng)絡(luò)的輸出
使用神經(jīng)網(wǎng)絡(luò)進(jìn)行控制的一個(gè)最大的問題,就是車模有時(shí)會(huì)出現(xiàn)莫名其妙的動(dòng)作。比如下面這個(gè)場(chǎng)景,明明已經(jīng)成功的拐過彎道,進(jìn)入平坦順直的道路,車模則抽風(fēng)地沖出跑道了。
這主要是因?yàn)樗?xùn)練的樣本沒有能夠均勻包含各種道路情況,模型比較脆弱。
▲ 早期版本中玩具車偏離了軌道
為此,在場(chǎng)景中添加了各種形狀的曲線,以豐富原來訓(xùn)練數(shù)據(jù)庫中大多數(shù)的直線軌道數(shù)據(jù)。
▲ (左)方形軌道與(右)彎曲軌道
功夫不負(fù)有心人,修正數(shù)據(jù)集不均衡的問題后,車輛便開始能夠在彎道處正確轉(zhuǎn)向。
▲ 車輛在彎道可以成功
轉(zhuǎn)彎
似乎理性的增加數(shù)據(jù)可以提高車模的性能,但有時(shí)候僅僅采用小的技巧便可以解決大問題。比如當(dāng)微型車模運(yùn)行到展品邊緣時(shí),就會(huì)看到很多展臺(tái)外面的場(chǎng)景。外面的場(chǎng)景多變,很難通過數(shù)據(jù)來表征這些變化。怎么辦?
作者就用了一個(gè)字:切!
將輸入圖像的下面四分之一切出來,送入神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,就有效化解了上述的問題。
▲ 展品上的軌道,以及在展品邊緣看到的圖像
為了能夠進(jìn)行車輛定位以及檢測(cè)其它干擾車輛,在手機(jī)Pixcel 4上的Neural Core Edge TPU上運(yùn)行了?ssd_mobilenet_edgetpu?模型,這是來自?TensorFlow 目標(biāo)檢測(cè)模型庫?。每幀檢測(cè)時(shí)間僅用6.6毫秒,在實(shí)時(shí)應(yīng)用中游刃有余。
為了是檢測(cè)神經(jīng)網(wǎng)絡(luò)模型能夠適應(yīng)展品場(chǎng)景需要,作者同樣使用了模擬器和真實(shí)場(chǎng)景中的數(shù)據(jù)來訓(xùn)練模型。為了提高檢測(cè)魯棒性,使用了?Unreal Engine 4?來隨機(jī)生成物體和背景。使用 labelImg 工具進(jìn)行對(duì)樣本進(jìn)行了手動(dòng)標(biāo)注。
▲ 進(jìn)行目標(biāo)識(shí)別的數(shù)據(jù)庫
使用神經(jīng)網(wǎng)絡(luò)最大的工作量是在準(zhǔn)備訓(xùn)練數(shù)據(jù)集合。之后的網(wǎng)絡(luò)搭建和訓(xùn)練則非常容易,分分鐘搞定。檢查一下,網(wǎng)絡(luò)識(shí)別交通標(biāo)志的效果還是很不錯(cuò)的。
▲ 網(wǎng)絡(luò)識(shí)別效果
最后一個(gè)工作,就是需要將網(wǎng)絡(luò)部署到手機(jī)平臺(tái)上。這需要借助于TensorFlow Lite 將模型進(jìn)行個(gè)數(shù)轉(zhuǎn)換,并在Android下編寫相應(yīng)的Python腳本來進(jìn)行部署。
作者還設(shè)想著,通過視覺SLAM能夠?yàn)樗麄兊倪@個(gè)展品增加車輛全程定位。真的是一個(gè)手機(jī)平臺(tái)可以練習(xí)很多算法。
▲ 視覺SLAM定位
為了實(shí)現(xiàn)一個(gè)頂著手機(jī)運(yùn)行的微型車膜,作者也是費(fèi)力不斷改進(jìn)機(jī)械結(jié)構(gòu),經(jīng)過了五代設(shè)計(jì)最終得到了一個(gè)合理的機(jī)械設(shè)計(jì)??梢詫⑹謾C(jī)、控制板、電池、電機(jī)等集成在一個(gè)小巧乖致的微型車模中。
▲ 第一代設(shè)計(jì)
▲ 第二代設(shè)計(jì)
▲ 第三代射擊
▲ 第四代設(shè)計(jì)
▲ 第五代設(shè)計(jì)
下面給出了嵌入在車體內(nèi)部的控制板、電機(jī)、電池等配件。
▲ 底層運(yùn)動(dòng)控制單片機(jī)板
▲ (左)屏蔽罩和電機(jī),(右)電源插座、電源開關(guān)、電機(jī)啟動(dòng)按鈕、電機(jī)重置按鈕、開發(fā)板狀態(tài) LED、電機(jī)狀態(tài) LED
▲ 3000mAh 鋰離子電池(左)與 18650 鋰離子電池(右)
的確,一輛小小的微型車模,包括了計(jì)算機(jī)視覺、深度學(xué)習(xí)、傳感器融合、定位、路徑規(guī)劃、控制、系統(tǒng)集成等多個(gè)學(xué)科內(nèi)容。通過這個(gè)環(huán)節(jié)幾乎可以將一個(gè)專業(yè)所需要學(xué)習(xí)的多個(gè)課程集成在一起。這不,在Udacity平臺(tái)上,還真的提供了?無人駕駛汽車納米學(xué)位項(xiàng)目?供希望獲得全面培訓(xùn)的工程師和學(xué)生學(xué)習(xí)。
今天下午,教育部自動(dòng)化類高等教學(xué)委員會(huì)在清華召開了院長(zhǎng)會(huì)議,其中李少遠(yuǎn)老師對(duì)今年大學(xué)生學(xué)科競(jìng)賽實(shí)踐教學(xué)進(jìn)行了總結(jié)。以在剛剛過去的暑期中,新冠疫情影響下,成功舉辦的全國(guó)大學(xué)生智能車競(jìng)賽為例,探索面向未來實(shí)踐發(fā)展。希望智能車競(jìng)賽為工科學(xué)生的大學(xué)期間專業(yè)課程實(shí)踐提供更好的鍛煉平臺(tái)。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!