Help us understand the problem. What is going on with this article?

社内勉強会:AWS DeepRacer基礎編(モデル作成)を開催した

はじめに

社内でAWS DeepRacer人口が増えてきており、ちょっと乗り遅れてしまった人向けにAWS DeepRacer勉強会基礎編を開催したのでその内容を公開します。

本記事では基礎編のモデル作成ついて解説しています。

その他の勉強会の内容については、以下の記事をご確認ください。

モデル作成準備

AWSマネジメントコンソールにログイン

AWS マネジメントコンソールにログインし、「サービス」の一覧でAWS DeepRacerを検索します。

aws_console_001.png

リージョンの選択

ナビゲーションバー右上からリージョン名を選択し、「米国東部(バージニア北部)/ North Virginia」に変更します。

aws_console_002.png

Reinforcement learningの立ち上げ

AWS DeepRacerコンソールが開いたら、左ペインの[Reinforcement learning]をクリックします。

aws_console_003.png

モデル作成

モデル作成画面の立ち上げ

AWS DeepRacerコンソール画面から[Create model]ボタンをクリックします。

create_model_001.png

モデル名の設定

モデル名(Model name)とモデルの説明(Model description - optional)を入力します。
※ モデル名はアカウント内で重複しないように設定する必要があります。

create_model_002.png

Environment simulationの設定

トレーニングに使用するコースを選択します。
※ 7つのコースが利用可能(2019/07/17現在)

create_model_003.png

Action spaceの設定

以下のAction space(AWS DeepRacerのステアリングの角度とスピード)に関するパラメータを設定します。

create_model_004.png

  • Maximum steering angle:最大のステアリング角度
  • Steering angle granularity:ステアリング角度の分割数
  • Maximum speed:最大のスピード
  • Speed granularity:スピードの分割数

※ 筆者がAWS Summit Tokyo 2019に参加した際は、以下のパラメータに設定しました。

  • Maximum steering angle:25 degrees
  • Steering angle granularity:3
  • Maximum speed:6 m/s
  • Speed granularity:2

Reward functionの設定

車両の動作に応じた報酬関数を定義します。[Reward function examples]をクリックすると、報酬関数のサンプルを見ることができます。

※ 3つのサンプルが利用可能(2019/07/17現在)

Follow the center line (Default)

センターラインに沿って走行する報酬関数

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)

Stay inside the two borders

トラックの境界線内で走行する報酬関数

def reward_function(params):
    '''
    Example of rewarding the agent to stay inside the two borders of the track
    '''

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

    # Give a very low reward by default
    reward = 1e-3

    # Give a high reward if no wheels go off the track and
    # the agent is somewhere in between the track borders
    if all_wheels_on_track and (0.5*track_width - distance_from_center) >= 0.05:
        reward = 1.0

    # Always return a float value
    return float(reward)

Prevent zig-zag

ジグザグ走行を抑制する報酬関数

def reward_function(params):
    '''
    Example of penalize steering, which helps mitigate zig-zag behaviors
    '''

    # Read input parameters
    distance_from_center = params['distance_from_center']
    track_width = params['track_width']
    steering = abs(params['steering_angle']) # Only need the absolute steering angle

    # 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 agent is closer to center line and vice versa
    if distance_from_center <= marker_1:
        reward = 1
    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

    # Steering penality threshold, change the number based on your action space setting
    ABS_STEERING_THRESHOLD = 15

    # Penalize reward if the agent is steering too much
    if steering > ABS_STEERING_THRESHOLD:
        reward *= 0.8

    return float(reward)

※ 筆者がAWS Summit Tokyo 2019に参加した際は、Prevent zig-zagをベースにした報酬関数でトレーニングしました。

create_model_005.png

Hyperparametersの設定

以下のハイパーパラメータに関する設定をします。

  • Gradient descent batch size:勾配降下のバッチサイズ
  • Number of epochs:エポック数
  • Learning rate:学習率
  • Entropy:エントロピー
  • Discount factor:割引係数
  • Loss type:損失タイプ
  • Number of experience episodes between each policy-updating iteration:各ポリシー更新反復間のエクスペリエンスエピソードの数

create_model_006.png

※ 筆者がAWS Summit Tokyo 2019に参加した際は、Gradient descent batch sizeを128にし、それ以外はデフォルトでトレーニングしました。
※ ハイパーパラメータの詳細については、社内勉強会:AWS DeepRacer基礎編(ハイパーパラメータ)を開催したをご確認ください。

Stop conditionsの設定

Maximum timeにトレーニングの時間を設定します。

create_model_007.png

※ 筆者がAWS Summit Tokyo 2019に参加した際は、re:Invent 2018 2時間、AWS Track 1時間、Bowtie Track 1時間、re:Invent 2018 30分トレーニングしました。

トレーニングの開始

[Start training]をクリックし、トレーニングを開始します。

create_model_008.png

トレーニング中の画面

左のグラフはトレーニングの進行状況を示しており、横軸はトレーニング時間、縦軸は報酬を示しています。
右上がりのグラフであれば、最適な報酬を探索している状態であると考えられます。

右の図(コンソール画面では動画)は走行中の車の視点を示しており、走っている様子を確認することができます。

create_model_009.png

モデル作成後

トレーニングが終了すると、Trainingの右にCompletedが表示されます。

evaluate_model_001.png

モデル評価

[Start evaluation]をクリックし、評価したいコースと試行回数を選択しモデルを評価します。

evaluate_model_002.png

evaluate_model_003.png

評価が完了すると、AWS DeepRacerコンソール画面から評価結果を確認することができます。

evaluate_model_004.png

再トレーニング

トレーニングしたモデルを使ってさらにトレーニングをしたい場合、[Clone]ボタンをクリックし、Environment simulation、Reward function、Hyperparameters、Stop conditionsの設定をし、再トレーニングます。

※ Action spaceは変更できません。

evaluate_model_005.png

モデルのダウンロード

実機で動かしたい場合、[Download model]ボタンをクリックしてモデルをダウンロードします。

evaluate_model_006.png

Virtual raceの参加

Virtual raceに参加したい場合、[Submit to virtual race]ボタンをクリックし、使用するモデルを選択後、[Submit model]ボタンをクリックします。

evaluate_model_007.png

evaluate_model_008.png

Virtual raceの画面から結果を確認することができます。

evaluate_model_009.png

まとめ

本記事では、モデル作成準備~レースの参加方法まで解説しました。

Action space、Reward function、Hyperparametersについては、精度向上に向けて試行錯誤で色々試してみていただけたらと思います。

dnp
DNP大日本印刷は、約3万社の顧客企業や生活者に対し、幅広い事業分野で多様な製品やサービスを提供する世界最大規模の総合印刷会社です。お問い合わせは各記事のコメント欄にお願いいたします。
https://www.dnp.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした