影像AI在自駕車上的模型訓練實作

文/連宏城

人工智慧(AI)近年因為硬體計算能力大幅提升而展現飛躍的發展,尤其是以深度學習為核心的類神經網路更開啟機器學習新的篇章。另一方面電動汽車領域,由於要對抗氣候變遷和嚴重空汙,美國最大汽車市場加州宣布從2035年起,不能再銷售汽、柴油新車,讓世界各大傳統車廠面臨轉型壓力,值此之際,特斯拉公司崛起,旗下電動車挾著綠能和AI輔助駕駛功能在全球攻城掠地,股價更是一飛沖天,顛覆整個汽車市場。


圖1.特斯拉電動車(出處)

未來汽車產業決戰點包括以AI為核心的自駕技術和以電池能源為主軸的技術。其中以AI為核心的自駕技術是現今傳統車廠共同的痛,因為傳統車廠不擅長AI科技,但要對付的卻是Google、蘋果、特斯拉等科技大廠,因而備感艱辛。

自駕技術(Autonomous Car)是利用感測器、機器視覺、訊號處理、機器學習、電腦運算、路線預測等技術,達到自動無人駕駛功能,因此亦稱作「無人駕駛」,由於它會進一步帶來運輸產業變革,因此各國政府、各家車廠、新創企業無不競相投入研究。目前各領域發展皆很迅猛,特斯拉以低價的多台照相機為核心進行環境感測,Google旗下的Waymo則以高價光學雷達挑大樑,目的都是要更好的感知周遭環境,達到更好更安全的自駕效果。


表1.自駕技術常用的感測器

自駕技術用的照相感測技術相比一般人眼所能看見的影像,自駕車透過數位相機所能「看見」影像最遠可達數公里,並且透過AI影像識別快速確認車輛周圍是否有其他車輛靠近,並判斷車輛是否偏離車道行駛範圍。


圖2.USB界面4K(3840x2160)高解析度照梘機

跟光學雷達相比較,照相機價格遠較便宜,若能充分搭配AI技術發揮各種應用,應是未來較具競爭力的方案。AI技術近年在台灣發展迅速,教育界和工商業界無不積極投入,本文即以照相機方案為出發點,嘗試機器學習不同訓練方法,希望能透過影片訓練達到速度判斷目的。

結果摘要:以17分鐘影片為訓練資料,分切75%為訓練集,25%為測試集,達到0.27MSE,5%MAE。

問題:給定一支17分鐘長度,fps為20的影片作為訓練資料集,要訓練出能預測速度的模型。


表2.訓練影片格式

影片格式為mp4,可播放如下:

圖3.所要訓練的影片

要測得車子速度有許多種方式,第1種測速方式主要用物理方法進行計算,以車子本身來說,輪子會有轉速計,能測得本身轉了多少圈,圈數乘以輪子圓周長即為所行距離,接著再除以時間可獲得速度。

第2種測速方式也是用物理方法進行計算,透過車內的加速度慣性感測裝置(IMU sensor),配合牛頓運動學公式算出速度:
Vt^2=V0^2+2aS
末速平方=初速平方+2倍加速度乘上位移

第3種方式為利用GPS訊號,在兩個不同的時間刻度取得不同GPS座標,根據座標差得到位移後再除以時間也能獲得速度。

第4種為利用AI訓練已知路駕影片,讓機器由中學習不同圖片間隔所代表的速度,從而獲得AI模型以便對速度進行預測,本文即針對此方法進行實驗。

表3.車子量測速度方法

以下將針對第4種方式進行實驗。

由於速度的量度乃是單位時間所走的距離,所以必需針對影片兩兩圖片之間進行「差距」運算,然後再標上正確速度作為訓練圖資。

第1步:從影片擷取圖片,17分鐘共20400張圖片(17x60x20)

圖4.擷取圖片,兩兩間隔1/20秒

第2步:兩兩圖片之間進行「差距」運算


圖5.後圖-前圖=差距

第3步:特徵擷取
筆者一開始使用卷積神網路(CNN)進行訓練,但CNN較常用在分類,例如分辨貓或狗,而本專案目的是預測速度,最終只要有一個神經元即可,所以使用迴歸算法。本步驟將「第2步」的差距圖分割成8x6,共48個小格,每小格像素顏色值加總,每張差距圖取48個特徵。


圖6.每張差距圖取48個分割


表4.48個分割區的特徵值,此值為亮度值加總開根號,因為越亮表示位移越大,開根號是因為像素總數表示面積,開根號才表示邊長,邊長跟位移較有正相關性。

第4步:訓練模型
使用2個全連接層,啟動函數「relu」,最後一層只有一個神經元,損失函數用MSE(均方差),打亂排列順序後75%圖片用作訓練,25%用作測試。


圖7.訓練參數

訓練過程:

表5.400張圖片從訓練到驗證不到1分鐘,並且損失能夠收斂

訓練結果:
MSE:25.19(平均誤差約為5MPH,每小時5英里)
MAE:17%

第5步:優化模型1
使用十倍數量圖片訓練,其餘參數相同。


表6.4000張圖片從訓練到驗證也不到1分鐘,並且損失能夠快速收斂,表示圖片越多張效果愈好。

訓練結果:
MSE:4.8(平均誤差約為2.2MPH)
MAE:8%

