본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Computer Vision

[Pose Estimation] 2D/3D Pose Estimation에 관한 내용

by zpstls 2023. 2. 15.
반응형

Computer Vision과 관련된 AI, Deep Learning 분야에서 거의 필수적으로 다루는 주제가 있습니다.

바로 Pose Estimation인데요.

이번 포스트에서는 이 Pose Estimation에 관한 내용을 다루고자 합니다.

 

 

Pose Estimation이란 무엇일까요?

사전적 정의로는 Computer Vision의 한 분야로 Object의 Position과 Orientation을 Detection하고자 하는 분야를 의미합니다.

좀 더 예시적으로 말한다면 위의 이미지와 같이 이미지 속에 위치한 사람의 Skeleton을 추정하는 것을 의미합니다.

보통 2D와 3D Pose Estimation으로 나누어 지는데, 2D는 결과값으로 각 신체부위의 X, Y 좌표를 반환하고, 3D는 결과 값으로 각 신체부위의 X, Y, Z 좌표를 반환합니다.

 

그렇다면 이러한 분야를 왜 연구하는 걸까요?

그 이유는 바로 다음과 같은 것들을 개발하기 위해서입니다.

홈 트레이닝, 이를 위해서는 구체적으로 사용자가 어떠한 동작을 수행하고 있는지 알아야 뭔가 조언을 해줄 수 있겠지요. 어떠한 동작을 수행하고 있는지 알기 위해서는 각 신체 부위가 어디에 위치하고 있는지 알아야 합니다.

 

모션 캡처의 경우, 보통 모션 캡처 센서를 사용합니다. 그러나 모션 캡처 센서가 상당히 비싸기도 하고 이를 몸에 장착하고 움직여야 하니 불편합니다. 그래서 그냥 카메라를 설치해 놓고 그 범위 내에서 움직이면 알아서 동작을 추출하는 프로그램이 개발되었고 이를 위해서는 필수적으로 Pose Estimation 분야가 필요하게 되었습니다.

 

이미지의 오른쪽 상단의 경우는 어떨까요?

사람의 동작을 따라 하는 로봇. 동작을 따라 하기 위해서는 역시 사람이 어떻게 움직이는지 알아야겠지요. 굳이 동작을 따라 하지 않더라도 사람과 비슷하게 움직이는 어떠한 기계를 만들기 위해서는 사람이 어떻게 움직이는지 데이터가 필요할 것입니다. 이 모든 것을 위해서는 Pose Estimation이 필수입니다.

 

더 나아가 사람이 어떠한 동작을 하고 있는지 판별/정의하기 위해서도 Pose Estimation이 사용됩니다. "왼쪽 팔과 오른쪽 팔을 번갈아가며 움직이고 왼쪽 다리와 오른쪽 다리가 번갈아 가면서 구부렸다 폈다를 반복한다"를 추출해야 "아! 이 사람이 뛰고 있구나"를 분석할 수 있습니다. 또 더 나아가 상호작용도 분석할 수 있습니다. "ID 0번 사람의 팔이 머리를 감싸고 있다. ID 1번 사람의 손이 ID 0번 사람의 머리에 붙었다 떨어졌다를 반복한다."라는 데이터가 오면 "ID 0번이 ID 1번에게 맞고 있다!"를 판별하고 어떠한 기관에 메시지를 보낼 수도 있겠지요.

 

이처럼 상당히 여러 분야, 특히 사람과 관련된 분야에서 많이 사용되는 것이 Pose Estimation입니다. 그렇다면 이제 본격적으로 연구/개발적인 측면에서 이 분야의 Trend가 어떠한지 알아보도록 하겠습니다.

 

 

 

 

3D Pose Estimation R&D Trend

우선, 2D와 3D Pose Estimation이 있지만, 좀 더 고도화된 연구 실적인 3D Pose Estimation을 기준으로 설명해 보도록 하겠습니다. (2D Pose Estimation도 3D Pose Estimation과 비슷합니다.)

 

  • Hardware 측면

Pose Estimation을 수행하기 위해서 필수적인 요소가 있습니다. 바로 센서입니다. 카메라가 되었든 IMU 센서가 되었든, 어찌 되었든 센서가 필요합니다.

