Donkey Car實做 (2) Train Data蒐集&訓練方法
繼前篇 Donkey Car(1)介紹材料、組裝、車道設計,本篇會在Train Data蒐集、訓練方式琢磨。
自從組好車,當眾人興高采烈,蒐集資料、Train Model,把Model放進樹莓派,把車子發動,以為有之前組長李翼1.5圈基礎,應該不會太難吧。
但是弔詭之處發生了,車子好像只會預測方向,不會預測速度。即使能預測方向,給它固定速度,在車道也跑不過半圈就出界,無疑是跌破眾人眼鏡。

工程師組成團隊,一步步抽絲剝繭,探討失敗原因。
同樣的模型架構、訓練手法,不同的車子結構、訓練資料。所以在確認過車子鏡頭,拍攝角度的確可以照到前方車道線,看起來只剩下訓練資料,需要改善。
資料蒐集
無人自駕車,相對其他股市預測、AOI檢測題目,訓練資料可說是源源不絕,要多少有多少,但是缺點是受物理環境影響很大(1)車子物理結構(2)現實環境的干擾,如光害(3)場地擺設(4)車道規劃,因此蒐集資料訣竅,顯得舉足輕重。
當初蒐集的資料,沒有標準化,也不知道量化概念,導致不論如何蒐集,都沒有成功案例。

仔細看資料內容可以發現,(1)反光(2)黑畫面(3)撞牆畫面,導致整個資料集品質不一。


考量到,開車有許多不同情境,我們開車總會遇到坑洞、突然衝出的車,有一套決策方式(機器學習),來執行解決的方法(演算法)。
所以應該盡可能,把可能遇到的情境,羅列到訓練資料當中,增加訓練資料的多變性,模型也就能學習,人類遇到不同情境,所做出的方法。
資料定義
設計了四種資料型式,蒐集Train Data時遵守Data的比例、跟數量,基本上車子就能很順暢地跑。
- 精確開 : 沿著中線開,保持平衡,不要左右搖擺,如圖一左。
資料目的:學習在正常狀況下,車子如何穩定駕駛。
2. 小幅震盪 : 以中線當基準,小幅的左右搖擺,如圖一右。
資料目的:沿中線的駕駛,以不同角度,去觀察車道,使車子能自行修正回中線駕駛。


3.大幅震盪: 與小幅震盪相同,只是增加擺動幅度,以不碰觸邊界為原則,如圖二左。
資料目的:加強小幅震盪效果。
4. 車道邊界: 讓車子在邊界間,來回曲折前進,開到邊界立即折返,如圖二右。
資料目的:神經網路能學習,車道邊界(極值)輪廓究竟在何處,(1)車道寬(2)彎道曲率,無形中能學習下來,使神經網路認知,車道線不可跨越。


0816資料集:8月16日蒐集的資料,帶領團隊脫離泥沼,取名0816以茲紀念。
0816資料集是比較完善資料,能夠在車道順暢開,並且資料的數量、比例,以及種類都有設計過。大家各自設計的車道,每圈蒐集的照片,可能會有所不同,我們Train Track是一圈概約1100張照片。

要做延伸題目,可以參考下列
5. 避障: 除了車道外,道路上出現障礙物,需要進行閃避,但不可超出車道,需將障礙物不斷隨機擺放。
學習目的:依據障礙物離兩側車道距離,推斷最佳方式是左閃或右閃。

0817資料集:8月17日蒐集的補充資料
為了加強車子穩定,以及增加避障功能,又額外蒐集了不同情境的資料。

訓練方式
(1)0816:順暢開,專注在車道藍色線條。
(2)0817:避障開,專注障礙物閃避。
擁有扎實基礎的訓練資料,作為日後模型訓練基底,我們也意外發現,訓練的步驟,也跟模型性能好壞有關。
像是模型先以0816作為訓練資料,接著再用0817訓練,稱為模型A,效果優於一次性將0816與0817一起訓練的模型B。
模型B時常為了閃避障礙物而出界;相反的,模型A不只掌握了車道不可跨越原則,對於障礙物與車道的閃避關係,也拿捏妥當。

這種現象算是Transfer Learning的效果,在學習過0816(48000張),有了車道權重,接著再往上疊加0817(15000張)障礙物閃避,以權重關係來看,車道就是大於障礙物。
有了不可跨越車道的前提下,才去考慮怎麼閃避障礙物。
參照以往專案經驗,都是資料整理好,一次性訓練居多,不太可能每個專案,都分批定義不同資料集特性。
那麼是否有辦法,只用一次性訓練,使得模型B能達成模型A的性能?
我想是有的,(1)增加訓練資料(2)調整資料型態1–5(順順開…避障開)的比例(3)加深模型Layer,這些方法應該都能,讓避障與車道的效果更突出,進而使模型B達到模型A的性能。
第二集篇章用的有點多,雖然Deep Learn,可以省掉ML在特徵工程的功夫,可是它對資料量以及資料品質,會更為挑剔。
所以資料面、跟訓練手法,不容忽視,就像下圖,如果亂塞三寶的Train Data給Donkey Car,車子行為會跟三寶如出一轍。
下一篇將介紹Donkey Car(3)AI模型。