第6步:優化模型2
AI模型訓練過程中除了參數調校之外,就屬資料集最重要,好的資料帶你上天堂,錯誤資料則可能會造成模型訓練不起來或模型效果不佳。本優化方法是要以光流(Optical flow)方法計算兩圖差距。

光流是關於視域中的物體運動檢測中的概念。用來描述相對於觀察者的運動所造成的觀測目標、表面或邊緣的運動。光流法在樣型識別、計算機視覺以及其他影像處理領域中非常有用,可用於運動檢測、物件切割、碰撞時間與物體膨脹的計算、運動補償編碼,或者通過物體表面與邊緣進行立體的測量等等。(維基百科)


表7.20400張圖片從訓練到驗證也不到1分鐘,並且損失能夠更快速收斂,表示模型更佳。

訓練結果:
MSE:1.13(平均誤差約為1MPH)
MAE:6%

第7步:優化模型3(由10回合增加至100回合)
由上一步結果明顯得知光流演算法所取得兩圖之間的差距所訓練出來的模型更為精準,MAE僅6%,意思是速度為100MPH之下所測絕對誤差平均為6MPH,才訓練10回合便有這麼好的結果,接下來要將回合數增加至100回合進行測試。


表8.20400張圖片從訓練到驗證大約5分鐘,損失快速收斂,模型愈來愈佳。

訓練結果:
MSE:0.27(平均誤差約為0.5MPH)
MAE:2.53%

 結論


本文所做實驗題目出處源自美國新創自駕公司comma.ai,是由號稱地表最強駭客所創立,創始人George Hotz不僅幫特斯拉做了第一代AI自駕核心,並且隨後將之開源,促成無人自駕AI模型訓練的篷勃發展。


圖8.comma.ai 開源自駕執行畫面(出處:By Jfrux - Own work, CC BY-SA 4.0

George Hotz方案以影像AI為核心,本文即為他所提出的挑戰(https://github.com/commaai/speedchallenge),希望透過影像和AI訓練即可獲得逼近傳統測速裝置功能,他所提的檢驗標準如下:

<10 is good. <5 is better. <3 is heart.

若是MSE能在10之內,表示「好」
若是MSE能在5之內,表示「更好」
若是MSE能在3之內,表示「紅心」

標準整理如下表:


表9.測速競賽結果評比標準

筆者最佳結果為0.27MSE,是為紅心。然而在得到紅心解之前,筆者嘗試了常用的迴歸和CNN來訓練模型,但結果慘不忍賭,誤差太大導致模型不堪使用。美國UCLA大學資料團隊也有進行挑戰,使用的是ResNet,以每個像素點為Input神經元,測得7MSE不錯結果。出題人Comma.ai則能做到4MSE,相當於2MPH速度誤差。後來筆者使用opencv從原始圖像處理著手,有了好的圖資再加上分區取特徵方式達到0.27MSE,相當於0.5~0.6MPH誤差。能達到紅心解主要差別應是利用opencv的光流演算法進行資料前處理,之後再分48區段擷取特徵,而不是每個像素點都視為Input,不僅將訓練時間從數小時縮短至數分鐘(筆者使用Macbook Pro筆電進行訓練),並且大幅提高準確度,各㮔方法結果簡列如下。


表10.不同團隊不同思路的結果

 展望


本實驗以17分鐘影片即能訓練出可用速度預測模型,訓練速度快結果準確度高,說明基於影像的AI訓練具有潛力,如果能藉由AI影像訓練藉由圖片差距得知速度,理論上也能獲得相對距離,未來如果能搜集更多影片進行訓練,應更能發揮影像自駕方案應用,不必使用昂貴的光學雷達,大幅降低自駕價格門檻,加速科技運輸載具普及。

 附錄:模型訓練與驗證程式碼及解說



圖9.程式碼1/2

第1行:匯入numpy模組
第2行:匯入pandas模組
第3行:匯入Keras 序列與載入模組
第4行:匯入Keras 全連接層模組
第5行:
第6行:定義資料取得函式
第7行:設定numpy的亂數種子
第8行:取得輸入資料集
第9行:去掉資料集的說明列
第10行:是否打亂資料集,打亂的話同質性低訓練效果較佳
第11行:打亂資料集
第12行:取得資料集筆數和行數
第13行:列出資料集筆數和行數
第14行:取得所有特徵
第15行:取得所有正確速度標簽
第16行:將特徵減去平均值
第17行:將特徵除以標準差,預防資料範圍過大,可得較佳效果
第18行:訓練集和驗證集的分隔
第19行:訓練集特徵和正確標簽
第20行:驗證集特徵和正確標簽
第21行:返回訓練集和驗證集
第22行:
第23行:定義資料平滑化函式,模擬度更逼真,MSE更佳
第24行:qty=資料集筆數
第25行:走訪每3筆資料
第26行:判斷
第27行:中間高資料取首尾平均值
第28行:走訪每3筆資料
第29行:判斷
第30行:中間低資料取首尾平均值
第31行:返回平滑後資料集


圖10.程式碼 2/2

第32~34行:呼叫getDataset函式取得資料集
第35~41行:模型基本架構
第43~46行:訓練模型並儲存模型
第48~55行:取出模型進行驗證
第60~69行:計算MSE和MAE,並儲存驗證結果



連宏城
行動創客學院執行長