본문 바로가기
  • 인공지능
  • 블록체인
  • 정보보안
신기술분석/자율주행

2022 AWS DeepRacer

by nathan03 2022. 12. 4.
반응형

DeepRacer 는 AWS 자율 주행을 구현하는 서비스

https://aws.amazon.com/ko/deepracer/

 

AWS DeepRacer – 기계 학습을 시작하는 가장 빠른 방법

AWS DeepRacer Evo 차량에는 기존 AWS DeepRacer 차량, 기존 카메라와 스테레오 비전을 형성하는 추가적인 4메가픽셀 카메라 모듈, 스캐닝 LiDAR, 스테레오 카메라와 LiDAR 모두에 맞는 외판, 몇 가지 액세서

aws.amazon.com

AWS DeepRacer는 흥미롭고 재미있는 방식으로 RL(강화학습)을 시작할수 있게 해준다. RL은 고급 ML(기계학습)기술로, 학습 모델에 대해 다른 기계 학습 방법과는 매우 다른 접근법을 사용한다. RL의 최대 강점은 레이블이 지정된 훈련 데이터 없이 매우 복잡한 행동을 학습하고, 장기적인 목표에 맞춰 최적화하면서 단기 의사 결정을 내릴 수 있다는 것이다. 

자율주행을 만드는데 모델을 만드는데, 모델을 만들기 위한 인공지능을 학습하는데 1시간 당 비용 발생 (10시간 프리티어 제공)
인공지능 --- 규칙 기반 / 기계 학습  
                    ① 규칙기반 : 사람이 입력한 규칙에 의해 동작 
                    ② 기계학습 : 기계가 직접 데이터를 통해 학습하여 모델을 만들고 동작
                       - 지도학습 :  y = f(x)  예) 고양이 -> 고양이,  강아지 -> 강아지, 고양이 10만장 = 고양이 Label ,
                                           강아지 10만장 = 강아지 Label 사람이 정답을 알려주고, 마치 지도하는 것처럼 느껴져서 지도학습   
                       - 비지도학습 : 학습 알고리즘에 결과물이라고 할 수 있는 출력을 미리 제공하지 않고 인공지능(AI)이 입력 세트
                                              에서 패턴과 상관관계를 찾아내야 하는 머신러닝 알고리즘  
                       - 강화학습 : 정답을 알려주지 않고, 학습한다. 자녀를 교육시킬때, 수학을 잘나오도록 할려면, 일일이 알려주는
                                           방식 (지도학습), 수학시험을 잘보면 10만원 줄께, 만족할만한 행동을 할때 보상을 주는, 보상을
                                           통해서 아웃풋 값을 뭘 해야 할지 행동을  강화시키는 방법    

 

# 시뮬레이터 참여 방법

1. 루트 사용자 > 각 계정별 발급 아이디 > 비밀번호 입력 

2. 무료 클릭 > 가입 완료

3. 로그인 완료 > 콘솔에 로그인 

4. 콘솔 홈 (AWS 작업 공간 접속)

5. 검색 창에서 deepracer 검색 > AWS DeepRacer 접속 

6. AWS DeepRacer 메인 접속 (한국어 지원이 안되므로, 한국어 번역으로 확인, 클릭시는 영어로 클릭해야 함)

7.  메뉴 구조 보기 (5개로 구성 되어있음)
 - Racing League : 전세계 사람들과 온라인으로 경쟁하면서 학습할 수 있는 메뉴 (리더보드에 가면 다른 사람들 모델을 확인 가능함)
 - Reinforcement learning : 모델을 훈련 시키는 공간 (강화학습 이론 수업, 모델 만들기 y=f(x))
 - Multi-user management : 교사 분들이 학생들 계정을 만들고 관리할 때 사용하는 메뉴 
 - Resources : 딥러닝시 필요한 유용한 자료들 모음 
 - Next challenge : 딥 레이서 이후 추천 하는 행동들 

※ Racing League 

※ Reinforcement learning (모델을 훈련 시키는 공간)

※ Multi-user management 

※ Resources 

※ Next challenge

 

8. Reinforcement learning > Get started  

9. Step 1: Take a crash course on Reinforcement Learing (10min)

