AWS DeepRacerを使ってみた

# はじめに
この記事ではAWS DeepRacer(以下、DeepRacerと略)を使用してみたため、以下の事柄を紹介します。
※これからDeepRacerを手軽に始めたい方向けの内容のため、細かな内容は説明しません。

* DeepRacerの概要(DeepRacerとは？お金はかかるの？開発者は何をするの？などなど)
* DeepRacerを利用してみた(モデルの作成から3Dシミュレーションのリーグ参戦まで)

※モデル・・・ざっくり言えば、人工知能の処理を行うプログラムのこと

# DeepRacerとは？
* 強化学習を使用してレーシングカーをレーシングコースに自走させて、他のユーザと競ったり、タイムアタックなどを行うサービス
* <font color="Red">強化学習(というか、人工知能)の知識はあまり要らない(ただし、強化学習の概要程度は知っていると今後の理解が早くなると思う)</font>
* DeepRacerは、[物理的なレーシングカー](https://www.amazon.com/AWS-DeepRacer-Fully-autonomous-developers/dp/B07JMHRKQG)に強化学習モデルを搭載して走らせたり、3Dシミュレーター上で走らせたりする(以下は3Dシミュレーターで動かしているイメージ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/b19627ab-95a9-8bf7-dd38-0af60e651721.png)
* AWS内でDeepRacerのモデルの作成・学習・評価を一気通貫で行うことが出来る
* DeepRacerは学習等の処理の裏でAWS SageMaker、AWS RoboMakerを利用するため、SageMaker、RoboMakerからDeepRacerの開発も可能
* 2021年7月時点では、バージニア北部のリージョンのみ利用可能

# DeepRacerのリーグについて
* DeepRacerではリーグと呼ばれる他のDeepRacerユーザと競い合うイベントがある
* リーグはオープン部門、プロ部門がある
* オープン部門は基本的に誰でも参加可能で月単位で開催している物や年単位で開催している物がある
* 「使ってみた」の章でも記載するが、参加とレースはとても簡単

・月単位で開催しているリーグ(2021年7月現在)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/30402c9e-92ae-117f-70a3-746248563376.png)

・年単位で開催しているリーグ(2021年7月現在)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/afa8133f-ef6c-bf05-ca25-c31d7c6cbabe.png)

* オープン部門のリーグで上位10%にランクインすると次の月からプロ部門に参加可能
* プロ部門にて月ごとのレースの終わりに上位 16 位に入っているレーサーはプロフィナーレと呼ばれるレースへの参加資格を得ることが出来て、そのレースに上位10位以内に入るとre:Invent における AWS DeepRacer チャンピオンシップカップに出場するための旅費無料の招待旅行を獲得できる

参考URL:
https://aws.amazon.com/jp/deepracer/faqs/

# 料金体系
料金体系は以下の通りです。

