

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 了解 AWS DeepRacer 支援的賽車類型並啟用感應器
<a name="deepracer-choose-race-type"></a>

在 AWS DeepRacer 聯盟中，您可以參與下列類型的競賽活動：
+ **限時競賽**：在沒有任何障礙的賽道上於時限內進行競賽，並盡可能地獲得最快的單圈時間。
+ **迴避物件**：在設置了固定障礙物的賽道上於時限內進行競賽，並盡可能地獲得最快的單圈時間。
+ **Head-to-bot競賽**：在相同賽道上與一或多個其他車輛競賽，並瞄準在其他車輛之前跨越終點線。

AWS DeepRacer 社群競賽目前僅支援時間試驗。

您應該在 AWS DeepRacer 車輛上試驗不同的感應器，以提供足夠的功能來觀察特定競賽類型的環境。下一節說明 [AWS DeepRacer 支援的感應器](#deepracer-how-it-works-autonomous-driving-sensors)，可啟用支援的自動賽車事件類型。

**Topics**
+ [選擇 AWS DeepRacer 賽車類型的感應器](#deepracer-how-it-works-autonomous-driving-sensors)
+ [設定用於訓練 AWS DeepRacer 模型的代理程式](#deepracer-configure-agent)
+ [時間試驗的 Tailor AWS DeepRacer 訓練](#deepracer-get-started-training-simple-time-trial)
+ [為物件迴避競賽量身打造 AWS DeepRacer 訓練](#deepracer-get-started-training-object-avoidance)
+ [為head-to-bot競賽量身打造 AWS DeepRacer 訓練](#deepracer-get-started-training-h2h-racing)

## 選擇 AWS DeepRacer 賽車類型的感應器
<a name="deepracer-how-it-works-autonomous-driving-sensors"></a>

您的 AWS DeepRacer 車輛隨附前置單眼相機做為預設感應器。您可以新增另一台面向前方的單眼攝影機，形成面向前方的立體攝影機，或是使用 LiDAR 單位補充單眼攝影機或立體攝影機。

下列清單摘要說明 AWS DeepRacer 支援感應器的功能功能，以及簡短cost-and-benefit分析：

**面向前方的攝影機**  <a name="term-deepracer-sensor-front-facing-monocular-camera"></a>
 面向前方的單鏡頭攝影機可以擷取託管車輛前方環境的影像，包括賽道的邊界和形狀。這是最便宜的感應器，適合處理較簡易的自主駕駛任務，例如在標記清晰賽道上進行的無障礙限時競賽。搭配適當的培訓，其可以迴避賽道上位於固定位置的固定障礙物。但是，由於障礙物的位置資訊是建置在培訓模型中，因此模型可能會過度擬合，無法一般化地適用於其他障礙物置放方式。若固定物件是置放在隨機位置，或是賽道上有其他正在移動的車輛，模型便可能無法收斂。  
在真實世界中，AWS DeepRacer 車輛隨附單鏡頭前置攝影機做為預設感應器。攝影機有 120 度的廣角鏡頭，可擷取 RGB 影像；這些影響接著會轉換成 160 x 120 像素，每秒 15 格 (fps) 的灰階影像。這些感應器屬性會保留在模擬器中，最大化將培訓模型理想地從模擬傳輸到現實世界的機會。

**面向前方的立體攝影機**  <a name="term-deepracer-sensor-front-facing-stereo-cameras"></a>
立體攝影機包含兩個以上的鏡頭，可擷取相同解析度和頻率的影像。來自兩個鏡頭的影像會用來判斷受觀察物件的深度。來自立體攝影機的深度資訊對託管車輛而言，在避免與前方的障礙物或其他車輛發生衝撞時非常有價值，尤其是在更動態的環境下。但是，所新增的深度資訊會讓培訓收斂的速度更慢。  
 在 AWS DeepRacer 實體車輛上，雙鏡頭立體攝影機是透過新增另一個單鏡頭攝影機，並在車輛的左側和右側掛載每個攝影機來建構。AWS DeepRacer 軟體會同步兩個攝影機的影像擷取。擷取到的影像會轉換成灰階、進行堆疊，然後提供給神經網路以進行推論。為了培訓模型，使其能夠適當且一般化適用於現實世界環境，相同的機制會在模擬器中重複進行。

**LiDAR 感應器**  <a name="term-deepracer-sensor-rear-mount-lidar"></a>
 LiDAR 感應器使用旋轉的雷射，傳出位於可見光譜之外的光脈衝，並為傳回每個脈衝所耗費的時間進行計時。特定脈衝擊中的物件方向與距離會以點的方式，記錄在以 LiDAR 單位為中心的大型 3D 映射中。  
例如，LiDAR 有助於偵測託管車輛的盲點，避免在車輛變更車道時發生碰撞。透過將 LiDAR 與單鏡頭或立體攝影機合併，您可以讓託管車輛擷取足夠的資訊，讓其可以採取適當的動作。但是，相較於攝影機，LiDAR 感應器的成本更高。神經網路必須學習如何解譯 LiDAR 資料。因此，培訓將會耗費更長的時間才能收斂。  
 在 AWS DeepRacer 實體車輛上，LiDAR 感應器安裝在後方，並向下傾斜 6 度。感應器會以每秒 10 次旋轉的角速度進行旋轉，且其範圍是 15 公分至 2 公尺。感應器可以偵測託管車輛後方及側面的物件，以及未受車輛前方部分阻擋的高物件。選擇角度和範圍可讓 LiDAR 單位較不容易受到環境雜訊的影響。

 您可以使用下列支援的感應器組合來設定 AWS DeepRacer 車輛：
+ 僅面向前方的單鏡頭攝影機。

  此組態適合限時競賽，以及迴避位於固定位置的物件。
+ 僅面向前方的立體攝影機。

  此組態適用於避免物件位於固定或隨機位置的障礙物。
+ 面向前方的單鏡頭攝影機與 LiDAR。

  此組態適用於障礙物迴避或head-to-bot競賽。
+ 面向前方的立體攝影機與 LiDAR。

  此組態適用於障礙物迴避或head-to-bot競賽，但對於時間試驗可能並非最經濟實惠。

當您新增更多感應器，讓您的 AWS DeepRacer 車輛從時間試驗到物件迴避到head-to-bot競賽時，車輛會收集更多環境相關資料，以便在訓練中饋送至基礎神經網路。這會使得培訓的挑戰性更高，因為模型需要處理更高的複雜性。最後，您的培訓模型學習任務會變得更嚴苛。

若要逐步學習，您應該先開始針對時間試驗進行訓練，然後再繼續進行物件迴避，然後head-to-bot競賽。您將會在下一節中找到更詳細的建議。

## 設定用於訓練 AWS DeepRacer 模型的代理程式
<a name="deepracer-configure-agent"></a>

 若要訓練 AWS DeepRacer 車輛在障礙物迴避或head-to-bot競賽中競賽的強化學習模型，您需要使用適當的感應器來設定代理程式。針對簡易的限時競賽，您可以使用設置單鏡頭攝影機的預設代理程式。在設定代理程式時，您可以自訂動作空間和選擇神經網路拓撲，讓代理程式搭配所選取感應器的執行效能更佳，以符合預期的駕駛需求。此外，您可以變更代理程式的外觀，讓您可以在培訓期間以視覺識別代理程式。

在您進行設定後，代理程式組態會做為模型中繼資料的一部分記錄，以用於培訓和評估。針對評估，代理程式會自動擷取記錄的組態，以使用指定的感應器、動作空間和神經網路拓撲。

本節會逐步解說在 AWS DeepRacer 主控台中設定代理程式的步驟。

**在 AWS DeepRacer 主控台中設定 AWS DeepRacer 代理程式**

1. 登入 [AWS DeepRacer 主控台](https://console.aws.amazon.com/deepracer)。

1. 在主要導覽窗格上，選擇 **Garage (車庫)**。

1. 第一次使用 **Garage (車庫)** 時，您會看到一個 **WELCOME TO THE GARAGE (歡迎來到車庫)** 對話方塊。選擇 **>** 或 **<** 瀏覽 AWS DeepRacer 車輛支援的各種感應器簡介，或選擇 **X** 關閉對話方塊。您可以在 **Garage (車庫)** 中的說明面板上找到此簡介資訊。

1. 在 **Garage (車庫)** 頁面上，選擇 **Build new vehicle (建置新車輛)**。

1.  在 **Mod your own vehicle (修改您自己的車輛)** 頁面上，於 **Mod specification (修改規格)** 下方，選擇一或多個要嘗試的感應器，並學習符合您預期競賽類型的最佳組合。

   若要為您的 AWS DeepRacer 車輛時間試驗進行訓練，請選擇**攝影機**。對於障礙物迴避或head-to-bot競賽，您想要使用其他感應器類型。若要選擇**立體聲攝影機**，請確定您已取得額外的單鏡頭攝影機。AWS DeepRacer 會將立體攝影機推出兩個單鏡頭攝影機。您可以在一台車輛上設置單鏡頭攝影機或雙鏡頭立體攝影機。在任何一種情況下，如果您只希望訓練的模型能夠偵測並避免障礙物迴避或head-to-bot競賽中的盲點，您可以將 LiDAR 感應器新增至代理程式。

1. 在 **Garage (車庫)** 頁面上，於 **Neural network topologies (神經網路拓撲)** 下方，選擇支援的神經網路拓撲。

   一般而言，較深層的神經網路 (較多層) 更適合在更複雜且彎道更急、更多的賽道上進行駕駛、迴避固定障礙物，或是與其他正在移動的車輛進行競賽。但較深層的神經網路，其培訓的成本也會更高，且收斂的時間也會更長。另一方面，較淺層的網路 (較少層) 的成本較低，且培訓的時間也較短。培訓後的模型適合處理較簡易的賽道條件或駕駛需求，例如在無障礙物且無競爭對手的賽道上進行限時競賽。

   具體而言，AWS DeepRacer 支援 **3 層 CNN** 或 **5 層 CNN**。

1. 在 **Garage (車庫)** 頁面上，選擇 **Next (下一步)** 來繼續設定代理程式的動作空間。

1. 在 **Action space (動作空間)** 頁面上，針對您的第一次培訓保留預設設定。針對後續培訓，請針對轉向角度、最高速度及其精細程度使用不同的設定進行實驗。然後選擇**下一步**。

1. 在 **Color your vehicle to stand out in the crowd (為您的車輛上色使其脫穎而出)** 上，在 **Name your DeepRacer (為您的 DeepRacer 命名)** 中輸入名稱，然後在 **Vehicle color (車輛色彩)** 中為代理程式選擇色彩。然後選擇 **Submit (提交)**。

1. 在 **Garage (車庫)** 頁面上，檢查新代理程式的設定。如要進一步修改，請選擇 **Mod vehicle (修改車輛)** 並從 **Step 4 (步驟 4)** 開始重複先前的步驟。

現在您的代理程式已準備好進行培訓。

## 時間試驗的 Tailor AWS DeepRacer 訓練
<a name="deepracer-get-started-training-simple-time-trial"></a>

如果這是您第一次使用 AWS DeepRacer，您應該從簡單的時間試驗開始，以熟悉如何訓練 AWS DeepRacer 模型來駕駛您的車輛。透過這種方式，您可以獲得較溫和的獎勵函數、代理程式、環境等簡介。您的目標是培訓模型，讓您的車輛維持在賽道上，並盡快完成一圈。然後，您可以將訓練過的模型部署到您的 AWS DeepRacer 車輛，以在實體賽道上測試駕駛，而不需要任何其他感應器。

若要訓練此案例的模型，您可以從 AWS DeepRacer 主控台上的 **Garage** 中選擇預設代理程式。預設代理程式已使用單一且面向前方的攝影機進行設定，此為預設的動作空間及預設的神經網路拓撲。在繼續使用更複雜的代理程式之前，使用預設代理程式開始訓練 AWS DeepRacer 模型會很有幫助。

如要使用預設代理程式培訓您的模型，請遵循以下建議。

1. 使用形狀較規則且較少急轉彎的簡易賽道開始培訓您的模型。使用預設獎勵函數。接著培訓模型 30 分鐘。培訓任務完成後，在相同的賽道上評估您的模型，觀察代理程式是否可以完成單圈。

1. 閱讀[獎勵函數參數](deepracer-reward-function-input.md)。使用不同的獎勵繼續培訓，以獎勵代理程式駕駛地更快。將下一個模型的培訓時間延長到 1 至 2 小時。比較第一次培訓和此第二次培訓的獎勵圖表。繼續實驗，直到獎勵圖表停止改善為止。

1. 閱讀[動作空間](deepracer-how-it-works-action-space.md)。透過增加最高速度 （例如 1 m/s) 來訓練模型第 3 次。如要修改動作空間，您必須在獲得進行修改的機會時，在 **Garage (車庫)** 中建置新的代理程式。更新代理程式的最高速度時，請注意最高速度越高，代理程式在評估中完成賽道的速度越快，AWS DeepRacer 車輛在實體賽道上完成單圈的速度就越快。但是，更高的最高速度通常也表示培訓時進行收斂的時間會更長，因為代理程式可能會超過曲線並脫離賽道。建議您減少精細程度，給予代理程式更多空間進行加速或減速，並以其他方式進一步調整獎勵函數，讓培訓收斂的速度更快。在培訓收斂後，評估模型第 3 次來查看單圈時間是否改善。繼續探索，直到沒有任何改善為止。

1. 選擇更複雜的賽道，並重複 **Step 1 (步驟 1)** 至 **Step 3 (步驟 3)**。在與您用來培訓的賽道不同的賽道上評估您的模型，查看模型一般化適用於不同虛擬賽道的程度 [一般化至現實世界環境](deepracer-how-it-works-virtual-to-physical.md)。

1. (選用) 使用不同的[超參數](deepracer-console-train-evaluate-models.md#deepracer-iteratively-adjust-hyperparameters)值進行實驗，以改善培訓程序，並重複 **Step 1 (步驟 1)** 至 **Step 3 (步驟 3)**。

1. （選用） 檢查和分析 AWS DeepRacer 日誌。如需您可以用來分析日誌的範本程式碼，請參閱 [https://github.com/aws-samples/aws-deepracer-workshops/tree/master/log-analysis](https://github.com/aws-samples/aws-deepracer-workshops/tree/master/log-analysis)。

## 為物件迴避競賽量身打造 AWS DeepRacer 訓練
<a name="deepracer-get-started-training-object-avoidance"></a>

 

在您熟悉限時競賽並已培訓數個收斂模型後，前往下一個更嚴苛的挑戰：障礙物迴避。在這裡，您的目標是培訓模型，讓模型能夠在不脫離賽道的情況下盡快完成一圈，同時避免與置放在賽道上的物件發生衝撞。顯然對代理程式而言這是更困難的問題，且培訓收斂所需要耗費的時間也更長。

AWS DeepRacer 主控台支援兩種類型的障礙物迴避訓練：障礙物可以放置在賽道上的固定或隨機位置。若為固定位置，障礙物會在整個培訓任務期間固定在相同的位置。若是隨機位置，障礙物會在每個回合內隨機變更其個別的位置。

針對固定位置障礙物進行的障礙物迴避，培訓進行收斂較為容易，因為系統的自由度較低。但是，如果位置資訊是建置在培訓模型中，模型便可能會過度擬合。因此，模型可能會過度擬合，無法適當地一般化。針對位置隨機的障礙物迴避，培訓進行收斂的難度更高，因為代理程式必須持續學習，避免與位於先前沒見過位置的障礙物發生衝撞。但是，使用此選項培訓的模型，其一般化且傳輸到現實世界競賽的程度也會更高。首先，請先將障礙物置放在固定位置，熟悉行為，然後再處理隨機位置。

在 AWS DeepRacer 模擬器中，障礙物是與 AWS DeepRacer 車輛套件盒具有相同維度 (9.5 英吋 (L) x 15.25 英吋 (W) x 10/5 英吋 (H)) 的立方體方塊。如果您將包裝盒做為障礙物置放在實體賽道上，這可讓將已培訓模型從模擬器傳輸到現實世界的過程更為容易。

如要針對障礙物迴避進行實驗，請遵循下列步驟概述的建議實務：

1. 使用預設代理程式，或是自訂現有代理程式或建置新的代理程式，來實驗新的感應器及動作空間。建議您將最高速度限制在每秒 0.8 公尺以下，並將速度的精細程度限制在 1 或 2 個層級。

   將 2 個物件置放在固定位置，開始培訓模型約 3 個小時。使用範例獎勵函數，在您將在賽車上使用的賽道，或是與該賽道非常相似的賽道上培訓模型。**AWS DeepRacer Smile Speedway （中繼）** 賽道是一個簡單的賽道，使其成為峰會競賽準備的理想選擇。在相同賽道上，使用相同數量的障礙物評估模型。查看總預期獎勵收斂的方式 (若有的話)。

1. 閱讀[獎勵函數參數](deepracer-reward-function-input.md)。實驗您的獎勵函數變異。將障礙物的數量增加到 4。培訓代理程式，查看模型是否在相同的培訓時間長度內收斂。如果沒有，請再次調整您的獎勵函數、降低最高速度或減少障礙物的數量，然後再次培訓代理程式。重複實驗，直到沒有任何顯著的改善為止。

1. 現在，繼續前進，培訓迴避位於隨機位置的障礙物。您需要使用其他感應器來設定代理程式，這些感應器可從 AWS DeepRacer 主控台中的 **Garage** 取得。您可以使用立體攝影機。或者，您可以將 LiDAR 單位與單鏡頭攝影機或立體攝影機合併，但您應預期培訓的時間會更長。使用相對較低的最高速度 （例如 2 公尺/秒） 設定動作空間，讓訓練更快收斂。針對網路架構，請使用淺層神經網路，我們發現這類網路已足以進行障礙物迴避。

1. 使用在簡易賽道上隨機置放的 4 個物件，針對障礙物迴避培訓新的代理程式 4 個小時。然後在相同的賽道上評估您的模型，查看其是否可以完成包含隨機置放障礙物的單圈。如果無法完成，建議您調整您的獎勵函數，嘗試不同的案例，以及延長培訓的時間。另一個提示是您可以嘗試複製現有的模型繼續培訓，以利用先前的學習經驗。

1. (選用) 為動作空間選擇較高的最高速度，或是沿著賽道隨機置放更多障礙物。實驗不同的感應器組合，以及調整獎勵函數和超參數值。實驗 **5-layer CNN (5 層 CNN)** 網路拓撲。然後，保留模型以判斷其影響培訓收斂的方式。

## 為head-to-bot競賽量身打造 AWS DeepRacer 訓練
<a name="deepracer-get-started-training-h2h-racing"></a>

經過訓練障礙物迴避，您現在已準備好面對下一層挑戰：head-to-bot競賽的訓練模型。與障礙物迴避事件不同，head-to-bot競賽具有動態環境與移動的車輛。您的目標是為 AWS DeepRacer 車輛訓練模型，以與其他移動的車輛競爭，以先達到終點線，而不會偏離賽道或撞到任何其他車輛。在 AWS DeepRacer 主控台中，您可以讓代理程式與 1-4 部機器人車輛競爭，藉此訓練head-to-bot賽車模型。一般而言，建議您在較長的賽道上置放較多的障礙物。

每台機器人車輛都會以常數的速度，遵循預先定義的路徑。您可以讓這些車輛變更車道，或是維持在其起始車道上。與障礙物迴避的培訓相似，您可以將機器人車輛平均分散在兩個車道的賽道上。主控台會限制您在賽道上最多有 4 部機器人車輛。在賽道上擁有更多互相競賽的車輛，可讓學習代理程式擁有更多機會，遭遇包含其他車輛且變化更多的情況。透過這種方式，代理程式可以在單一培訓任務中學習更多，使其培訓的速度更快。但是，每個培訓可能都需要較長的時間進行收斂。

如要使用機器人車輛培訓代理程式，建議您將代理程式動作空間的最高速度設為比機器人車輛的 (常數) 速度更高，讓代理程式可以在培訓期間擁有更多通過的機會。做為理想的起點，建議您將代理程式的最高速度設為每秒 0.8 公尺，並將機器人車輛的移動速度設為每秒 0.4 公尺。如果您允許機器人變更車道，培訓的挑戰性會更高，因為代理程式不僅必須學習如何避免與相同車道上位於前方的移動車輛發生衝撞，還需學習如何避免與其他車道上位於前方的車輛發生衝撞。您可以設定機器人，使其依照隨機的間隔變更車道。間隔的長度是從您在開始訓練任務之前指定的時間範圍 （例如 1 秒到 5 秒） 隨機選取。這種變換車道的行為更類似於真實世界head-to-bot競賽行為，且訓練過的客服人員應能產生更好的結果。但是，培訓模型所需要的收斂時間也會更長。

請依照這些建議的步驟來反覆訓練head-to-bot競賽：

1. 在 AWS DeepRacer 主控台的**庫中**，建置使用立體攝影機和 LiDAR 單位設定的新訓練代理程式。您可以只使用立體攝影機，針對機器人車輛培訓相對較佳的模型。LiDAR 可在代理程式變更車道時協助減少盲點。請不要將最高速度設得過高。每秒 1 公尺是理想的起點。

1. 若要訓練head-to-bot競賽，請從兩部機器人車輛開始。將機器人的移動速度設定為低於代理程式的最高速度 （例如，如果代理程式的最高速度為 1 m/s，則為 0.5 m/s)。停用變更車道選項，然後選擇剛建立的培訓代理程式。使用其中一個獎勵函數範例，或是進行最小程度的必要修改，然後培訓 3 個小時。使用賽車使用的賽道，或是與該賽道相似的賽道。**AWS DeepRacer Smile Speedway （中繼）** 賽道是一個簡單的賽道，使其成為峰會競賽準備的理想選擇。培訓完成後，在相同的賽道上評估已培訓的模型。

1. 對於更具挑戰性的任務，請為第二個head-to-bot賽車模型複製您的訓練模型。繼續使用更多機器人車輛進行實驗，或是啟用車道變更選項。請從隨機間隔 2 秒以上的緩慢車道變更操作開始。您可能也會希望實驗自訂獎勵函數。一般而言，如果您並未將超越其他車輛與維持在賽道上之間的平衡納入考量，您的自訂獎勵函數邏輯可能會與障礙物迴避的邏輯相似。取決於您先前模型的良好程度，您可能需要另外培訓 3 至 6 個小時。評估您的模型，並查看模型執行的情況。