바로가기 메뉴
메인 메뉴로 바로가기
본문으로 바로가기

2021.04.28 Tech

로봇이 눈 앞의 물체를 인식하고 자세를 추정하는 방법

로봇이 가정이나 사무실과 같은 일상 생활공간에서 작업하기 위해서는 많은 준비가 필요합니다. 정해진 동작을 반복하는 산업용 로봇과는 달리, 협업 로봇(collaborative robot)은 사람과의 접촉이나 예상치 못한 환경의 변화가 빈번하게 일어나죠. 그만큼 로봇이 주변 환경을 인지하여 현재 발생하고 있는 상황에 대한 정보를 이해하는 것이 중요합니다. 본 글에서는 주변 물체의 위치와 자세를 인지하는 로봇의 Vision 기술에 대해 소개합니다.

1. 연구 개요

로봇이 주변환경과 타겟으로 하는 물체를 인지한다는 것은, 카메라를 통해 바라본 2차원 영상에서의 정보를 통해 3차원 공간에 있는 물체의 정보를 알아내는 일입니다. 이 3차원 정보는 물체의 3 자유도 position과 3 자유도 orientation을 포함하여 6 자유도의 자세를 추정하는 문제입니다. 최종적으로 어떤 물체의 pose estimation을 한다는 것은 로봇이 본 2차원영상 속 물체와 실제 현실공간 속 물체의 좌표계 사이의 관계를 가장 정확하게 찾아내야 하는 문제로 정의할 수 있습니다.

위 그림은 물체의 위치를 추정하는 전체 파이프라인을 보여줍니다. 알고리즘은 크게 두 가지로, 이미지 탐색 기반 방식과 keypoint 추출 기반 방식이 있습니다. 두 방식 모두 딥러닝을 이용하며, 이를 위한 학습데이터가 필요합니다. 하지만 3차원 정보를 포함한 데이터셋은 공개된 데이터셋도 부족하고 직접 취득하는 것 또한 매우 어렵습니다. 이를 위해 네이버랩스에서는 3D 모델과 simulation을 이용한 데이터셋 생성 방법을 연구하고 있습니다. 각 단계에 대해 자세히 설명해보겠습니다.

그림 2. 물체의 자세 추정 파이프라인

2. 학습 데이터셋 생성

딥러닝을 이용하여 물체의 위치를 추정하기 위해서는 대표적으로 두 가지의 학습 데이터셋이 필요합니다. 영상에서 물체의 영역만 분할한 mask, 그리고 카메라 좌표계에 대한 물체의 6 자유도 자세입니다. 더불어 딥러닝을 위해서는 방대한 양의 학습 데이터가 필요하지만 수작업으로 이러한 mask와 6 자유도 자세를 일일이 만들어 내기에는 상당한 시간과 노력이 필요합니다. 게다가 영상에 보이는 물체의 6 자유도 자세를 사람이 직접 측정하기는 매우 어렵죠.

네이버랩스에서는 이 문제를 해결하기 위해 먼저 물체의 정교한 3D 모델을 만들고 다양한 simulation 기법을 통하여 학습 데이터셋을 만들었습니다. 학습 데이터셋을 만드는 방법은 물체를 포함하는 영상을 가상 환경에서 만들어내는 가상 환경 기반 방법과 실제 환경에서 촬영하는 실 환경 기반 방법으로 나누어집니다.

1) 가상 환경 기반 방법 (Synthetic Training Data Generation)

이 방법은 먼저 가상의 환경에 물체의 3D 모델을 배치합니다. 그리고 물체의 모든 면을 충분히 볼 수 있도록 카메라의 viewpoint를 생성하고 그 위치에서의 카메라 영상을 만들어냅니다. 카메라와 물체의 위치를 사람이 직접 가상의 환경에 생성하였기 때문에 mask와 6 자유도 자세를 쉽게 얻을 수 있습니다. 이 방법은 가상으로 만들어지는 영상이 실 환경 영상과 얼마나 비슷한 지에 따라 단순 랜더링 기반 방법과 3D 물리 엔진 기반 방법으로 나눌 수 있습니다.

a. 단순 랜더링 기반 방법

