네이버랩스 로봇 소프트웨어 면접 후기
14 Jan 2021 | daily
내가 석사를 시작하고 나서부터 꼭 가고 싶었던 회사가 있었다. 그것이 바로 네이버 랩스! 내가 연구하고 있는 분야 모바일로봇 네비게이션이였고, 우리나라에서 제일 잘하는 회사이기 때문에 꼭 가고싶었다. 서류를 넣고 전화 인터뷰 기회가 왔다.
전화 인터뷰
- 자기소개
- 안녕하세요, 저는 설계와 개발이 좋아 기계공학을 전공하고 있는 이찬교 입니다. 세부전공으로는 로봇공학을 전공하였으며, 연구분야는 모바일로봇 네비게이션이였습니다. 그리고 현재에는 Midea Group이라는 곳에서 가정용 로봇 개발 인턴을 하고 있습니다.
- 논문에 대해 설명을 해주세요
- 저는 Semantic SLAM 어플리케이션을 이용하여 모방일로봇 네비게이션 시스템을 구축하였습니다. 이용한 어플리케이션에는, ORB-SLAM2와 yolov3가 결합된 동적환경에서의 맵핑과 로컬라이제이션입니다. 그러나 이 시스템은 카메라 센서 기반으로 된 슬램 시스템이기 때문에 데이터에 대한 오차가 발생합니다. 이를 encoder에서 얻어지는 wheel odometer를 이용하여서 Extended Kalman Filter를 통해 보정하였습니다. 그 외에 Object Avodiance, Motion Planning, Frontier-based Detection알고리즘을 개발하여 자율 탐험 및 네비게이션 시스템을 구축하였습니다.
- EKF 설명
- Non-Linear Model을 사용하여 KF를 통해 Pose Estimation을 한다면 non-gaussian Distribution으로 잘못된 pose Estimation을 할 수 없습니다. 이러한 문제를 해결하고자 Non-linear Model을 선형 근사값으로 만들어야하는데, 이때 Taylor 1st Series를 이용하여서 비선형모델을 선형 모델로 변환하여 푸는 EKF방식이다.
- 좀 더 자세하게 얘기해주세요
- EKF는 총 2개의 Motion Model과 Observation모델과 2개의 프로세스인 Prediction과 Correction으로 구성된 알고리즘이다. bayes filter 기반으로 된 Motion Model과 Observation Model은 Prediction 프로세스에서 Motion Model과 Control input값을 통한 Mean과 Covariance를 상태 추정하며, 이 추정된 값은 Correction Process에서 칼만게인과 Observation Model을 통해 상태 추정 보정이 된다.
- 답변 외에 추가적인 것:
- Motion Model은 이전 상태값을 State Transition Matrix에 계산을 하여 pose1을 구하고, Control Input(Velocity x,y and angle)값을 Velocity-based 모델을 통해 pose2를 구하고, process Noise(control input에 의해 결정되는 matrix기반으로 convariance값과 곱하여)를 구하여 상태와 Control input에 따른 모션에 대한 상태추정한다.
- Observation Model은 주로 센서로 부터 얻어진 데이터 이므로, 대부분 identity matrix로 설정하고, 실제로 측정되는 x,y,z값들을 매트릭스에 곱셈을하여서 얻어진다. 이때 Observation Noise도 있는데, 이는 임의로 주어진다.
- KF, EKF, UKF, Particle Filter 차이점
- 칼만 필터는 선형모델일때 사용이 되는 알고리즘이다. EKF는 비선형 모델일때 사용되는 모델이다. 대신 비선형을 선형근대화하여서 푸는 문제인데, 주행거리가 많아지면, 이는 결국 선형근대화값이기 때문에 에러가 증가하게 된다. 이를 보안하고자 unscented kalman filter가 있다, unscented Transform 방법을 통해 가우시안 범위 안에 선택된 sigma point의 출력값과 weight과 프레딕션 프로세스에서 Mean값과 Covariance 값을 계산한다. Kalman Filter들의 특징은 Incremental Method로 오직 이전값 데이터와 Control input 값만 가지고 상태를 추정한다.
- 반면에 Particle Filter는 이전에 가지고 있던 이력들을 지속적으로 활용하여 상태추정하는 방법이다. 모델 측정 범위 내에 포인트들을 랜덤으로 생성을 하고, Moition Model(Prediction)을 통해 가우시안 랜덤 안에 움직인 거리를 측정하고, Observation Model(Correction), 예측된 포인트 위치와 센서로 얻어진 실제 위치를 이용해 포인트 들의 weight를 업데이트 해준다(정규분포를 이용해 구함), 그리고 Resampling을 통해 weight 가 낮은 포인트들은 제거하고 큰 포인트들은 여러개로 복사한다. 그리고 포인트중 weight가 가장 큰 것을 포즈 타겟으로 삼거나 가중평균등을 사용하여 위치 선정한다.
- Particle Filter는 주행이 긴 시스템에서 좋은 시스템이며, 대신 계산량이 많다. 반면에 KF같은 경우 오직 이전 데이터만 활용하기 때문에 비교적 계산량이 적지만, 긴 주행을 할 겨우 오차가 발생할 수 있다.
- SIFT와 ORB의 차이점
- SIFT(Scale Invariant Feature Transform)는 유료 알고리즘이며 계산량이 많아 실시간(GPU사용하면 가능할 수)으로 사용하기에는 어렵다. 원리로는 Gausian Image Pyramid(이미지 피라미드를 생성할때 점점 gaussian blur의 크기를 넓힌다.)로 여러 이미지를 만든다음 Different of Gausian을 통해 이미지간의 근대점과 극소점을 추출하여서 이미지 안에 Keypoint를 구한다. 구한 Keypoint는 주변 discripter를 이용하여서 방향성분을 결정하고 특징점을 표현한다.
- 반면에 ORB의 방법은 Oriented Fast(Corner Detection(+image pyramid+corner중심+Orientation))을 통해 선과 코너 위주로 키프인트를 추출하여 크기에 대한 keypoint에 불변하게 하고 Rotated BRIEF(Blob detector(+회전에 약한 BRIEF계선+keypoint의 0,1차 moment를 이용하여서 방향성분 + hamming distance를 이용하여 속도와 메모리 절약))사용하여서 회전에 대한 개선을 하였다. 즉 SIFT와 다르게 선이나 모소리 위주로 키포인트를 추출을 하고, 이를 Rotated BRIEF알고리즘을 사용하여서 영상에 대한 회전, 스케일을 변화에 대한 불변 특징점 추출하였고, 계산도 빨라 실시간(CPU)으로 사용할 수 있다.
- 다양한 맵포인트들을 가지고 있을 것인데, 어떻게 최적화를 하였나요
- 자세한것은 저는 SLAM 시스템을 이용을 하여서 했기때문에, 잘 모릅니다. 그러나 특징점 추출과 일정 특징점이 넘어가면 맵포인트 생성과 카메라 포즈 데이터를 가지는 키프레임이 생성되고 MapDatabase에 저장하게 되는데, 이때 예를 들어 한 맵포인트가 여러 키프레임에서 공유하고 있을때, Bundle Adjustment를 통해서 MapPoints와 카메라 포즈를 최적화합니다.
- Bundle Adjustment에 대해 설명해 보세요
- 여러 맵포인트를 공유하고 있는 여러 키프레임을 가지고 맵포인트와 카메라 포즈를 최적화 하는 방법입니다. 특징적으로는, 예를 들어 4개에 키프레임이 100개 이상의 맵포인트를 공유한다고 할때 모든 맵포인트를 고려를 해서 최적화하기 힘듬으로 RANSAC알고리즘을 통해 약 4개의 맵포인트를 랜덤으로 선택을하고, 선택된 여러 프레임에서 공유하고 있는 맵포인트들을 Least Square 방법을 통해서 약 iteration 20회를 통해 키프레임과 맵포인트들의 포즈를 조정 합니다.
후기
사실 흐음 잘 못봤다. 지금 생각나는것만, 대답 잘한것만 이렇게 적어 놓았지만, 사실 대답 못한 것들이 더 많았다. 예를 들어 SLAM에 대해서 질문을 하셨는데, 나는 활용을 했지 직접 처음부터 끝까지 설계해보고 구현해보지 않았다라는 등, 모르는 질문에 대해서는 얼렁뚱땅 넘어갔던거 같다. 네이버 랩스의 면접은 매우 어려웠으나 졸업 논문 디펜스나 다른 회사를 지원할 때 더 많은 도움이 되었다.
내가 석사를 시작하고 나서부터 꼭 가고 싶었던 회사가 있었다. 그것이 바로 네이버 랩스! 내가 연구하고 있는 분야 모바일로봇 네비게이션이였고, 우리나라에서 제일 잘하는 회사이기 때문에 꼭 가고싶었다. 서류를 넣고 전화 인터뷰 기회가 왔다.
전화 인터뷰
- 자기소개
- 안녕하세요, 저는 설계와 개발이 좋아 기계공학을 전공하고 있는 이찬교 입니다. 세부전공으로는 로봇공학을 전공하였으며, 연구분야는 모바일로봇 네비게이션이였습니다. 그리고 현재에는 Midea Group이라는 곳에서 가정용 로봇 개발 인턴을 하고 있습니다.
- 논문에 대해 설명을 해주세요
- 저는 Semantic SLAM 어플리케이션을 이용하여 모방일로봇 네비게이션 시스템을 구축하였습니다. 이용한 어플리케이션에는, ORB-SLAM2와 yolov3가 결합된 동적환경에서의 맵핑과 로컬라이제이션입니다. 그러나 이 시스템은 카메라 센서 기반으로 된 슬램 시스템이기 때문에 데이터에 대한 오차가 발생합니다. 이를 encoder에서 얻어지는 wheel odometer를 이용하여서 Extended Kalman Filter를 통해 보정하였습니다. 그 외에 Object Avodiance, Motion Planning, Frontier-based Detection알고리즘을 개발하여 자율 탐험 및 네비게이션 시스템을 구축하였습니다.
- EKF 설명
- Non-Linear Model을 사용하여 KF를 통해 Pose Estimation을 한다면 non-gaussian Distribution으로 잘못된 pose Estimation을 할 수 없습니다. 이러한 문제를 해결하고자 Non-linear Model을 선형 근사값으로 만들어야하는데, 이때 Taylor 1st Series를 이용하여서 비선형모델을 선형 모델로 변환하여 푸는 EKF방식이다.
- 좀 더 자세하게 얘기해주세요
- EKF는 총 2개의 Motion Model과 Observation모델과 2개의 프로세스인 Prediction과 Correction으로 구성된 알고리즘이다. bayes filter 기반으로 된 Motion Model과 Observation Model은 Prediction 프로세스에서 Motion Model과 Control input값을 통한 Mean과 Covariance를 상태 추정하며, 이 추정된 값은 Correction Process에서 칼만게인과 Observation Model을 통해 상태 추정 보정이 된다.
- 답변 외에 추가적인 것:
- Motion Model은 이전 상태값을 State Transition Matrix에 계산을 하여 pose1을 구하고, Control Input(Velocity x,y and angle)값을 Velocity-based 모델을 통해 pose2를 구하고, process Noise(control input에 의해 결정되는 matrix기반으로 convariance값과 곱하여)를 구하여 상태와 Control input에 따른 모션에 대한 상태추정한다.
- Observation Model은 주로 센서로 부터 얻어진 데이터 이므로, 대부분 identity matrix로 설정하고, 실제로 측정되는 x,y,z값들을 매트릭스에 곱셈을하여서 얻어진다. 이때 Observation Noise도 있는데, 이는 임의로 주어진다.
- KF, EKF, UKF, Particle Filter 차이점
- 칼만 필터는 선형모델일때 사용이 되는 알고리즘이다. EKF는 비선형 모델일때 사용되는 모델이다. 대신 비선형을 선형근대화하여서 푸는 문제인데, 주행거리가 많아지면, 이는 결국 선형근대화값이기 때문에 에러가 증가하게 된다. 이를 보안하고자 unscented kalman filter가 있다, unscented Transform 방법을 통해 가우시안 범위 안에 선택된 sigma point의 출력값과 weight과 프레딕션 프로세스에서 Mean값과 Covariance 값을 계산한다. Kalman Filter들의 특징은 Incremental Method로 오직 이전값 데이터와 Control input 값만 가지고 상태를 추정한다.
- 반면에 Particle Filter는 이전에 가지고 있던 이력들을 지속적으로 활용하여 상태추정하는 방법이다. 모델 측정 범위 내에 포인트들을 랜덤으로 생성을 하고, Moition Model(Prediction)을 통해 가우시안 랜덤 안에 움직인 거리를 측정하고, Observation Model(Correction), 예측된 포인트 위치와 센서로 얻어진 실제 위치를 이용해 포인트 들의 weight를 업데이트 해준다(정규분포를 이용해 구함), 그리고 Resampling을 통해 weight 가 낮은 포인트들은 제거하고 큰 포인트들은 여러개로 복사한다. 그리고 포인트중 weight가 가장 큰 것을 포즈 타겟으로 삼거나 가중평균등을 사용하여 위치 선정한다.
- Particle Filter는 주행이 긴 시스템에서 좋은 시스템이며, 대신 계산량이 많다. 반면에 KF같은 경우 오직 이전 데이터만 활용하기 때문에 비교적 계산량이 적지만, 긴 주행을 할 겨우 오차가 발생할 수 있다.
- SIFT와 ORB의 차이점
- SIFT(Scale Invariant Feature Transform)는 유료 알고리즘이며 계산량이 많아 실시간(GPU사용하면 가능할 수)으로 사용하기에는 어렵다. 원리로는 Gausian Image Pyramid(이미지 피라미드를 생성할때 점점 gaussian blur의 크기를 넓힌다.)로 여러 이미지를 만든다음 Different of Gausian을 통해 이미지간의 근대점과 극소점을 추출하여서 이미지 안에 Keypoint를 구한다. 구한 Keypoint는 주변 discripter를 이용하여서 방향성분을 결정하고 특징점을 표현한다.
- 반면에 ORB의 방법은 Oriented Fast(Corner Detection(+image pyramid+corner중심+Orientation))을 통해 선과 코너 위주로 키프인트를 추출하여 크기에 대한 keypoint에 불변하게 하고 Rotated BRIEF(Blob detector(+회전에 약한 BRIEF계선+keypoint의 0,1차 moment를 이용하여서 방향성분 + hamming distance를 이용하여 속도와 메모리 절약))사용하여서 회전에 대한 개선을 하였다. 즉 SIFT와 다르게 선이나 모소리 위주로 키포인트를 추출을 하고, 이를 Rotated BRIEF알고리즘을 사용하여서 영상에 대한 회전, 스케일을 변화에 대한 불변 특징점 추출하였고, 계산도 빨라 실시간(CPU)으로 사용할 수 있다.
- 다양한 맵포인트들을 가지고 있을 것인데, 어떻게 최적화를 하였나요
- 자세한것은 저는 SLAM 시스템을 이용을 하여서 했기때문에, 잘 모릅니다. 그러나 특징점 추출과 일정 특징점이 넘어가면 맵포인트 생성과 카메라 포즈 데이터를 가지는 키프레임이 생성되고 MapDatabase에 저장하게 되는데, 이때 예를 들어 한 맵포인트가 여러 키프레임에서 공유하고 있을때, Bundle Adjustment를 통해서 MapPoints와 카메라 포즈를 최적화합니다.
- Bundle Adjustment에 대해 설명해 보세요
- 여러 맵포인트를 공유하고 있는 여러 키프레임을 가지고 맵포인트와 카메라 포즈를 최적화 하는 방법입니다. 특징적으로는, 예를 들어 4개에 키프레임이 100개 이상의 맵포인트를 공유한다고 할때 모든 맵포인트를 고려를 해서 최적화하기 힘듬으로 RANSAC알고리즘을 통해 약 4개의 맵포인트를 랜덤으로 선택을하고, 선택된 여러 프레임에서 공유하고 있는 맵포인트들을 Least Square 방법을 통해서 약 iteration 20회를 통해 키프레임과 맵포인트들의 포즈를 조정 합니다.
후기
사실 흐음 잘 못봤다. 지금 생각나는것만, 대답 잘한것만 이렇게 적어 놓았지만, 사실 대답 못한 것들이 더 많았다. 예를 들어 SLAM에 대해서 질문을 하셨는데, 나는 활용을 했지 직접 처음부터 끝까지 설계해보고 구현해보지 않았다라는 등, 모르는 질문에 대해서는 얼렁뚱땅 넘어갔던거 같다. 네이버 랩스의 면접은 매우 어려웠으나 졸업 논문 디펜스나 다른 회사를 지원할 때 더 많은 도움이 되었다.
Comments