10. Step 2: Create a model (AI 모델 만들기) 

# 트랙 고르기 

 

# 레이스 타입 고르기
- Time trial : 트랙만 존재 (장애물 없이, 트랙에 따라 주행)
- Object avoidance :  트랙 중간중간에 상자가 놓여져 있음 
- Head to head racing :  트랙위에 다른 차량들이 주행하고 있음 (차량(봇)을 피해 주행해야 함)

Object avoidance 및 Head to head racing 은 모델도 어렵고 훨씬 까다로움 

# 알고리즘 고르기 
2016년 알파고 강화학습으로 학습시킴 그 이후, PPO(구글), SAC (Open AI) 알고리즘으로 확대 
딥레이서 알고리즘은 PPO 알고리즘이 적합함 (권장함)

# 하이퍼파라미터 
훈련시, 사용되는 옵션들 

# Define Action Space (행동 공간)
- 앞, 좌측, 우측 행동에 대한 1%, 17.5% 등 자유롭게 움직일수 있음 (Continuous action Space, Discrete action Space)

# Continuous action space 
- 좌측 최대 각도, 우측 최대 각도 
- 연속적인 값을 할때, 좌우측 최대 각도 설정 

# Speed 
- 연속적인 공간 설정 
- 실수, Minimum Speed 0.1 / Maximum Speed 4 로 할 경우 공간은 넓어지지만 모델이 학습할 때, 주행하면서 사진을
  포착하는데, 공간이 너무 넓으면 어떤 방향으로 가야할지 선택해야할 부분이 많아진다. 이러면 학습속도가 느려짐
- 속도가 너무 빠르면 자동차 드레프트 할 확률이 높기 때문에, 작은 속도로 시작해서 점차적으로 속도를 늘려가면서
  학습 시키는게 정확도가 높아진다.   


# discreate action space 
- 조이스틱이 아닌 버튼식 키보드 설정 

각도와 속도 설정 

필요 없는 부분은 삭제도 가능함, 추가 하고 싶은 각도와 속도 설정 가능함 

Next 클릭 시, 기본적으로 설정된 차량 선택 

보상을 어떻게 줄지 함수를 설정 함, 딥레이서가 트랙을 돌면서 훈련될때마다, 자동으로 보상을 줄수 있도록 파이썬 코딩  

 

# Reward function examples 

보상 함수들 예제들
- Time trial : follow the center line (Default) 중앙선을 따라가도록 중앙선에 가까울수록 높은 보상
- Time trial : stay inside the two borders 좌측에 있는 차선이 안쪽으로 갈수록 높은 보상
- Time trial : prevent zig-zag 지그재그를 못하게 끔 하는 보상함수 
- Object avoidance and head-to-head : stay on one lane and not crashing (default for OA and h2h)

# 훈련 속도 설정 

# 훈련이 끝나면 자동적으로 대회에 참여할꺼냐 문의 (설정 해제)

# Create Model 클릭 시 서버 실행 (Rohomaker, Sagemaker)
   (AWS 는 서버 2대를 실행시키고, 모델을 훈련 시키는 서버, 하나는 시뮬레이션을 돌릴수 있는 서버)

# your models - 훈련중인 상태를 확인 가능함 

# Your garage (default 외 다른 차량을 만들수 있음) 

# 차량 색상 변경 

# deepracer 는 다양한 센서 옵션을 설정 가능 (카메라 1, 2대, 라이다센서: 레이저를 통해 거리를 측정하는 센서) 
  - y = f(x)  x 값은 센서에서 수집되는 데이터 (센서 추가 시 많은 데이터가 들어올수록 더 많은 복잡도, 처리 속도를 요함) 
  - time trial 트랙 선택시는 1개의 카메라만으로도 충분하다. 

 

# 차량 셋팅 완료 

# my first model 클릭

# 차량 훈련 현황 모니터링 (훈련 그래프와 결과값 출력) 
  - 훈련 장면들을 Simulation video stream 으로 실시간 확인 가능함 (훈련이 끝나면 제공이 안됨)