단순 랜더링 기반 방법은 아래 동영상과 같이 물체의 배경과 조명은 고려하지 않고 단지 카메라의 viewpoint를 바꾸어 가며 물체가 보여지는 영상을 만들어냅니다. 배경은 필요에 따라 임의로 만들어서 물체의 mask 영역 뒤에 넣을 수 있습니다. 이 방법으로는 학습 데이터셋을 비교적 쉽게 만들어 낼 수 있지만 추가적인 data augmentation을 해줘야 학습 효과를 얻을 수 있습니다.

그림 3. 다양한 카메라 viewpoint에서의 랜더링

b. 3D 엔진 시뮬레이션을 통한 효율적인 학습 데이터 생성

물체의 6자유도 자세 추정(6DoF Pose Estimation)을 위한 딥 뉴럴 네트워크(Deep Neural Network) 학습에 사용했던 오픈 데이터셋으로는 YCB, LINEMOD 데이터셋등이 있습니다. 이러한 데이터 셋들은 실제 환경에서 센서를 통해 취득한 결과물들입니다. 하지만 물체의 종류나 크기, 무게, 가격 등 다양한 조건들이 늘어나기 시작하면, 학습 데이터 셋을 준비하고 이를 수작업으로 어노테이션(annotation)하는 데 들어가는 시간과 노력이 기하급수적으로 늘어나게 됩니다.

그림 4. 3D 물리 엔진을 통해 생성한 3D 가상 학습 데이터셋

이를 극복하기 위해 게임 개발에 주로 사용되는 언리얼 물리 엔진을 기반으로 한 시뮬레이터를 구현하였으며, 3D 모델링 도구를 통해 설계된 메쉬 및 머테리얼 등을 불러와서 물리 엔진으로 시뮬레이션하며 랜덤한 위치, 랜덤한 텍스처, 랜덤한 조명 등을 적용해가며 아주 다양한 가상 환경을 조성해서 실사에 가까운 RGB 이미지 캡처링을 수행합니다. 그와 더불어 3D 가상 환경 상에 모든 공간 정보를 알기 때문에, 뎁스 정보와 각 물체들의 세그멘테이션 정보, 6자유도 자세 정보까지 자동으로 생성할 수 있습니다.

그림 5. 3D 물리 엔진 시뮬레이션을 통해 얻어낸 뎁스맵, 인스턴스 마스크, 서피스 노멀 맵

저희가 구현한 물리 엔진 시뮬레이터는 언리얼 엔진과 V-Ray 렌더러를 기반으로 하기 때문에, 중력 영향을 받는 실제와 같은 물체의 움직임을 시뮬레이션해주면서, 다양한 물체의 머테리얼(material)과 조명(light), 텍스처(texture), 위치(location, rotation) 조건들을 무한하게 랜덤으로 구성할 수 있고 실사에 가까운 사진을 얻을 수 있게 해줍니다.

3D 물리 엔진 시뮬레이터로 얻은 결과물에, 다양한 영상 처리 알고리즘으로 이미지 회전, 플립(Flip), Noise 추가, RGB 채널 별 색채 변화, Affine Transform 등의 이미지 변형을 적용해서 데이터의 일반화 수준을 한층 더 높일 수 있습니다.

그림 6. Robot Grasping을 위한 네이버랩스 커스텀 데이터셋 제작 화면

2) 실 환경 기반 방법 (Real Training Data Generation)

위와 같은 가상 환경 기반 방법으로 무한대에 가까운 학습 데이터셋을 만들어 낼 수 있지만, 3D 물리 엔진을 사용하더라도 실제 환경과 똑같은 영상을 만들어내기는 다소 부족합니다. 이른바 domain gap 문제가 발생하는데요, 따라서 실제 환경에서 학습 데이터셋이 반드시 필요합니다.

실 환경 데이터셋을 얻기 위해 여러 개의 visual marker로 구성된 마커 보드를 만들어, 기준 좌표계에 대한 카메라의 6 자유도 자세를 측정했습니다. 또한 학습 데이터인 mask와 물체의 6 자유도 자세를 얻기 위해서 물체의 3D 모델을 촬영된 영상에 투영하는 방식을 사용했습니다.

