close_btn
로그인, 회원가입후 더 많은 혜택을 누리세요 로그인 회원가입 닫기

안녕하세요! 조성광 입니다.

 

지난 4월 6일 스터디에서 준비하기로한 End to End Learning for Self-Driving Cars 논문 review 입니다.

(그림은 논문을 참고해주세요 ^^) 이 논문은 Nnvidia의 Mariusz Bojarski가 2016년에 발표했습니다.

 

1. 요약

 

사람이 다양한 환경의 도로에서 운전하여 얻은 주행 데이터를 CNN(Convolution Neural Network)로 학습하여 자율주행을 하는 방법입니다. 기존의 방식 (차선 detection과 path planning을 통한 제어) 보다 작은 시스템으로 나은 성능을 보여주며, Nvidia 시스템을 사용하여 30fps 로 구현을 하였습니다.


2. 시스템 설명

 

Figure 1: High-level view of the data collection system

 

시스템은 왼쪽 & 가운데 & 오른쪽에 위치한 카메라 세대, 핸들과 처리 장치와 저장 장치로 구성되어 있습니다. 카메라 영상과 핸들의 정보는 동시에 기록 됩니다. 가운데 카메라 뿐 아니라 왼쪽 & 오른쪽의 영상을 사용하는 이유는, 차가 도로 옆으로 치우쳤을 때 가운데로 회복하는 것을 학습시키기 위함 입니다.  핸들은 radious(r)* 정보를 주며 학습에 사용하는 값은 1/r을 사용합니다. 그 이유는 차가 직진할 경우에 r 값을 그대로 사용하여 무한대(a singularity)가 되는 상황을 피하고, 핸들이 움직일 때 값이 r보다 1/r이 더 부드럽게 표현되기 때문입니다.

 * 원의 반경을 뜻하며, 차가 직선을 향할 경우 무한대, 급한 커브를 돌 수록 작아지는 값입니다.

 

Figure 2: Training the neural network.

 

 학습에서는 왼쪽, 오른쪽 영상을 추가로 shift 및 rotation 하여 다른 각도에서 보는 영상을 추가로 생성하여 사용합니다. camera view point를 살짝 이동시켜 주는 것이며, 이 때 입력 scene의 3D 정보가 없기 때문에 영상에 왜곡이 발생하게 되나 학습 성능에는 큰 영향을 주지 않습니다. 영상이 shift, rotation 되는 것 만큼 핸들 돌리는 label 값(1/r)도 변경됩니다. 예를 들어, 입력 scene 을 오른쪽으로 shift 할 경우, 핸들을 각도를 왼쪽으로 더 되도록 변경합니다. 학습 과정에서 shift & rotaion된 세개의 카메라 영상을 CNN 입력으로 하며, 최종 출력 핸들 값과 핸들의 변형된 영상에 맞게 바뀐 target 값과 error를 최소화 하는 weight을 찾게 됩니다.

 

Figure 3: The trained network is used to generate steering commands from a single front-facing center camera.

 

 학습 완료된 네트워크는 가운데 카메라 영상만 입력으로 받아 핸들의 방향 값(1/r)을 출력합니다. 


3. 데이터 획득

 

 학습에 사용되는 도로 주행 데이터는 2016 Lincoln MKZ, 2013 Ford Focus 의 자동차의 장착된 카메라에서 얻었습니다. 낮과 밤, 여러 날씨, 여러 도시, 도로의 종류를 다양한 환경에서 72시간의 운전 데이터를 모았습니다.


4. 네트워크(CNN) 구조

 

 네트워크는 데이터의 사람의 핸들 방향과, 네트워크에서 출력된 핸들 방향의 mean squared error를 최소화 하는 방향으로 학습되었습니다. 네트워크는 normalization layer, 5 convolutional layer, 그리고 3 fully connected layer 등의 9개 layer로 구성되며, 입력 영상은 YUV 입니다. 네트워크는 핸들 방향을 출력하며, convolutional layer와 fully connected layer 중 어느부분이 feature 추출하고 어느부분이 핸들 방향의 controller 역할을 하는지는 명확하게 구분되지는 않습니다.


5. 네트워크 학습 세부 내용

 

Figure 4: CNN architecture. The network has about 27 million connections and 250 thousand parameters.

 

 모아진 데이터는 도로의 종류, 날씨, 그리고 운전자의 행동(차선 변경, 커브, 직진 등) 이며, 운전자가 차선 안에 머물고 있는 데이터만 학습에 사용하였습니다. 그리고 직선 방향에 치우치는 것을 막기 위해서, 학습 데이터에 커브하는 데이터를

 많이 포함시켰습니다. 입력 영상들은 shift와 rotation을 통해 augmentation 되었습니다. (2번 참조)