# Actions 를 누르면 다양한 옵션들이 존재 
 - 훈련이 완료되고, Clone 을 클릭하면 이어서 훈련 시킬수 있음 (1시간씩 끊어서 결과를 보면서 이어서 학습시키길 권장)
 - Delete 모델을 삭제하고 싶을 때
 - Download physical car model : 훈련시킨 모델을 다운로드 받아서 오프라인으로 차량에 임베딩해서 주행 시키기 위함 

# 훈련시킨 모델들에 대한 옵션 값 확인 가능함 

지금까지 모델을 학습시키는 방법을 배웠음, 어떻게 하면 모델을 훈련을 잘 시킬수 있는지 방법을 알아보자. 

11. 강화 학습 알고리즘 이해하기 (Start the course)

중앙에 가면 점수를 많이 받음 (0.2점, 2점) 

# 점수를 어떤 기준으로 줘야하나 

 

# 보상 함수 살펴 보기

Params 변수는 시뮬레이션에서 측정되는 다양한 값들을 가지고 있음 

 

# 각 Parameter 값 과 조건식 의미 

12. 훈련 시킨 모델 확인
 - 그래프 확인을 통해, 모델을 더 훈련 시켜야할지 여부를 결정 한다. 

# Actions 에 활성화된 Clone 버튼 클릭하기 

모델을 이어서 수행하기 때문에 기존에 선택한 모델만 가능함 

30분 정도 이어서 모델 훈련 시키기

괜찮은 모델이 하나 있으면 추가적으로 이어서 학습을 수행한다. 

온라인에서 훈련시킨 모델 정보를 오프라인으로 저장하기 => 오프라인 차량에 적용 

# 첫번째 모델 훈련 성능 그래프 확인하기 
  - 초록색 그래프는 보상에 관련된 부분  
  - 1초에 15번 측정을 하는데, 트랙을 벗어날 경우 1Episode 가 끝났다고 봄, 두번째 훈련을 시행 후 또 트랙을 벗어나면
    2Episode 가 끝남, 보통 20 Episode 가 만들어짐 (보상의 합이 총 20 EP 그 안에 보상의 평균)
  - 우상향 그래프가 성능이 좋음 (훈련시간이 30분이므로, 70점에서 종료) 

# 완주율 그래프 보기 

# Training 과정 중에 완주율 그래프 

 

이 모델이 훈련하면서 더 많은 탈원 (이상한 행위 수행) 을 수행한다. (hyper파라미터 설정에서 entropy 값 변경)
   - 모델이 정체될 때, 클론 시 엔트로피 값을 높여 본다.  (너무 높이면, 학습 속도가 느려진다.)

 

재 학습시 100% 를 찍는게 중요한데, 아래 꼬물선처럼 정체될 때는 엔트로피값을 높여 탈원하여, 더 많은 행위를 시도
하면서 학습을 정교화 하는게 중요하다. (파란색 보다, 빨간색 검증선이 100%를 찍는게 중요하다.)

# 그래프 해석 결론

전체적으로 3가지 선 모두 우상향이 좋음 
우상향 하다 끊겼을 경우, 기본 값 + Clone 으로 모델을 재학습시키자. 
꼬물선이 많을 경우 Entropy 값을 높여 보고 재학습 시키자. 

# 모델 나가다가 이탈할 경우 

보상이 최대가 되는 데로 학습 하는것 맞으나, 총합이 최대가 되는 것을 지향한다.  (생존해야 함)

속도에 대한 보상을 주고자 한다면 (speed = prarams['speed'])


# params 내용 확인 하기 (Get started or development Guide) 


13. 샘플 코드 확인

import math

def reward_function(params):
    ########## [reward_survived] survived ########## 
    reward_survived = 1
    
    
     ########## [reward_wheels] all_wheels_on_track ########## 
    all_wheels_on_track = params['all_wheels_on_track']
    if all_wheels_on_track :
        reward_wheels = 1 
    else:
        reward_wheels = 0
    
    
    ############## [reward_speed] speed #############
    speed = params['speed']
    reward_speed = speed / 4 
    
    
    ############## [reward_direction] direction_diff #############
    waypoints = params['waypoints']
    closest_waypoints = params['closest_waypoints']
    heading = params['heading']
    
    # 현재 에이전트와 가장 가까운 waypoint의 위치를 가져옵니다.
    next_point = waypoints[closest_waypoints[1]]
    prev_point = waypoints[closest_waypoints[0]]

    # track_direction 을 계산 
    track_direction = math.atan2(next_point[1] - prev_point[1], next_point[0] - prev_point[0])
    track_direction = math.degrees(track_direction)  

	# 각의 차이 (direction_diff) 계산
    direction_diff = abs(track_direction - heading)
    if direction_diff > 180:
        direction_diff = 360 - direction_diff
    
    # 보상 결정
    direction_diff_rad = math.radians(direction_diff)
    reward_direction = math.cos(direction_diff_rad)
        
        
    ########### [reward weight sum] ############ 
    reward = 1*reward_survived + 1*reward_wheels + 1*reward_speed + 1*reward_direction
    
    return float(reward)