| 料金がかかること | かかる料金 | 無料利用枠(ただし、DeepRacer利用開始1か月間のみ)|
|:-----------|------------:|------------:|
|モデルの学習・評価|3.5 USD/時間(1モデル辺り)|10時間以内|
|モデルの保持|0.023 USD/GB/月(1モデル辺り)|5GB以内|
[DeepRacerの料金体系](https://aws.amazon.com/jp/deepracer/pricing/)より

# DeepRacer利用者として行うこと(ざっくりと)
利用者として行うことは、強化学習のモデルの作成にて使用する以下のパラメータ・pythonコードを設定してボタンをポチポチ押すだけです。

| 設定する項目 |説明|
|:-----------|:------------|
|モデル名と説明|モデル名とその説明を設定。リーグには表示されない|
|モデルの学習で使用するコースの選択|単一選択方式|
|レースのタイプ|このモデルが参加するレースの種類。<br>タイムトライアル、物体回避、一騎打ちレースの3種から選択可能|
|学習アルゴリズム|Pro,SACのどちらかを選択|
|ハイパーパラメータ(モデルの設定値)|バッチサイズ(1度に学習するデータ量)や学習率(学習した結果をどのくらいモデルに反映するか)を設定|
|エージェントの種類|走らせるDeepRacerの種類を選択。2021年7月時点だと2種類選択可能|
|報酬関数|DeepRacerの脳に相当する部分。<br>DeepRacerの取る行動それぞれに報酬(ポイント)を定義したPython関数で、DeepRacerのモデルはこの報酬関数に基づいて学習を行う。|
|終了条件|2021年7月時点だと学習する最大時間のみ指定可能(5分～1440分選択可能、デフォルト60分)|

# 使ってみた
※スクリーンショットに失敗してしまい、一部少し画像が少し途切れていますが、お気になさらず。。。
①AWSにログインし、DeepRacerの画面に移動し、画面右側の「Create model」ボタンを押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/ca116753-7089-6459-7dcc-863b11c991a0.png)
②DeepRacerを始めるにあたってのレクチャーページが表示されるので、画面下の「Create model」ボタンを押下する
DeepRacerの内容をもう少し知りたい場合は、Step 1のコースを受講してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/f78d6f4a-73fe-ef62-ed38-7bdc5959013d.png)
③モデルの名前と説明、学習に使用するコースを入力します。
　今回、以下としました。
　・モデル名に「MyFirstModel」
　・説明は「model for play」
　・コースは「re:Invent 2018 Wide」
　設定出来たら画面下の「Next」ボタンを押下してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/f6df1f1a-d477-1bd2-88dd-919c70bd3485.png)
④レースタイプと学習アルゴリズム、ハイパーパラメータ、エージェントの種類を設定します。
　今回、以下としました。
　・レースタイプに「Time Trial」(時間を競い合うレース)(デフォルトの物を使用)
　・トレーニングアルゴリズム、ハイパーパラメータ、エージェントはデフォルトの物を使用
　何も設定せず、画面下の「Next」ボタンを押下してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/3729be38-482a-81e6-aecc-9b5cddf73476.png)
⑤報酬関数、終了条件、モデル作成後すぐにリーグに参戦するかどうかを設定します。
　今回、以下としました。
　・報酬関数はデフォルトの物を使用。(この報酬関数はコースの真ん中を走ると報酬が大きくなるようになっている)　
　・終了条件は10分(デフォルトは60分、10分にした理由は60分は長そうな気がしたためで、あまり意味なし)
　・モデルが出来たらリーグ参戦するかどうかは、チェックをする(デフォルト)
　　⇒チェックすると月1のリーグに参加される
　・リーグに参加した際のレーサーの名前は任意
　設定出来たら画面下の「Create model」ボタンを押下してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/4fceced9-4b85-7c6a-ae64-cdbfdeaa1751.png)
⑥学習が始まるため、しばらく待つと以下の通り、画面の右上に「Completed」が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/2044b430-bee3-1c05-18ea-2b235ae648c4.png)
⑦DeepRacerの画面左のメニューから「AWS Virtual Circuit」を押下して、Open Division(オープン部門)を見てみる
　⇒作成したモデルの走行した結果がランキングに乗ります。
　Open Divisionの「Leaderboard」を押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/7e8bfb3c-50e4-7ad4-0eb5-43cc2c619dc1.png)
⑧ランキングが表示され、走行した動画が以下のランキングの「Watch」リンクから確認できる
・ランキング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/532d130c-dcd6-6dc9-8400-49828475d7cf.png)
・動画(20秒程度)
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/618469/b3e4a1b1-3f4e-60dd-fb2a-185edd3de892.gif)


# さらなる情報
この記事では手軽にDeepRacerを使ってみましたが、今後、リーグ戦に挑戦してランキング上位に行きたい場合は以下を調べると良いかもしれません。
※「かもしれません」と書いたのは筆者自身リーグのランキング上位に入ったことがないので＞え

[強化学習の仕組み](https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/deepracer-how-it-works-overview-reinforcement-learning.html)
[報酬関数についての詳細](https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/deepracer-reward-function-reference.html)