6. 시뮬레이션 & 실외 주행 평가

 

 학습 결과를 자율주행에 이용하기 이전에 시뮬레이션을 통해 성능을 측정하였습니다. 차선 한 가운데에 운전하는 데이터를 ground truth 로 하고, 학습된 네트워크의 핸들 방향에 따라 차의 위치를 변경 시킵니다. groud truth보다 자동차 위치가 1m 벗어나게 되면 다시 가운데로 위치 시키고 계속 test를 지행합니다. (interventions) 평가는 시뮬레이션 과정 중에 사람이 개입한 숫자와, 시뮬레이션 상에서 자율주행한 데이터의 비율로 계산됩니다. 자율주행한 시각이 적고, 사람이 많이 개입했다면 autonomy 값이 0점에 가까워집니다. 반대로 사람의 개입이 없이 모든 시간을 자율주행을 하였다면 autonomy값은 100점이 됩니다. 다양한 실외 주행에서도 98% 자동화 비율의 좋은 성능 평가를 보였습니다.

 

autonomy = (1 − (number of interventions) / 6 seconds elapsed time [seconds] ) · 100


7. CNN 상태 시각화

 

Figure 7: How the CNN “sees” an unpaved road. Top: subset of the camera image sent to the CNN. Bottom left: Activation of the first layer feature maps. Bottom right: Activation of the second layer feature maps. This demonstrates that the CNN learned to detect useful road features on its own, i. e., with only the human steering angle as training signal. We never explicitly trained it to detect the outlines of roads.

 

Figure 8: Example image with no road. The activations of the first two feature maps appear to contain mostly noise, i. e., the CNN doesn’t recognize any useful features in this image.

 

 그림 7, 8은 도로 영상 과 도로 없는 영상에서 CNN 첫전째, 두번째 layer의 CNN activation 영상을 보여주고 있습니다. 도로가 있을 때 반응하고 도로 없을 때는 반응이 없는 것을 확인할 수 있습니다.

 

8. 결론

 

 CNN으로 다양한 환경을 주행 영상과 핸들 정보만으로 구현하였으며, 향후 환경에 조금 더 robust한 것을 만들 예정입니다.

 

※ 논문과 관련있는 참고자료 링크 입니다.

 

http://selfdrivingcars.mit.edu/

 

MIT의 자율주행 강의입니다. 강의 Lecture 3: Convolutional Neural Networks for End-to-End Learning of the Driving Task  에서 End to End learning 에 대해 설명합니다.

 

https://chatbotslife.com/learning-human-driving-behavior-using-nvidias-neural-network-model-and-image-augmentation-80399360efee

 

Udacity 에서 공개한 가상공간 자율주행 게임 시뮬레이터를 사용해서, nvidia end to end learning을 구현한 내용입니다. 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 강화학습 연구 실습반 정기모임 이용안내 [1] 모두의연구소 2016.11.03 5537
60 3월 8일 발표자료 - IPU(Intelligence Processor Unit) 소개 file cosmos 2018.03.08 332
59 1월 4일 발표자료입니다. file Hye 2018.01.04 326
58 Off-policy TD(1) 수렴에 관한 질문있습니다! 임성수 2017.12.28 117
57 12월 07일 발표자료입니다. file cosmos 2017.11.30 184
56 11월 9일 발표자료입니다. file cosmos 2017.11.09 184
55 [논문요약] Learning to Poke by Poking: Experiential Learning of Intuitive Physics file ryu 2017.06.30 183
54 [논문요약] Beating Atari with Natural Language Guided Reinforcement Learning file 백병인 2017.04.27 270
53 오픈 토론방 링크(카카오톡, 잔디) 백병인 2017.04.21 431
52 Lecture 4 file Estia 2017.04.18 209
51 Lecture2 발표자료 file 백병인 2017.04.13 215
50 lecture 2 논문요약: A Machine Learning Approach to Visual Perception of Forest Trails for Mobile Robots dhfromkorea 2017.04.12 130
49 Lecture 2 논문 리뷰 on Imitation learning file maestroj 2017.04.11 235
48 Lecture 2의 논문 리뷰: Learning real manipulation tasks from virtual demonstrations using LSTM file 오맹달 2017.04.11 133
» 4월 6일 스터디 End to End Learning for Self-Driving Cars 논문 review file 조성광 2017.04.11 1188
46 Sutton 교수 Textbook 링크 변경 백병인 2017.04.10 268
45 강화학습 EDU 시즌2 진행일정 (4/6~) 백병인 2017.04.07 286
44 3/23 lab06 test 결과 file oasishun 2017.03.23 79
43 GAN 이번주 목요일 발표 자료입니다. file maestroj 2017.03.20 271
42 optimizer maestroj 2017.03.09 182
41 Github Repository (RL_Edu1) 생성 - 멤버권한 요청받습니다. 백병인 2017.03.07 314