はじめに
社内でAWS DeepRacer人口が増えてきており、ちょっと乗り遅れてしまった人向けにAWS DeepRacer勉強会基礎編を社内で開催したのでその内容を公開します。
本記事では基礎編のログ取得について解説しています。
その他の勉強会の内容については、以下の記事をご確認ください。
- 社内勉強会:AWS DeepRacer基礎編(モデル作成)を開催した
- 社内勉強会:AWS DeepRacer基礎編(ハイパーパラメータ)を開催した
- 社内勉強会:AWS DeepRacer応用編(ログの分析・可視化)を開催した
ログについて
ログの取得方法の種類
ログの取得方法はいくつかあります。
- CloudWatchから一部のみ取得する:本記事記載
- CloudWatch APIを使用して全件取得する:社内勉強会:AWS DeepRacer応用編(ログの分析・可視化)を開催した記載
ログの種類とアクセス方法
- Trainingログ:トレーニング中に出力されたログ
Training > Simulation Job > View logsをクリックします。
- Evaluationログ:評価走行中に出力されたログ
Evaluation > Simulation Job > View logsをクリックします。
ログの表示
AWS DeepRacerコンソール画面からTrainingまたはEvaluationのView logsをクリックするとCloudWatchのコンソール画面に遷移します。ログストリームからログをクリックすると該当するログが表示されます。
※ Trainingログのキャプチャ
ログの取得
CloudWatchのコンソール画面の左ペインから、[インサイト]をクリックします。
Logs Insightsのコンソール画面から、以下の項目を入力し、[クエリの実行]ボタンをクリックします。
- ①ロググループ名:/aws/robomaker/SimulationJobs
- ②期間:処理を実行した期間を指定します
例)2019-06-13(00:00:00)-2019-06-13(23:59:59) - ③クエリ:
- 以下のクエリを使用して、必要な行を取得するとともに、parseを使用して、各項目をCSV形式で取得できるようにします。
- 1行目のシミュレーションIDを適宜書き換えてください。※ 例ではシミュレーションID:sim-abcd12345678
filter @logStream like /sim-abcd12345678/
| filter @message like /SIM_TRACE_LOG:/
| parse @message "SIM_TRACE_LOG:*,*,*,*,*,*,*,*,*,*,*,*,*,*,*" as episodes,tsteps,x,y,yaw,steering_angle,throttle,action_taken,reward,done,on_track,current_progress,closest_waypoint_index,track_length
| sort @timestamp asc
ログのダウンロード
[アクション] > [クエリ結果をダウンロード(CSV)]をクリックするとCSV形式でログをダウンロードすることができます。
ダウンロードしたCSVファイルのデータで、車両が通過した軌跡の視覚化や報酬の確認など、ログの分析をすることが可能です。
例)車両が通過した軌跡を視覚化
ログの出力
報酬関数内でprint文を書くことで、独自のログを出力することができます。
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
waypoints = params['waypoints']
# 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
print("CUSTOM_LOG:wp={}".format(waypoints))
return float(reward)
なお、Logs Insightsのコンソール画面から、ログを抽出する場合は以下のクエリを実行します。
※ waypointsは何行も表示される必要がないので、limit 1としています。
filter @logStream like /sim-abcd12345678/
| filter @message like /CUSTOM_LOG:/
| parse @message "CUSTOM_LOG:wp=*" as waypoints
| sort @timestamp asc
| limit 1
まとめ
本記事では、CloudWatchから一部のログを取得する方法を解説しました。
ログを分析して効率的に精度向上していけたらと思います。