[Research] Autonomous Vehicle project(GPS & Computer Vision) - step2. Training & Testing model

 

자율주행 Lane Tracing 프로젝트: Computer Vision 모델 학습 및 테스트

1. 서론

지난 블로그 게시물에서는 Carla 시뮬레이터를 이용하여 GPS와 Computer Vision을 결합한 lane tracing을 위한 데이터셋을 생성하는 과정을 살펴보았다. 이번에는 생성된 데이터셋을 이용하여 Computer Vision 모델을 학습하고, 실제 Carla 시뮬레이터에서 주행 테스트를 진행하는 과정을 다뤄보겠다. 특히, 모델 학습 과정에서 발생했던 문제점과 이를 해결하기 위한 다양한 시도들을 소개하고자 한다.

2. 모델 학습 및 테스트

2.1 첫 번째 모델

첫 번째 모델은 1130장의 original image data를 사용하여 학습했다. 데이터셋의 크기가 부족했기 때문에 모델의 steer prediction은 비교적 고르게 분포되어 있었음에도 불구하고, 실제 주행 테스트에서는 steering이 지속적으로 튀면서 부자연스럽게 주행하는 문제가 발생했다.

first model prediction histogram

training dataset을 만들었던 것 처럼, 임의의 route를 생성하여 자율주행 테스트를 진행한 결과 다음과 같았다.




2.2 두 번째 모델

두 번째 모델에서는 2420장의 데이터를 사용하고, 특정 범위의 steer angle로 편향되는 것을 막기 위해 dataset balancing을 수행했다. 하지만 balancing 과정에서 데이터셋의 크기가 너무 많이 줄어드는 문제가 발생했다. 가장 작은 bin에 맞춰 쏠림이 발생한 데이터들을 삭제하는 작업을 수행하는 바람에 training data의 손실이 크게 발생했다.

second training data histogram

데이터가 적어서인지는 모르겠으나, 이렇게 학습한 모델은 이상하게 right-hand side로 편향되도록 steering하는 경향성을 보였다.




2.3 세 번째 모델

세 번째 모델에서는 3350장의 데이터를 사용하여 데이터셋의 크기를 보충하고, 모델에 regularizer를 추가하여 overfitting을 방지했다.

third training data histogram 


Python
from keras import regularizers

def create_model():
    # Image input
    image_input = Input(shape=(HEIGHT, WIDTH, 3))
    # Integer input
    integer_input = Input(shape=(1,))
    # Preprocess the image input
    x = Conv2D(64, kernel_size=(3, 3), activation='relu',padding='same',activity_regularizer=regularizers.L2(1e-5))(image_input)
    x = MaxPooling2D(pool_size=(2, 2))(x)
    x = Conv2D(64, kernel_size=(3, 3), activation='relu',padding='same',activity_regularizer=regularizers.L2(1e-5))(x)
    x = MaxPooling2D(pool_size=(2, 2))(x)
    x = Conv2D(64, kernel_size=(3, 3), activation='relu',padding='same',activity_regularizer=regularizers.L2(1e-5))(x)
    x = MaxPooling2D(pool_size=(2, 2))(x)
    x = Dense(128, activation='relu',activity_regularizer=regularizers.L2(1e-5))(x)
    x = Dense(32, activation='relu',activity_regularizer=regularizers.L2(1e-5))(x)
    x = Dense(4, activation='relu',activity_regularizer=regularizers.L2(1e-5))(x)
    x = Flatten()(x)
    # Concatenate image features with integer input
    concatenated_inputs = Concatenate()([x, integer_input])
    # Dense layers for prediction
    output = Dense(1, activation='linear')(concatenated_inputs)
    # Create the model
    model = Model(inputs=[image_input, integer_input], outputs=output)
    return model

model = create_model()

model.summary()

세 번째 모델은 주행 자체는 괜찮았고, steer angle도 깔끔하게 lane을 인식하는 것처럼 보였다. 하지만 한 박자 빠르게 steering하여 회전하면 안 되는 타이밍에 먼저 회전하는 문제가 발생했다. 지금까지 시도들에 비하면...학습은 잘 됐다고 판단할 수 있는 결과물이었다.


이번 경우는 Training data에서 global direction을 설정할 때 30th ahead waypoint를 기준으로 설정했던 것이 문제라고 판단하였다. 모델에 문제가 있다기 보다는 데이터가 너무 앞서있는 정보를 주도록 학습시켰기 때문이라고 보았다. 그래서 25th ahead waypoint를 기준으로 학습시켜 보았다. 


그 후...









하지만 이러한 시도에도 불구하고 문제는 해결되지 않았다.

데이터를 수집하는 것부터 직접 학습하는 것까지. 굉장한 노력이 필요하고 알아야 할 것들이 많았다. 그래서 직접 하기보다는 논문을 참조하며 기존 모델부터 이해하는게 어떻느냐라는 피드백을 수용하기로 했다. (train하는 것도 상당한 computing 성능을 요구하니...)

3. 결론

이번 블로그 게시물에서는 지난 시간에 생성한 데이터셋을 이용하여 Computer Vision 모델을 학습하고, Carla 시뮬레이터에서 주행 테스트를 진행하는 과정을 살펴보았다. 특히, 모델 학습 과정에서 발생했던 문제점과 이를 해결하기 위한 다양한 시도들을 소개했다.

앞으로 기존 논문을 참고하여 검증된 lane tracing 모델을 Carla 시뮬레이터에서 재현하고 테스트 할 예정.



[Research] Autonomous Vehicle project(GPS & Computer Vision) - step1. Creating datasets | be별하

[Research] Carla 환경 설정 (server: window + client: ubuntu) | be별하

[Research] Carla Client and Vehicle spawn | be별하



hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2