아래의 그림은 위와 같은 방법으로 만들어낸 실 환경 학습 데이터셋입니다. 왼쪽은 실제 환경에서 촬영한 영상이고 오른 쪽은 mask과 물체의 자세를 박스의 형태로 표시한 영상입니다.

그림 7. 실제 환경에서의 데이터 생성

3. 물체의 자세 추정

1) Instance Segmentation

Instance segmentation은 한 사진 내에 사전에 정의한 다양한 종류(class)의 물체가 있을 때, 각 물체(instance)의 위치를 픽셀 단위로 구분하는 task이며, 각 물체의 6 자유도 자세를 추정하기 위해 가장 먼저 수행하는 단계입니다. Instance segmentation이 로봇 등에 활용되기 위해서는 실시간으로 동작할 필요가 있어, 실시간으로 동작하는 알고리즘을 사용하였고 여러 물체와 그 위치를 포함한 오픈데이터셋인 YCB 데이터셋을 사용하여 실험해보았습니다.

실험 과정에서 다양한 문제가 발생하였는데, 우선 YCB 데이터셋의 경우 다양한 물체를 포함하기는 하지만, 한 사진 내에 한 가지 종류의 물체가 다수 존재하는 경우가 없어 바로 instance segmentation 학습에 활용하기 어려웠습니다. 또한 학습되지 않은 물체가 포함되어 있을 때 이를 잘못 인식하거나 관심 대상의 물체가 이에 가려 잘 인식되지 않는 경우가 있습니다. 더욱이 직접 실험하는 환경에 따른 조명 등의 차이가 인식률을 크게 좌우하죠.

이러한 한계점들을 해결하기 위해 추가적인 다수의 변수들을 추가하여 학습데이터로 활용했습니다. 임의의 물체를 관심물체의 앞뒤로 덧입혀서 생성하거나, 같은 종류의 물체를 다수로 가져와서 덧입히고 이를 학습 데이터로 추가하고 이미지를 흐리게하고 컬러를 바꾸는 등 여러 신호 잡음을 추가했습니다. 그 결과 학습 데이터와 직접 실험하는 환경에서의 인식률 차이가 현격히 줄어들 수 있었습니다.

그림 8. 개선 전후 비교

그림 9. 개발한 segmentation 알고리즘 동작

2) Image-Retrieval-Based Method

이제 앞의 instance segmentation의 결과를 바탕으로 물체의 3차원 위치와 자세를 추정하는 단계입니다. 이를 위해서 visual localization에서 사용된 기술을 이용했습니다. Visual localization이란 사진 이미지를 분석해 해당 사진이 촬영된 정확한 사용자의 위치를 추정하는 기술인데요, 특히 네이버랩스의 VL정확도는 세계적인 수준입니다. 언뜻 보면 관련 없어 보이는 이 두 문제는, 사실 카메라와 피사체의 위치 관계를 알아내는 문제라는 측면에서 수학적으로는 동일한 문제입니다. 다만 데이터 도메인이 장소를 촬영한 이미지인지, 물체를 촬영한 이미지인지만 다를 뿐이라고 볼 수 있습니다.

그림 10. Image-retrieval-based pose estimation 알고리즘

우리는 이 visual localization에 사용된 image retrieval과 local feature matching을 차용하여 object pose estimation을 구현했습니다. Image retrieval은 query 이미지에 대해 데이터셋에서 가장 유사한 레퍼런스 이미지를 선별하는 문제입니다. 우선 target object의 3D 모델을 이용하여 다양한 방향에서 바라본 이미지들을 모아 레퍼런스 데이터셋을 생성합니다. 입력 이미지가 들어오면, 이 레퍼런스 이미지 중에서 orientation이 가장 유사한 이미지를 찾아냅니다. 그리고 입력이미지와 선별된 레퍼런스 이미지 사이에 동일한 점을 찾아내는 local feature matching을 수행합니다. 매칭된 점들을 정합하는 과정을 거치고나면, 최종적으로 물체의 위치와 자세를 알아낼 수 있게 됩니다.

그림 11. 물체의 자세추정 알고리즘 시연 영상

