

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS DeepRacer によるレースの種類の理解とセンサーの有効化
<a name="deepracer-choose-race-type"></a>

AWS DeepRacer Leagueでは、以下のタイプのレーシングイベントに参加することができます。
+ **タイムトライアル**: 遮るもののないトラックでタイムを競い合い、可能な限り速いラップタイムを目指します。
+ **オブジェクト回避**: 静止した障害物のあるトラックでタイムを競い合い、可能な限り速いラップタイムを目指します。
+ **Head-to-bot レース**: 同じトラック上の 1 台または複数の他の車両とレースを行い、他の車両よりも前にフィニッシュラインを越えることを目指します。

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)
+ [タイムトライアル用に 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 の車両には、デフォルトのセンサーとして単眼の前面カメラが付属しています。単眼の前面カメラをもう 1 つ追加して、前面立体視カメラを作成したり、単眼カメラまたは立体視カメラに LiDAR ユニットを追加できます。

以下のリストでは、AWS DeepRacer でサポートされているセンサーの機能と、簡単な費用対効果の分析をまとめています。

**前面カメラ**  <a name="term-deepracer-sensor-front-facing-monocular-camera"></a>
 一眼レンズ前面カメラは、トラックボーダーや形状など、ホスト車両前面の環境のイメージをキャプチャできます。最も安価なセンサーで、よくマークされたトラックでの障害物のないタイムトライアルなど、より簡単な自律運転タスクを処理するのに適しています。適切なトレーニングにより、トラック上の固定位置に配置された静止障害物を避けることができます。ただし、障害物の位置情報はトレーニングされたモデルに組み込まれ、その結果、そのモデルが過剰適合され、他の障害物の配置に一般化されない可能性があります。トラック上のランダムな位置に配置された静止オブジェクトまたは他の移動車両では、モデルが収束する可能性は低くなります。  
実世界では、AWS DeepRacer の車両にはデフォルトのセンサーとして単眼の前面カメラが搭載されています。カメラには 120 度の広角レンズがあり、RGB イメージをキャプチャし、15 フレーム/秒（fps） で 160 × 120 ピクセルのグレースケールイメージに変換します。これらのセンサーのプロパティはシミュレーターに保存され、訓練されたモデルがシミュレーションから現実の世界にうまく移行する可能性を最大限に高めます。

**前面立体視カメラ**  <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 回転の角速度で回転し、15cm から 2m の範囲です。ホスト車両の後ろや横にあるオブジェクトだけでなく、前面の車両部品によって遮られていない背の高い物体を検出できます。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. プライマリナビゲーションペインで、[**ガレージ**] を選択します。

1. [**ガレージ**] を初めて使用する場合は、[**ガレージにようこそ**] ダイアログボックスが表示されます。AWS DeepRacer 車両でサポートされている各種センサーの概要を参照すして [**>**] または [**<**] を選択するか [**X**] を選択してダイアログボックスを閉じます。この入門情報は、[**ガレージ**] のヘルプパネルで確認できます。

1. [**ガレージ**] ページで、[**新しい車両を構築**] を選択します。

1.  [**自分の車両の修正**] ページの [**仕様の修正**] で、1 つ以上のセンサーを選択して、目的のレーシングタイプに合った最適な組み合わせを試してみてください。

   AWS DeepRacer 車両のタイムトライアルをトレーニングするには、[**カメラ**] を選択します。障害物回避や head-to-bot レースでは、他のタイプのセンサーを使用します。**Stereo カメラ**を選択するために、追加の単眼カメラを取得していることを確認します。AWS DeepRacer は、立体視カメラを 2 つの単眼レフカメラで作成しています。1 台の車両で、単眼カメラまたは二眼ステレオカメラを使用できます。どちらの場合でも、トレーニングされたモデルで障害物回避または head-to-bot レースで死角を検出して回避できるようにする場合は、LiDAR センサーをエージェントに追加できます。

1. [**ガレージ**] ページの、[**ニューラルネットワークトポロジ)**] で、サポートされているネットワークトポロジを選択します。

   一般に、より深いニューラルネットワーク（より多くのレイヤーを持つ）は、急なカーブと多数の曲がり角があるより複雑なトラックを運転や、静止障害物を避けるためにレース、他の移動車両との競争に適しています。しかし、より深いニューラルネットワークはトレーニングにコストがかかり、モデルの収束に時間がかかります。一方、より浅いネットワーク（レイヤーが少ない）では、コストが削減され、トレーニングに要する時間が短縮されます。トレーニングされたモデルは、競争相手がなくても障害のないトラックでのタイムトライアルなど、より単純なトラック条件や運転要件を処理することができます。

   具体的には、AWS DeepRacer は、[**3-layer CNN**] または [**5-layer CNN**] をサポートしています。

1. [**ガレージ**] ページで、[**次へ**] を選択して、エージェントのアクションスペースの設定に進みます。

1. [**アクションスペース**] ページで、最初のトレーニングのデフォルト設定のままにします。その後のトレーニングでは、ステアリング角度、最高速度、およびそれらの詳細度についてさまざまな設定を試してください。次に、**[次へ]** を選択します。

1. [**群集で目立つように車両を色付け**] ページで、[**DeepRacer に名前を付ける**] に名前を入力し、[**車両の色**] リストからエージェントの色を選択します。その後で、[**送信**] を選択します。

1. [**ガレージ**] ページで、新しいエージェントの設定を確認します。さらに変更を加えるには、[**車両の修正**] を選択し、[**ステップ 4**] から前の手順を繰り返します。

これで、エージェントはトレーニングの準備ができました。

## タイムトライアル用に 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 時間に延長します。最初のトレーニングと 2 番目のトレーニングの報酬グラフを比較します。報酬グラフが改善されなくなるまで実験を続けてください。

1. [アクションスペース](deepracer-how-it-works-action-space.md)の詳細については、こちらをご覧ください。最高速度（例: 1 m/s）を上げて、3 番目の モデルをトレーニングします。アクションスペースを変更するには、変更を行う機会を得たときに、新しいエージェントを [**ガレージ**] に構築する必要があります。エージェントの最高速度を更新する場合、最高速度が高いほど、エージェントが評価中のトラックを早く完了でき、AWS DeepRacer 車両が物理トラックでのラップを早く完了できることに注意してください。ただし、最高速度を高くすると、エージェントがカーブ上でオーバーシュートしてトラックから外れてしまう可能性が高くなるため、トレーニングが収束するまでの時間が長くなることがよくあります。精度を低くして、エージェントが加速または減速するための余地を増やし、他の方法で報酬関数を微調整して、トレーニングをより速く収束させることもできます。トレーニングが収束した後、3 番目のモデルを評価して、ラップタイムが改善されるかどうかを確認します。改善されなくなるまで、探索を続けてください。

1. より複雑なトラックを選択し、[**ステップ 1**] から [**ステップ 3**] を繰り返します。トレーニングに使用したトラックとは異なるトラックでモデルを評価して、モデルが[実際の環境に一般化する](deepracer-how-it-works-virtual-to-physical.md)さまざまな仮想トラックに一般化できる方法を確認します。

