關於我第一次玩 DeepRacer 的經驗

Screenshot 2024-06-12 at 11-29-45 AWS DeepRacer us-east-1

前言

前段時間無意發現了 AWS 在澳門舉辦 AWS DeepRacer 的 AI 賽車挑戰賽,雖然我對這方面完全沒有經驗,但報名條件沒有什麼額外限制,而且還能免費聽一下線上講解,於是就報名了。

DeepRacer2024

總括而言

訓練 AI 來進行賽車的過程就好比訓練狗隻上廁所一般,需要針對它做得好的行為給予獎勵,對於不好的行為給予懲罰或無視,如此這般反覆進行,直到它的行為乎合設定者的預期。

剛開始訓練時大概是這個樣子,車子會盲目行駛甚至駛出界外。

小試牛刀

聽了線上講座對 AI 賽車有了初步的了解後,便嘗試註冊 AWS 帳號,開始摸索如何使用 AWS 的雲計算服務,一步一步的研究。

Screenshot 2024-06-12 at 11-28-48 AWS DeepRacer us-east-1

選擇比賽的路徑(按大會要求)

Screenshot 2024-06-12 at 12-09-27 AWS DeepRacer us-east-1

選擇比賽的類型(這裡也是按大會要求,選擇計時賽類型)和所使用的訓練演算法

Screenshot 2024-06-12 at 12-05-24 AWS DeepRacer us-east-1

選擇速度和角度

Screenshot 2024-06-12 at 12-05-11 AWS DeepRacer us-east-1

然後到了最後而且是最重要的部分,自訂你的 reward function,這個就是我一開始所說的,透過 reward function 來讓你的 AI 模型慢慢的走向你預期的行為。

當然,AWS 明白大家新手們很難從零開始寫出一個 reward function,所以給了我們 3 個範例。

沿著中線走(默認)

Screenshot 2024-06-12 at 12-06-01 AWS DeepRacer us-east-1

留在兩邊內(不出界)

Screenshot 2024-06-12 at 12-06-13 AWS DeepRacer us-east-1

防 Z 字形(不亂漂)

Screenshot 2024-06-12 at 12-06-41 AWS DeepRacer us-east-1

雖然以上的範例可以直接拿來使用,但用來作計時賽就略遜一籌,於是我便稍微的修改一下,以下是我的 reward function:

def reward_function(params):
    
    # 取得當前車輛狀態
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']
    speed = params['speed']
    steering_angle = params['steering_angle']
    steps = params['steps']
    progress = params['progress']
    all_wheels_on_track = params['all_wheels_on_track']
    waypoints = params['waypoints']
    closest_waypoints = params['closest_waypoints']
    
    # 設定獎勵和懲罰的權重
    center_weight = 1.5
    speed_weight = 1.0
    progress_weight = 2.0
    steering_weight = 0.3
    
    # 初始化獎勵值
    reward = 1e-3
    
    # 檢查車輛是否在賽道上
    if not all_wheels_on_track:
        return float(reward)
    
    # 獎勵車輛保持在賽道中心
    reward += (1 - (center_weight * distance_from_center / (0.5 * track_width)))

    # 獎勵車輛保持高速行駛
    reward += (speed_weight * speed / 10)
    
    # 獎勵車輛的進展程度
    reward += (progress_weight * progress / 100)
    
    # 盡量減少步數
    reward += (1 - (steps / 1000))
    
    return float(reward)
    

後續

雖然一開始我只需簡單訓練 2、3 小時就拿了一個不錯的成績,但後來發現了一個新問題,就是 DeepRacer 免費訓練的時間只有 10 小時!

以下是 AWS 的定價:

Screenshot 2024-06-12 at 11-26-11 AWS DeepRacer 定價 - Amazon Web Services

很快的,我的成績被其他人逐漸超越,而我又不敢貿然去花錢訓練。

在我即將放棄的時候,我發現了 deepracer-for-cloud,一個可以搭建在本地上訓練自己 DeepRacer 模型的專案,然後我又踏上另一段旅程。

等待後續…

donate