완성된 알고리즘의 시연 영상입니다. 상단의 두 이미지가 입력으로 사용된 RGB이미지와 depthmap입니다. 좌측 하단이 instance segmentation된 결과입니다. Instance segmentation의 정보와 입력 정보를 함께 이용하여 우측 하단의 6 자유도 자세 추정을 수행하였습니다. 추정된 6 자유도 자세를 박스의 형태로 표현하였습니다.

3) Keypoint-estimation-based Method of 6DoF object pose estimation

6 자유도 위치를 추정을 추정하는 또 다른 방식으로 keypoint를 이용하는 접근방법이 있습니다. 실시간 입력 데이터로 사진만이 주어졌을 때 물체의 6 자유도 위치를 추정하기 위해, 각 픽셀이 어떤 종류의 물체에 속하는 지(semantic segmentation)와 물체에 대한 n 개의 점(keypoints)을 신경망을 통해 추정한 다음 모델링된 물체의 3차원 공간 상의 keypoints와 연결하는 perspective-n-point 알고리즘을 통해 물체의 6자유도 위치를 추정할 수 있습니다.

그러나 모델링된 물체를 검은 배경 위에 rendering한 사진을 가지고 학습된 모델을 실제 데이터에 대해 실험해보니 제대로 된 segmentation mask를 얻을 수 없어서 결과가 좋지않았습니다. 따라서 배경을 COCO 데이터셋으로부터 합성하였고, 이에 따라 semantic segmentation module이 잘 학습되어 실제 데이터에 대해서도 정상적인 결과를 얻을 수 있었습니다.

그림 12. 학습 데이터가 검은 배경(윗줄), 합성된 배경(가운데 줄)을 가질 때와 강화된 color jitter를 사용하였을 때(아랫줄), 학습 데이터(가장 왼쪽)과 위치 추정 결과(나머지 오른쪽)

4) Pose Refinement

로봇과 물체의 접촉이 일이난다면 물체 자세의 변화가 필연적으로 발생합니다. 또한 Local feature matching 이나 keypoint 검출이 부정확할 경우 image retrieval 기반 또는 keypoint detection 기반 방법으로 추정된 물체의 자세에 오차가 생길 수 있습니다. 아래의 좌측 그림은 그 예시로 오차가 발생한 추정 결과를 입력 영상에 표시한 것입니다. 따라서 우측 그림과 같이 좀 더 정확한 자세를 측정하기 위해서 추정된 자세를 정제할 필요가 있습니다.

그림 13. 자세 정제 전(좌)과 후(우) 예시

위의 방법들로 추정된 자세를 초기 값으로 하고 이 값에 일정 범위 내의 noise를 무작위로 추가합니다. 물체의 3D 모델을 이용하여 단순 랜더링 기반 학습 데이터셋 생성과 같은 방법으로 noise가 추가된 자세에서의 가상 영상을 만듭니다. 자세 추정을 위한 입력 영상과 가상 영상에서 모두 edge를 추출합니다. 가상 영상에서 추출한 edge가 입력 영상의 edge와 정확히 일치한다면 그 가상 영상이 만들어진 자세가 정제된 자세가 됩니다. 아래 동영상은 이 방법을 Markov Chain Monte Carlo (MCMC) 기법에 적용하여 정제된 자세를 추정하는 과정을 보여줍니다.

그림 14. MCMC 기법을 적용한 자세 정제 알고리즘 구현 예시

4. 맺음말

네이버랩스에서는 다양하게 변화하는 외부환경과 인터렉션이 가능한 로봇 서비스를 목표로, 비전 기술을 고도화하고 있습니다. 특히 3차원 공간에서의 인지는 현재 학계에서 연구가 활발히 진행되고 있는 분야이며, 딥러닝 기반 기법들이 발전함에 따라 그 성능이 지속적으로 증가하고 있습니다. 네이버랩스에서 또한 딥러닝과 함께 처음보는 물체나 비정형적인 물체의 인지와 같은 비전 기술 연구의 영역을 계속해서 확장하고 있습니다. 이 흥미로운 도전을 함께 해나가고 싶은 분들을 언제든 환영합니다.

Career 바로가기 >

Related Articles