[DeepRacer] 강화학습으로 자율주행 구현하기 (모델 평가&제출)
이전 글에서 DeepRacer 모델을 직접 생성해 보았다.
이번에는 이 모델을 평가해보고 Race에 제출해본다.
모델 평가
생성한 모델을 Race에 제출하기 전, 트랙에서 돌려보는 최종 평가를 진행한다. Evaluation에서는 episode 횟수를 지정하고, 그 결과값(완주 시간, 완수율, off-track 횟수, 패널티 시간 등)들을 직접 확인할 수 있다.
생성한 모델 > Evalutaion > Start New Evaluation
모델 이름과 Race Type을 지정한다.
평가를 하기 위한 trial 수와 트랙을 지정한다.
가장 하단은 해당 Evaluation 기록을 공식 open Race에 제출할 것인지 여부를 묻는 항목이다.
이렇게 Evaluation을 제출하면 각 trial에 대한 정보와 시뮬레이션 영상을 같이 확인할 수 있다. 이 기록들과 시뮬레이션 영상을 통해 어떤 부분에서 문제가 발생하는지 파악해 다른 학습에서 보완할 수 있는 포인트를 깨달을 수 있다.
로그 분석
Train과 Evaluation이 끝나면 각각의 결과를 로그파일로 다운받을 수 있다.
Train 로그파일을 다운로드 받으면 gzip 형태의 압축파일을 볼 수 있는데, sim-trace 내에서 iteration 별로 csv 파일이 기록되어있는 것을 볼 수 있다.
이 csv 파일들을 pandas로 읽어본다.
각 iteration 파일을 로드해 dataframe에 넣어주었다.
확인할 수 있는 각 지표들의 내용은 아래와 같다.
reward function에서 사용했던 파라미터와 동일한 것들이 몇 개 보이는 것을 확인 할 수 있다.
- iteration : episode의 집합, csv 파일로 나뉜 단위와 같다.
- episode : step 의 집합, Train할 때
- step : episode 의 순서
- X : 차량의 x좌표
- Y : 차량의 y좌표
- yaw : 차량의 정면 각도, heading
- steer : 차량 핸들 회전각
- throttle : 차량 속도
- action : 행동 (이산공간의 경우 행동의 index 가 표시되고 연속공간의 경우 차량의 핸들 각도와 속도가 각각 list의 ite으로 나누어 표시된다)
- reward : 현재 step 에서 받은 보상
- all_wheels_on_track : 차량의 네 바퀴가 트랙 안에 위치하는지 여부
- progress : 현재 Epiosde 에서 완주율
- closest_waypoint : 가장 가까운 waypoint, [int, int]
- tstamp : 훈련이 진행된 총 시간
이렇게 dataframe으로 처리한 로그 데이터들을 matplotlib를 통해 시각화할 수 있다.
이외에도 track waypoint를 불러와서 episode 별 자취 로그를 시각화 할 수도 있다.
Race 제출
일단 모델이 생성되면 Race에 제출할 수 있다. 제출횟수에 제한은 없어 몇 번이고 같은 모델로 제출할 수 있는데, 팁 아닌 팁으로 횟수가 증가하면 전반적으로 좋은 기록이 찍힌다.
교내에서 임시로 진행한 개인전에서는 정말 뜻하지 않게 좋은 기록을 내었다.
Race에 사용된 트랙이 하나로 고정된 점을 이용해 트랙의 웨이포인트를 전부 따온 뒤, 그 트랙에서 코너링하는 구간, 직진하는 구간을 파악해 인코스를 타도록 reward를 제공해준 것이 나름의 핵심이였는데 이 점이 크게 작용한 듯 싶다.
어떻게 보면 하나의 코스에만 맞도록 과적합시킨것과 다름없다.
다음으로는 오프라인에서 Race한 경험을 적어보도록 한다.