今天在 Tensorflow公號看到推文Pixelopolis:由 TensorFlow Lite 構建無人駕駛微型汽車 ,作者介紹了他們在今年Google I/O大會上展示的TensorFlot Lite構建的無人駕駛微型汽車的展品:Pixcelopolis。
▲ TensorFlow Lite構建的無人駕駛微型車
每輛微型汽車都裝配有一部 Pixel 手機,使用手機上的攝像頭檢測和理解周圍的信號。手機使用了 Pixel Neural Core 邊緣計算芯片( Edge TPU 支持的機器學習),可感應車道、避免碰撞和讀取交通標志。
相比于基于云計算來實現視頻處理和物體檢測,邊緣計算可以減少延遲對控制的影響(也許在5G下延遲影響小一點)。
▲ 通過手機識別各種目標的Pixelpolis
下圖是整個展品的布局,模仿了一個小型城鎮廣場周圍的交通環境。參觀者可以通過手機端的一個應用模擬“站點”來選擇出現的目的地。展品中的微型車就可以駕駛到目的地,整個過程用戶可以查看車輛周圍以及所檢測到的物體。
▲ 演示區的道路設計
車模所有對外界的感知都來自于微型車膜前面的手機攝像頭,有它獲取前方的圖片并手機內部署的神經網絡完成車道保持、停車定位、障礙檢測等。通過手機底部的USB-C接口擴展來與底層控制板通訊,完成電機控制等。
▲ 手機應用程序與Pixelopolis交互
▲ 手機端可以查看車輛周圍所檢測到的物品
展品作者采取了與 論文:End-to-end Learning for Self-Driving Cars中相類似的技術錄像,使用卷積神經網絡(CNN)來檢測每幀圖像內的交通指示線,并給出方向盤的調整量。增加了LSTM利用前期拍攝的多個圖像幀進行改進。
▲ CNN 模型的輸入和輸出
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)
一個神經網絡是否能夠達到很好的性能,關鍵在于如何準備好讓它學習的訓練樣本。為此。作者使用Unity, Udacity來構建了模擬器,自動生成訓練車輛的圖像數據。
通過在軌道上設置多個路徑點, 微型汽車 可以行駛到不同的地點,并從中收集數據。在此模擬器中,我們每 50 毫秒收集一次圖像數據和轉角數據。
▲ 模擬器中的軌道中上設有多個路徑點
大家都知道,軟件虛擬出的場景圖片和實際拍攝到的圖片會有很大的差別,包括光線、周圍環境以及其他的噪聲。為了使得訓練的神經網絡能夠適應實際要求,需要對數據進行增強。
他們將以下變量添加到場景中:隨機的 HDRI 球體(具有不同的旋轉模式和曝光值)、隨機的環境亮度和顏色以及隨機出現的車輛。
▲ 各種環境下的數據增強
下圖給出了經過訓練之后,卷積神經網絡的第一層對于輸入圖片的輸出。可以看出,它已經能夠很好地將圖片中道路信息邊緣信息能夠很好的提取,對于背景可以進行有效的壓制。
▲ 第一層神經網絡的輸出
使用神經網絡進行控制的一個最大的問題,就是車模有時會出現莫名其妙的動作。比如下面這個場景,明明已經成功的拐過彎道,進入平坦順直的道路,車模則抽風地沖出跑道了。
這主要是因為所訓練的樣本沒有能夠均勻包含各種道路情況,模型比較脆弱。
▲ 早期版本中玩具車偏離了軌道
為此,在場景中添加了各種形狀的曲線,以豐富原來訓練數據庫中大多數的直線軌道數據。
▲ (左)方形軌道與(右)彎曲軌道
功夫不負有心人,修正數據集不均衡的問題后,車輛便開始能夠在彎道處正確轉向。
▲ 車輛在彎道可以成功轉彎
似乎理性的增加數據可以提高車模的性能,但有時候僅僅采用小的技巧便可以解決大問題。比如當微型車模運行到展品邊緣時,就會看到很多展臺外面的場景。外面的場景多變,很難通過數據來表征這些變化。怎么辦?
作者就用了一個字:切!
將輸入圖像的下面四分之一切出來,送入神經網絡進行訓練,就有效化解了上述的問題。
▲ 展品上的軌道,以及在展品邊緣看到的圖像
為了能夠進行車輛定位以及檢測其它干擾車輛,在手機Pixcel 4上的Neural Core Edge TPU上運行了 ssd_mobilenet_edgetpu 模型,這是來自 TensorFlow 目標檢測模型庫 。每幀檢測時間僅用6.6毫秒,在實時應用中游刃有余。
為了是檢測神經網絡模型能夠適應展品場景需要,作者同樣使用了模擬器和真實場景中的數據來訓練模型。為了提高檢測魯棒性,使用了 Unreal Engine 4 來隨機生成物體和背景。使用 labelImg 工具進行對樣本進行了手動標注。
▲ 進行目標識別的數據庫
使用神經網絡最大的工作量是在準備訓練數據集合。之后的網絡搭建和訓練則非常容易,分分鐘搞定。檢查一下,網絡識別交通標志的效果還是很不錯的。
▲ 網絡識別效果
最后一個工作,就是需要將網絡部署到手機平臺上。這需要借助于TensorFlow Lite 將模型進行個數轉換,并在Android下編寫相應的Python腳本來進行部署。
作者還設想著,通過視覺SLAM能夠為他們的這個展品增加車輛全程定位。真的是一個手機平臺可以練習很多算法。
▲ 視覺SLAM定位
為了實現一個頂著手機運行的微型車膜,作者也是費力不斷改進機械結構,經過了五代設計最終得到了一個合理的機械設計。可以將手機、控制板、電池、電機等集成在一個小巧乖致的微型車模中。
▲ 第一代設計
▲ 第二代設計
▲ 第三代射擊
▲ 第四代設計
▲ 第五代設計
下面給出了嵌入在車體內部的控制板、電機、電池等配件。
▲ 底層運動控制單片機板
▲ (左)屏蔽罩和電機,(右)電源插座、電源開關、電機啟動按鈕、電機重置按鈕、開發板狀態 LED、電機狀態 LED
▲ 3000mAh 鋰離子電池(左)與 18650 鋰離子電池(右)
的確,一輛小小的微型車模,包括了計算機視覺、深度學習、傳感器融合、定位、路徑規劃、控制、系統集成等多個學科內容。通過這個環節幾乎可以將一個專業所需要學習的多個課程集成在一起。這不,在Udacity平臺上,還真的提供了無人駕駛汽車納米學位項目 供希望獲得全面培訓的工程師和學生學習。
教育部自動化類高等教學委員會在清華召開了院長會議,其中李少遠老師對今年大學生學科競賽實踐教學進行了總結。以在剛剛過去的暑期中,新冠疫情影響下,成功舉辦的全國大學生智能車競賽為例,探索面向未來實踐發展。希望智能車競賽為工科學生的大學期間專業課程實踐提供更好的鍛煉平臺。
責任編輯:haq
-
鋰電池
+關注
關注
260文章
8103瀏覽量
170008 -
芯片
+關注
關注
455文章
50756瀏覽量
423335 -
網絡
+關注
關注
14文章
7560瀏覽量
88748 -
無人駕駛
+關注
關注
98文章
4057瀏覽量
120467 -
TensorFlow Lite
+關注
關注
0文章
26瀏覽量
619
發布評論請先 登錄
相關推薦
評論