보통 사용되는 센서는 Camera와 IMU 센서입니다. 이 중, 요즘 Trend는 Camera에 있습니다. 그 이유는 센서를 입는 것보다 간편하다고 생각해서이겠지요.

 

Camera도 여러 종류가 있습니다. IR Depth Camera, Depth Camera, Single RGB Camera 등을 생각해 볼 수 있을 것입니다.

IR Depth Camera는 우리가 흔히 사용하는 키넥트를 의미합니다. 보통 키넥트는 해당 제조사에서 SDK로 Pose Estimation을 제공합니다.

Depth Camera는 렌즈가 2개 달린 카메라로 Projection 계산을 통해 Z값을 추정하는 카메라입니다. 이를 이용해 우선적으로 어떠한 신체 부위의 X, Y값을 추정한 후, 이 좌표에서의 Z값을 추출해 3D Pose를 구현합니다. 또 다른 방법으로는 공간에 카메라를 여러 대 설치하고 동기화된 상태에서 촬영을 진행합니다. 그리고 이렇게 추출된 Multi-View Image를 이용해 3D Pose를 추정하는 방법입니다. 이 또한 Projection 방식을 좀 더 넓은 범위로 넓혀 사용한 방법이라 할 수 있습니다.

Single RGB Camera는 우리가 흔히 사용하는 WebCam, Phone Cam 그 모두를 의미합니다. 가장 일상생활과 밀접한 센서이지요. 그래서인지 이 HW를 사용해 Pose를 추정하는 분야가 현재 가장 활발하게 연구되고 있습니다. 앞으로 다룰 내용도 이 센서를 이용한 Pose Estimation에 대한 것입니다.

 

 

  • Software 측면

HW적 측면을 배제하고 SW적인 측면에서의 Trend는 어떨까요? 크게 두 가지로 나누어집니다. 바로 Dataset과 NET Structure입니다.

얼마나 좋은 Data Set을 구성하느냐에 따라 AI의 성능 및 기능이 달라집니다.

Dataset For Pose Estimation

보통 가장 흔하게는 MPII & COCO Dataset을 이용해 Pose Estimation Model을 학습시킵니다. 이를 이용하면 상당히 높은 정확도를 가진 Pose 추정 AI를 만들 수 있습니다. Dataset은 많으면 많을수록 좋고, 여러 가지 특성을 가지고 있다면 더 좋겠지요. 그래서 Dataset에 대한 연구도 상당히 활발하게 진행되고 있습니다.

스포츠 자세에 대한 Dataset, 팔과 팔목에만 집중한 Dataset, 여러가지 View를 제공하는 Dataset 등 용도와 양상이 모두 다릅니다. 또한 결국 이러한 Dataset도 사람이 만들게 되는데 (보통 센서를 통해 위치 값을 측정하여 Dataset을 만들게 되는데, 그 센서 값 자체가 오차가 있다면 Dataset의 신뢰도가 떨어지기 때문입니다.), 좀 더 정확한 측정을 위해 Unity 등의 가상 세계에서 기계적으로 측정되는 위치값을 토대로 구성되는 Dataset도 있습니다.

이처럼 보다 좋은, 다양한 Dataset을 구성하기 위한 연구도 활발히 진행되며 하나의 트렌드로 자리 잡고 있습니다.

 

얼마나 좋은 NET Structure를 설계하느냐에 따라서도 AI의 성능이 달라지게 됩니다. 보통 ML 연구원이라면 여기에 주로 집중합니다.

Network For Pose Estimation

Deep Learning Model에 관해서 자세히 다루진 않겠지만, 위와 같이 보통 NET을 표현합니다.

CNN 모델을 사용할지 RNN 모델을 사용할지, 이미지의 크기를 줄이면서 수행할지, 유지하면서 수행할지, 몇 개의 층을 쌓을지 등의 여부들을 결정하여 설계에 포함시켜 가며 ML Model을 만들어 나갑니다. 결국은 어떻게 하면 빠르게 여러 가지 데이터들 사이의 특징을 잘 뽑아내어 분류하고 예측할 수 있을까에 대한 연구를 NET Structure 설계를 통해 진행합니다.

 