reward = 생존보상 + 모든 바퀴가 트랙내에 있는지 여부 + 속도에 따른 + 방향 

14. 두번째 훈련 그래프 확인하기 

3번째 테스트 완주후 100% 에 도달함 (안전성 확보) 



질문. 특정 코너에서만 따로 보상을 줄수 있는 방법이 있는가? 

① 곡선에 진입하기 전에 차량의 위치 waypoint 찾기 
②  Closest_waypoinrts / is_left_of_center 파라미터 활용 하기 



# 참고. deep racer waypoints github 

https://github.com/aws-deepracer-community/deepracer-analysis

 

GitHub - aws-deepracer-community/deepracer-analysis: A set of Jupyter notebooks to analyze the performance of a DeepRacer model.

A set of Jupyter notebooks to analyze the performance of a DeepRacer model. - GitHub - aws-deepracer-community/deepracer-analysis: A set of Jupyter notebooks to analyze the performance of a DeepRac...

github.com

질문. 해당 코스(reinvent 2018) 몇 초 정도가 베스트였는지 알고계시나요? 10초 안나옴 / 한바퀴 7~8초 

# 3번째 클론을 통해서 속도를 향상시켜 재 훈련을 시키자. 

재훈련을 시키면, 중앙선을 따라 자동차는 보상을 받고자 한다.  30분 30분 60분 짧게 짧게 훈련시키는게 좋다. 

# 베스트 모델 순간부터 가져와서 클론해서 모델 한다. 

 

# Community Racer 대회 개최하기 

https://us-east-1.console.aws.amazon.com/deepracer/home#raceToken/QHnugBDERRyrSw3cVtH0VQ

 

https://us-east-1.console.aws.amazon.com/deepracer/home#raceToken/QHnugBDERRyrSw3cVtH0VQ

 

us-east-1.console.aws.amazon.com

# 모델 제출 하기 

 

https://us-east-1.console.aws.amazon.com/deepracer/home#raceToken/mqtV_UmlS_Cb9cSt1VQwCA

10분뒤에 뜬다. 

# 대회 참여시 유의 사항 
Rules 확인 
  - 3바퀴 전체 시간 
  - 트랙을 벗어날 시 3초 패널티 (트랙 벗어날시 차량을 다시 중앙에)
Competition track (일반버전인지 wide 버전인지 트랙정보 확인)

1. 여러 모델을 제출하면서 실험 (가장 좋았던 최종 기록으로 산술), 전혀 상관 없음
2. 여러 모델을 실험해보는 것도 좋지만 같은 모델이라도 여러번 제출하는 것이 좋다. 
3. 온라인 대회용 모델이랑 오프라인 대회용 모델은 구분해야 한다. (별도 제작 필요)
    - 온라인에서 매우 우수한 모델은 대부분 과적합에 걸려 있기 때문에 오프라인에서는 잘 돌지 못한다. 
    - 과적합 : 훈련하는 곳에서는 매우 우수한 성적을 내지만 다른 트랙 및 오프라인에서는 성능이 저하 
4.  100% 도달 이후, 지속적으로 추가 훈련 시키면 과적합 도달이 되기 쉽다. 

# 순위가 나온다 주행 video 도 확인 가능하다. 

 

# 딥레이서 요금 (1시간 훈련당 5천원 정도 소요, 모델 1GB 저장 시 월별 0.023 USD)

# 모델 용량 확인 (톱니바퀴 설정에서 Size 활성화 시키기) 



반응형

댓글