AQ Tech Blog

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

作成者: tsuyoshi.watanabe|2023年12月07日

 

 

はじめに

クラウドインテグレーション部の渡邊です。
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会など定期的に活動しています。
2023 Japan AWS Jr. Champions 表彰時の写真

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

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

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

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

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

実際にやってみる

 

モデルの作成

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

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

Training details

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

Environment simulation

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

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

Race type

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

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

Training algorithm and hyperparameters

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

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

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

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

Select action space

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

Define continuous action space

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

Vehicle shell with sensor configuration

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

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

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

Automatically submit to the DeepRacer race

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

以上で設定完了です!

 

モデルの確認

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

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

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

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

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

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

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

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

おまけ

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

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

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

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

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

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

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

【参考】

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

学習率

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

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

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

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

Understanding Reinforcement Learning Using AWS Deepracer

AWS DeepRacer Preparation Notes- Singapore 2023 — Part 2