AWS DeepRacerの設定を(ほぼ)全デフォ&サクッとレースに出た

    AWS DeepRacerの設定を(ほぼ)全デフォ&サクッとレースに出た

    目次

       

       

      はじめに

      クラウドインテグレーション部の渡邊です。
      Japan AWS Jr. Championsのコミュニティイベントの中でAWS DeepRacerを体験してきたので、そちらを紹介します。

       

      Japan AWS Jr. Championsとは?

      AWS Partner Network (APN) 参加企業に所属し、現在社会人歴 1 ~ 3 年目で AWS を積極的に学び、アクションを起こし、周囲に影響を与えている APN 若手エンジニア

      引用元:2023 Japan AWS Jr. Champions の発表

      Japan AWS Jr. Championsのメンバーと、勉強会やLT会など定期的に活動しています。
      20231207_DeepRacer_012023 Japan AWS Jr. Champions 表彰時の写真

      今回はAWS DeepRacerが結構試しやすい仕様になっていたので、どれくらい試しやすいかを手順を示しながら紹介します。
      AWS DeepRacerとは3Dレーシングシミュレーターで自動運転モデルを作成し、機械学習を学べるサービスです。 20231207_DeepRacer_02

      このように自分が作成した自動運転モデルを3Dシミュレーターの様子を動画で見ることができ親しみやすいです。
      あなたも、すぐに自身のコンソール画面からこの画面を見ることができますのでぜひ一緒にやってみましょう。
      AWS DeepRacerのDashboardはこちら 
      執筆時点では(2023/10/6時点)バージニア北部(us-east-1)のみサポートしているので、その点に注意してください。

      現在、こちらの画面が見えていると思います。20231207_DeepRacer_03 

      左ペインの「Resources」のところに勉強用のリソースがあるので深く学んで見たい方はこちらを参考にするとよいと思います。20231207_DeepRacer_04

      ※構築する中で設定内容について説明しますが、簡潔に説明するために正確でない可能性があります。ご了承ください。

      実際にやってみる

       

      モデルの作成

      今回設定を入力または変更する場所は、モデル名、コース名、レースへの参加可否のみです。とても簡単です!

      こちらまたは「Your models」>「Create model」から早速モデルを作成しましょう!

      Training details

      モデル名と説明(オプション)を入力します。
      モデル名はスペースやアンダーバー(_)が使えないのでハイフン(-)を単語の区切り文字として指定しております。20231207_DeepRacer_05

      Environment simulation

      シミュレーションするコースを選びます(デフォルトでもよいです)。
      レースに参加する場合はそのレースと同じものを選んでシミュレーションしましょう。
      今回はシンプルなコースとして「Smile Speedway」を選択しました(「View more race tracks」から、さまざまなコースを確認できます)。
      20231207_DeepRacer_06

      レースを周回する向きも指定できます。

      20231207_DeepRacer_07

      Race type

      以下3タイプの中から、「Time trial」を選択しました。

      • Time trial: タイムアタック
      • Object avoidance: 障害物ありのレース
      • Head-to-head racing: 他車混在のレース

      20231207_DeepRacer_08

      Training algorithm and hyperparameters

      ニューラルネットワークの種類としてPPOを選択します。

      • PPO:今の状態を使って学習を行う。学習が安定しやすい。
      • SAC:過去の状態を元に学習を行う。サンプル効率がいい。

      20231207_DeepRacer_09

      Hyperparametersはモデル学習前に人の手で決められるパラメータです。 以下、項目を簡潔に説明します。

      • Gradient descent batch size・・・訓練データの分割サイズ。大きいほど学習が安定する。
      • Number of epochs・・・分割した訓練データセットの学習反復回数。学習は、安定するが遅くなる。
      • Learning rate・・・学習率。小さいと収束に時間がかかり、大きいと発散する(最適解から遠ざかる)傾向にある。
      • Entropy・・・不確実性の尺度。行動を選択する際の自信度合い。
      • Discount factor・・・現在の報酬と比べた将来の報酬の重要度合い。
      • Loss type・・・計算する目的となる関数(目的関数)のタイプ
      • Number of experience episodes between each policy-updating iteration・・・ある状態で行う行動の確率分布(ポリシー)の更新頻度。学習は、安定するが遅くなる。

      20231207_DeepRacer_10

      Select action space

      取りうる行動の選択肢が連続的か離散的か選びます。

      20231207_DeepRacer_11

      Define continuous action space

      ハンドルの角度とスピードの範囲の選択肢が少ないほど学習が早いですが、動きが離散的(カクカク)になります。
      設定画面がグラフィカルで見やすいですね。

      20231207_DeepRacer_12

      Vehicle shell with sensor configuration

      外部構造をカスタムします。双眼カメラバージョンや色などのカスタムができるようです。

      20231207_DeepRacer_13

      Reward function

      モデルへの報酬の与え方を指定します。
      機械が自分で判断できるように報酬を与えることで学習させます。
      デフォルトの報酬関数は、ざっと以下の内容となっています。

      • センターラインからの距離が近いほど報酬をもらえる
      • 与える報酬を、距離ベースで3つのしきい値をもとに分けている
        • 各しきい値よりも距離が大きい(中心から離れた)場合に、報酬をほとんど与えない
      def reward_function(params):
      '''
      Example of rewarding the agent to follow center line
      '''

      # Read input parameters
      track_width = params['track_width']
      distance_from_center = params['distance_from_center']

      # Calculate 3 markers that are at varying distances away from the center line
      marker_1 = 0.1 * track_width
      marker_2 = 0.25 * track_width
      marker_3 = 0.5 * track_width

      # Give higher reward if the car is closer to center line and vice versa
      if distance_from_center <= marker_1:
      reward = 1.0
      elif distance_from_center <= marker_2:
      reward = 0.5
      elif distance_from_center <= marker_3:
      reward = 0.1
      else:
      reward = 1e-3 # likely crashed/ close to off track

      return float(reward)

      Stop conditions

      トレーニングの終了条件です。

      20231207_DeepRacer_14

      Automatically submit to the DeepRacer race

      リーグに自動参戦させるためのオプションです。
      今回はチェックを外しますが、レースに参加させる際は自動で学習したモデルを提出できるため便利です。

      20231207_DeepRacer_15

      以上で設定完了です!

       

      モデルの確認

      以下のメッセージが画面上部に出るので、数分待ちます・・・

      Initializing training
      This can take a few minutes, but you can build your ML skills while you wait .

      20231207_DeepRacer_16

      しばらくすると冒頭で示した画像のような画面が出ているのではないでしょうか?

      20231207_DeepRacer_17

      左側には「Reward graph」と3本のグラフが示されております。

      20231207_DeepRacer_18

      それぞれ以下のグラフを表します。

      • 緑:スタートからストップまでの間(エピソード)に得た平均報酬
      • 赤:評価期間中の平均完走率。トレーニング期間中の学習を経て、アップデートされたモデルが評価されます。
      • 青:トレーニング期間中の平均完走率

      トレーニングが終わるまで時間がかかるので、しばらく待ちましょう。
      トレーニングが終わると、赤のグラフの値が100となっていたので、完走できるモデルの作成に成功したことを示します。やった!!!

      20231207_DeepRacer_19

      Training configurationを見るとモデル作成時に設定した値が表示されています。

      20231207_DeepRacer_20

      おまけ

      Japan AWS Jr. Championsのメンバーでレースをしたのでそちらも共有します。
      主催者がレースを用意する必要があります。
      そのレースに、各アカウントのレーサーが参加します。

      20231207_DeepRacer_21

      こちらを確認するとレーサーのプロファイルが表示されます。
      名前もプロファイルもカスタムしてみます。

      20231207_DeepRacer_22

      このように、髪型、ひげ、肌の色など、多くの設定をカスタムが可能です。

      20231207_DeepRacer_23

      こちらからコミュニティレースの表示があったため参加できます。 
      20231207_DeepRacer_24

      「Enter race」からレースに参加して、モデルを走らせてみました。

      20231207_DeepRacer_25

      レースの情報や実際の記録が表示される画面に遷移しました。

      20231207_DeepRacer_26

      うーん、他の参加者もいたのでキャプチャは伏せますが20位くらいだったのでまだまだトレーニング改善の余地がありそうです。
      ただ、他の方もデフォルトの設定で走らせたようで、レースの結果にあまり差が出ませんでした。

      20231207_DeepRacer_27

      【参考】

      機械学習/ディープラーニングにおけるバッチサイズ、イテレーション数、エポック数の決め方

      学習率

      ハイパーパラメーターを体系的に調整

      AWS DeepRacer トレーニングアルゴリズム

      【強化学習】方策(ポリシー)とは

      AWS DeepRacer ワークショップ ~ハンズオンで機械学習ジャーニーを始めよう

      Understanding Reinforcement Learning Using AWS Deepracer

      AWS DeepRacer Preparation Notes- Singapore 2023 — Part 2