1. （オプション）[ハイパーパラメータ](deepracer-console-train-evaluate-models.md#deepracer-iteratively-adjust-hyperparameters)のさまざまな値を試してトレーニングプロセスを改善し、[**ステップ 1**] から [**ステップ 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 コンソールは、2 種類の障害物回避トレーニングをサポートしています。障害物は、トラック上の固定位置またはランダムな位置に配置できます。固定位置では、障害物はトレーニングジョブ全体を通して同じ場所に固定されたままです。ランダムな場所では、障害物はエピソードごとにそれぞれの場所をランダムに変更されます。

システムの自由度が低いため、位置固定障害物を回避するためにトレーニングが収束しやすくなります。ただし、トレーニングを受けたモデルに位置情報が組み込まれていると、モデルが過剰適合する可能性があります。その結果、モデルが過剰適合し、一般化されないことがあります。ランダムに配置された障害物回避の場合、トレーニングが収束するのが難しくなります。これは、エージェントはこれまでに見たことのない場所で障害物に衝突しないように学習し続ける必要があるためです。ただし、このオプションでトレーニングされたモデルは、より一般化され、実際のレースにうまく移行する傾向があります。まず、障害物を固定位置に配置し、動作に慣れてから、ランダムな位置に取り組みます。

AWS DeepRacer シミュレーターでは、障害物は AWS DeepRacer 車両のパッケージボックスと同じ寸法（9.5 インチ（長さ）x 15.25 インチ（幅）x 10/5 インチ（高さ））の直方体ボックスです。これにより、パッケージボックスを物理トラックに障害物として配置すると、訓練されたモデルをシミュレーターから現実の世界へ簡単に移行できます。

障害物回避を試すには、以下のステップで概説されている推奨プラクティスに従ってください。

1. デフォルトのエージェントを使用するか、既存のエージェントをカスタマイズするか、新しいセンサーとアクションスペースを試してみてください。最高速度は 0.8 m/s 以下に、速度の詳細度は 1 または 2 レベルに制限する必要があります。

   2 つのオブジェクトを固定したで、約 3 時間のモデルのトレーニングを開始します。報酬機能の例を使用して、レースするトラック、またはそのトラックに非常によく似たトラックでモデルをトレーニングします。「**AWS DeepRacer Smile Speedway (中級)**」トラックはシンプルなトラックで、サミットレースの準備に適しています。同じ数の障害物がある同じトラックでモデルを評価します。合計予想報酬がどのように収束するかを見てください。

1. [報酬関数のパラメータ](deepracer-reward-function-input.md)についてお読みください。報酬関数のバリエーションを試してみてください。障害物の数を 4 つに増やします。エージェントをトレーニングして、トレーニングが同じトレーニング時間内に収束するかどうかを調べます。収束しない場合は、報酬関数をもう一度微調整し、最高速度を下げるか、障害物の数を減らして、エージェントを再びトレーニングします。大幅な改善がなくなるまで実験を繰り返します。

1. 今度は、ランダムな場所で障害物を回避するトレーニングに進みます。エージェントには、AWS DeepRacer コンソール中の**ガレージ**から利用できる追加のセンサーを設定する必要があります。立体視カメラを使用できます。または、LiDAR ユニットを単眼カメラまたは立体視カメラと組み合わせることもできますが、トレーニング時間が長くなります。トレーニングをより速く収束するために、アクションスペースを、比較的低いトップスピード（例: 2 m/s）に設定します。ネットワークアーキテクチャーでは、障害物の回避に十分であることが判明した浅いニューラルネットワークを使用します。

1. 障害物回避のための新しいエージェントで、単純なトラック上にランダムに配置された 4 つのオブジェクトを使用して 4 時間のトレーニングを開始します。次に、同じトラック上でモデルを評価して、ランダムに配置された障害物でラップを終了できるかどうかを確認します。できない場合は、報酬関数を調整し、別のセンサーを試して、トレーニング時間を長くすることができます。別のヒントとして、既存のモデルのクローン作成を試して、以前に学習した経験を活用するためのトレーニングを継続することができます。

1. （オプション）アクションスペースの最高速度を選択するか、トラックに沿ってランダムに配置する障害物を増やします。さまざまなセンサーの組み合わせを試し、報酬関数とハイパーパラメータ値を微調整します。[**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 台までと制限しています。トラック上により多くの競合車両を置くことにより、学習エージェントは、他の車両との多様な状況に遭遇する機会が増えます。この方法では、1 つのトレーニングジョブでより多くの学習を行われ、エージェントはより速くトレーニングを受けることができます。ただし、各トレーニングは収束に時間がかかる可能性があります。

ボット車両を持つエージェントをトレーニングするには、エージェントのアクションスペースの最高速度をボット車両の（一定の）速度よりも高く設定して、エージェントがトレーニング中に通過する機会を増やす必要があります。まず、エージェントの最高速度を 0.8 m/s に設定し、ボット車両の移動速度を 0.4 m/s に設定してください。ボットが車線を変更できるようにすると、エージェントは同じ車線の前面の移動車両に衝突しないようにする方法だけでなく、他のレーンの前面の別の移動車両に衝突しないようにする方法も学習する必要があるため、トレーニングはより困難になります。ボットは、ランダムな間隔で車線を変更するように設定できます。インターバルの長さは、トレーニングジョブを開始する前に指定した時間の範囲（例： 1 秒～5 秒）からランダムに選択されます。この車線変更の動作は、現実世界の head-to-bot レースの動作に似ており、トレーニングを受けたエージェントはより良く生成するはずです。ただし、モデルのトレーニングの収束には時間がかかります。

次の推奨ステップに従って、head-to-bot レースのトレーニングを繰り返してください。

1. AWS DeepRacer コンソールの**ガレージ**に、ステレオカメラと LiDAR 単位の両方で構成された新しいトレーニングエージェントを構築します。ボット車両に対して立体視カメラのみを使用して、比較的優れたモデルをトレーニングすることができます。LiDAR は、エージェントが車線を変更したときに死角を減らすのに役立ちます。最高速度を高く設定しすぎないでください。最良な開始ポイントは、1 m/s です。

1. Head-to-bot レースをトレーニングするには、2 台のボット車から始めます。ボットの移動速度をエージェントの最高速度よりも低く設定します (例: エージェントの最高速度が 1 m/s の場合、0.5 m/s に設定)。車線変更オプションを無効にし、先ほど作成したトレーニングエージェントを選択します。報酬関数の例の 1 つを使用するか、最小限の修正を行い、3 時間トレーニングします。レースに参加するトラック、またはそのトラックに非常によく似たトラックを使用します。「**AWS DeepRacer Smile Speedway (中級)**」トラックはシンプルなトラックで、サミットレースの準備に適しています。トレーニングが完了したら、トレーニングされたモデルを同じトラックで評価します。

1. より困難なタスクに備えて、2 番目の Head-to-bot レースモデル向けにトレーニングされたモデルをクローンします。さらに多くのボット車両を試すか、車線変更オプションを有効にしてください。2 秒以上のランダムな間隔で遅い車線変更オペレーションを開始します。また、カスタム報酬関数を試してみたいかもしれません。一般に、カスタムの報酬関数のロジックは、他の車両を上回って軌道に乗っている間のバランスを考慮しない場合、障害物回避のロジックと似ています。以前のモデルがどれほど良いかによって、さらに 3 〜 6 時間をトレーニングする必要があるかもしれません。モデルを評価し、モデルの実行方法を確認します。