반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

Stragit Track 에서 두번 훈련 시킨 모델을 Clone 해서 곡선이 있는 다른 트랙에서 훈련 시키기로 했다.

나머지 트랙 중 가장 간단한 트랙인 Oval Track에서 먼저 훈련을 시켰다.

 

 

reward_function을 약간 수정했는데....

 

def reward_function(params):
    '''
    Example of rewarding the agent to follow center line
    '''
    reward=1e-3
    
    # Read input parameters
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']
    steering = params['steering_angle']
    speed = params['speed']
    all_wheels_on_track = params['all_wheels_on_track']
    
    if distance_from_center >=0.0 and distance_from_center <= 0.03:
        reward = 1.0
    
    if not all_wheels_on_track:
        reward = -1
    else:
        reward = params['progress']
        
    # Steering penality threshold, change the number based on your action space setting
    ABS_STEERING_THRESHOLD = 45

    # Penalize reward if the car is steering too much
    if steering > ABS_STEERING_THRESHOLD:
        reward *= 0.8
        
    # add speed penalty
    if speed < 2.0:
        reward *=0.80
    
    return float(reward)

 

일단 여긴 곡선 구간이 있으니 핸들 꺾는 걸 조금 더 여유를 주어야 겠다고 생각했다.

이전 직선 트랙에서는 15도로 제한을 뒀는데 여기서는 45도 까지 여유를 주었다.

그 이상 핸들을 급하게 꺾으면 점수가 20% 깎이도록 했다.

 

그리고 곡선구간에서는 아무래도 속도를 줄여야 하니 제한을 2.0으로 고쳤다.

이전엔 2.5 였다.

 

이렇게 고치고 나서 100분 동안 훈련을 시켰다.

 

한 30분 쯤 지나면서 부터 높은 reward가 나오기 시작했다.

그리고 reward 저점도 그 이후부터는 1.50k를 넘었다.

 

그 이후부터는 reward의 고점이 대략 8.0k 내외이고 그런 고점이 나오는 빈도수도 크게 변화를 보이지는 않은 것 같다.

 

아마 위 reward_function으로 이 구간에서는 그렇게 크게 performance가 발전하기는 힘들 것 같다.

 

reward_function을 조금씩 고쳐가며 계속 훈련을 하고 싶지만.. 한번 그렇게 하는데 별도로 돈을 내야하기 때문에 맘 놓고 여러가지를 시도 하지 못하겠다.

 

일단 평가 결과는 아래와 같다.

 

3번 시도 중 한번만 성공했고 실패한 것도 트랙을 35%만 돌았다.

점수가 아주 저조하다.

 

성공했을 때의 기록은 23.797초 이다.

 

 

일단 이 트랙은 이 정도면 됐고 다음 연습 트랙은 어제 끝난 AWS Deepracer League - Viertual Circuit London Loop 에서 사용한 London Loop Track에서 훈련을 시키기로 결정 했다.

 

 

이 리그는 4/29 부터 5/31 까지 한달간 진행된 리그이다.

나는 늦게 시작해서 이 리그에는 참가를 못 했다.

6월부터 시작하는 Vertual league에 참가할 계획이다.

 

일단 London Loop Track에서 사용할 reward_function은 아래처럼 고쳤다.

 

def reward_function(params):
    '''
    Example of rewarding the agent to follow center line
    '''
    reward=1e-3
    
    # Read input parameters
    track_width = params['track_width']
    distance_from_center = params['distance_from_center']
    steering = params['steering_angle']
    speed = params['speed']
    all_wheels_on_track = params['all_wheels_on_track']
    
    if distance_from_center >=0.0 and distance_from_center <= 0.03:
        reward = 1.0
    
    if not all_wheels_on_track:
        reward = -1
    else:
        reward = params['progress']
        
    # Steering penality threshold, change the number based on your action space setting
    ABS_STEERING_THRESHOLD = 30

    # Penalize reward if the car is steering too much
    if steering > ABS_STEERING_THRESHOLD:
        reward *= 0.8
        
    # add speed penalty
    if speed < 1.5:
        reward *=0.80
    
    return float(reward)

 

여기서도 핸들 각도와 스피드 제한 부분을 조금 수정했다.

 

일단 핸들 각도는 이전보다 좁은 30도를 줬다. 

이 트랙이 이전 트랙보다 조금 더 급한 커브가 있지만 속도를 더 낮추는 걸로 대비하기로 했다.

 

스피드는 이전에 2.0 의 제한을 두던것을 1.5로 낮췄다.

 

훈련시간은 큰 맘 먹고 300분으로 했다. 

그 결과는 아래와 같다.

 

 

여기도 보니까 30분 이후부터 조금씩 개선되는 것 같더니 1시간 이후부터 저점이 3.0K를 어느 정도 유지하는 싸이클을 보였다.

 

그 이후는 그게 개선되지는 않았지만 3시간 지나면서 최고점인 9.69K를 찍기 시작했다.

 

훈련 후 진행한 평가 결과는 아래와 같다.

 

 

3번 중 2번 완주 했고 기록은 24초 정도 이다.

실패한 1번도 트랙을 80% 진행했다.

Oval Track과 비교해서 아주 만족스런 결과이다.

 

좋다.

 

 

참고로   AWS Deepracer League - Viertual Circuit London Loop 수상자들의 기록은 다음과 같다.

 

 

9초,10초, 11초.... 24초인 내가 낄 자리는 없다.

쟤네들은 어떤 reward_function을 썼고 Hyperparameter configuration은 어떤 변동을 주었는지 그리고 어떤 훈련을 얼마나 시켰는지 궁금하다.

 

다음주 2차 Virtual League에서 사용하는 Track 이 발표되면 그 트랙에서 집중적으로 훈련을 시킬 계획이다.

반응형