위 이미지의 중앙에 위치한 NET은 고해상도의 인간 포즈를 추정하는 모델입니다. 보통은 이미지의 크기를 줄여 특징을 뽑아내고 줄였던 이미지를 다시 늘리는 방식으로 NET를 구성합니다. 그런데 이 모델은 해상도를 유지하면서 특징을 뽑아냅니다. COCO Dataset을 이용한 Model 중에서 성능이 우수한 모델이라고 합니다. 이처럼 어떠한 아이디어에 착안하여 NET를 구성하는 것에서부터 ML NET 개발이 진행됩니다.

위 이미지의 맨 아래에 위치한 NET은 Stacked Hourglass Network이며 ML 개발자들에게는 모래시계 네트워크라고 불리기도 합니다. 마치 모양이 모래시계를 쌓아둔 모양이라 하여 붙여진 이름이라고 합니다. 해당 네트워크는 CNN 기반의 네트워크이며 Convolution과 Max-Pooling을 통해 Down Sampling 과정을 통해 이미지 속 모든 Scale에 관한 정보를 추출합니다. 하나의 Hourglass 네트워크를 여러 개로 확장하여 단계적으로 특징을 뽑아내는 구조이며 보통의 경우, 쌓으면 쌓을수록 정확도가 높아진다고 합니다. 이러한 구조들이 교과서적인 Model로 자리 잡으면서 이후 연구되는 NET들이 이 모델을 참조하여 생성되기도 합니다. 이미지 속 상단에 위치한 모델들처럼 말이지요.

 

어찌 되었든, Dataset과 NET Model을 주축으로 하여 Pose Estimation이 활발히 연구되고 있답니다.

 

 

How To Estimate Pose?

앞서 Pose Estimation이란 무엇인지, Trend는 어떠한지 살펴보았습니다. 그렇다면 구체적으로 어떻게 자세를 추정할까요?

모든 과정을 다루진 않을 것이고 가장 기초적이며 직관적인 과정만 설명해 보겠습니다.

 

다음과 같이 크게 2가지 방향으로 개발이 진행됩니다.

Top-Down Approach는 왼쪽 이미지처럼 사람을 먼저 Detection 합니다. 이후 ID 0번 사람 그러고 ID 1번 사람 각각의 각 신체 부위를 Detection하고 이들을 통해 Skeleton을 조합합니다.

Button-Up Approach는 오른쪽 이미지처럼, 각 신체 부위를 먼저 Detection합니다. 그리고 나서 이 Position을 조합해 각각의 Skeleton을 구성합니다.

 

Top-Down 방식은 Bottom-Up 방식에 비해 정확도가 높습니다. 그러나 여러 사람을 추적할 경우에는 계산 속도가 느리다는 단점이 있습니다. 그도 그럴 것이, 사람을 Detection 하는 과정 + 각 신체 부위를 Detection하는 과정, 2가지 과정을 수행해야하기 때문이지요.

Bottom-Up 방식은 각 신체 부위를 Detection하는 과정만 수행하면 됩니다. 때문에 계산 속도가 빠릅니다. 하지만 정확도는 떨어집니다. 위 이미지를 보면 생각해 볼 수 있습니다. 빨간 점만 찍여있는 것에서 Skeleton을 구성하라고 한다면 사람도 정확히 구성하기 어려울 수도 있겠지요.

 

이처럼 위와 같은 방식을 통해 Pose Estimation을 수행합니다. 물론 그 세부 내용은 배제하고 큰 틀에서 본다면 말이지요.

 

 

해당 분야의 성과는 어느 정도 나오고 있다고 생각됩니다만, 생각보다 널리 사용되고 있진 않은 것 같습니다. 아마 불안정성 때문이겠지요. 하지만 Pose Estimation이 여러 분야에 활용될 수 있는 만큼 알아두면 좋을 것 같다는 것은 부정할 수 없을 것 같습니다.

 

이번 포스트는 여기서 마무리하도록 하겠습니다.

반응형

댓글