-
[논문 리뷰] PointNet (2) : 포인트 클라우드를 다루기 위한 딥 러닝 네트워크의 구조Autonomous Navigation/Perception 2021. 9. 2. 22:01
2021.09.01 - [Autonomous Navigation/Perception] - PointNet 리뷰(1) : 포인트 클라우드의 기초
PointNet 리뷰(1) : 포인트 클라우드의 기초
포인트 클라우드란 LiDAR, 스테레오 카메라 등의 센서로 생성 가능한 3차원 데이터로, 시야 내에 있는 물체까지의 거리를 나타내는 데이터라고 할 수 있습니다. LiDAR를 예로 들어 설명하자면 이 센
wjdghksdl26.tistory.com
저번 글에서 알아봤듯, 포인트 클라우드는 LiDAR 센서 또는 스테레오 카메라 등을 통해 생성 가능한 주변 공간의 3차원 매핑 정보라고 할 수 있습니다. 포인트 클라우드는 그 특성상 이미지 데이터와 유사한 부분도 있으나 몇 가지의 근본적인 차이를 보이며, 2차원 이미지에 쓰이는 CNN을 그대로 적용할 수 없습니다. 포인트 클라우드의 특성 중 주의해야 할 점들은 다음과 같습니다.
- 정렬되지 않은 데이터 : 포인트 클라우드의 각 점들은 그냥 좌표로써 존재할 뿐, 이미지 데이터처럼 정규화된 m x n의 구조로 이루어져 있지 않으며 순서가 매겨져 있지도 않습니다. 포인트 클라우드를 입력으로 받는 뉴럴넷은 점들이 어떤 순서로 들어오든 같은 출력을 내야 합니다.
- 점들 간의 관계 : 각 점이 가지고 있는 것은 위치 정보뿐이지만, 서로 가까이 있는 점들은 같은 물체로부터 나온 관측 결과일 확률이 높기에 점들 간의 관계를 파악하는 것이 매우 중요합니다. 뉴럴넷은 다수의 점들로부터 물체의 구조와 형상을 파악해낼 수 있어햐 합니다.
- 변환 불변성 : 포인트 클라우드를 다른 방향과 위치에서 본다거나 해서 결과가 바뀌지 말아야 합니다.
PointNet에서는 1번 문제를 symmetric function, 즉 입력의 순서에 상관없이 같은 출력값을 내는 함수를 사용해 해결하고 3번 문제는 입력 데이터를 고차원의 canonical space로 변환함으로써 해결합니다. 2번 문제는 뉴럴넷이 특화된 분야이기에 네트워크 설계 과정에 녹아들게 됩니다. 이것들이 무슨 뜻인지 순차적으로 살펴보겠습니다.
일단 PointNet에서 사용하는 symmetric function이란 무엇인지 살펴보겠습니다. PointNet에서는 포인트 클라우드의 각각의 점들을 MLP(Multi Layer Perceptron)에 통과시켜 feature를 뽑아낸 다음(그림에서 $ h $) max pooling(그림에서 $ g $)을 수행해 global signature를 뽑아냅니다. 더 쉬운 이해를 위해 중간 단계를 생략하고 차례차례 설명해 보도록 하겠습니다.
일단, 포인트 클라우드는 ($ n \times 3 $)형태의 행렬로 표현할 수 있습니다 ($ n $은 점의 개수, $ 3 $은 $ x, y, z $ 좌표). 이 각각의 점들을 동일한 뉴럴넷에 통과시켜(논문에서는 hidden layer 2개, 각각 뉴런 64개 사용) ($ n \times 64 $) 크기의 데이터로 만듭니다. 그리고 이걸 max pooling 함수(최댓값을 구하는 함수)를 통해 ($ 1 \times 1024 $)의 벡터로 만듭니다. Max pooling 함수에 의해 점들의 입력 순서가 상관없어진 것입니다! 논문 저자들은 이를 가장 중요한 key module이라고 칭하고 있습니다.
물론 전체 구조는 저것뿐만이 아닙니다. 실제로는 중간중간에 feature transform이 끼어 있고, MLP가 input data와 max pooling 사이에 두 번 반복됩니다(그림에서 mlp(64, 64)와 mlp(64, 128, 1024) 라고 되어 있는 부분). 마지막에 global feature가 바로 ($ 1 \times 1024 $)의 벡터입니다. 이 global feature 벡터에 전체 포인트 클라우드가 나타내는 고차원 의미 정보가 어떤 식으로든 들어 있다고 보면 되겠습니다(물론 우리가 해석은 불가능). 중간중간에 feature transform이 무엇인지는 맨 마지막에 설명할 예정이니 일단은 넘어가시기 바랍니다.
자, 이렇게 해서 포인트 클라우드의 "큰 그림" 에 대한 정보(global feature vector)를 얻었다고 합시다. 만약 이게 classification task라면 그 이후는 간단합니다. 포인트 클라우드에서의 classification이란 어떤 한 물체를 관측한 결과인 포인트 클라우드를 입력으로 받아 이것이 어떤 물체인지 알아내는 일이기 때문에 고차원 정보만 있으면 충분합니다. CNN에서의 object classification과 같이 global feature vector를 fully connected layer에 통과시켜 k개의 클래스에 대한 output score를 얻으면 됩니다. 끝!
그런데 semantic segmentation 등, 물체의 종류 같은 고차원 정보뿐만 아니라 보다 디테일한 정보(예를 들어 어떤 포인트가 어떤 클래스에 속하는가)가 필요한 task에서는 큰 그림만으로는 부족합니다. 큰 그림과 작은 그림에 관한 정보가 모두 있어야 이런 복잡한 task를 수행할 수 있습니다. 본 논문에서는 이를 위해 max pooling을 지나기 전의 정보인, MLP를 한 번만 통과한 데이터를 따로 가져와서(위에서 ($ n \times 64 $) 가 밑의 segmentation network로 들어가고 있죠?) global feature vector를 각각의 포인트 뒤에 붙입니다(즉, ($ n \times 64 $) + ($ n \times 1024 $)). 즉, 각각의 포인트에 대해 local 정보와 global 정보를 모두 알려준 것입니다! 이제 이걸 또 MLP에 통과시켜서 point features를 얻고(예를 들어 이 점은 어떤 물체의 일부인지에 관한 정보, 위에서와 같이 우리가 해석하기는 불가능합니다), 그걸 다시 MLP에 넣어서 각각의 점에 대한 output score를 얻습니다(위에서 segmentation network 마지막의 ($ n \times m $)). 이제 각 점이 어디에 속하는지에 관한 정보를 알게 되었습니다!
이제 마지막으로 남은 것은 중간에 넘어간 feature transform입니다. 초반에 설명했듯 포인트 클라우드를 처리하는 뉴럴넷에서 변환 불변성은 중요한 요소입니다. 본 논문에서는 이를 해결하기 위해 또다른 뉴럴넷을 사용해서 포인트 클라우드 데이터를 "정렬"해 줍니다. 직관적으로 이해하기는 힘든데, 관측 시점과 방향 등에 의한 영향을 제거할 수 있도록 변환한다고 생각하면 될 것 같습니다. 밑의 그림은 MNIST 데이터셋에서 임의로 회전된 숫자들을 똑바른 방향으로 돌려 주는 ST-FCN이라는 뉴럴넷인데, 이런 일을 포인트 클라우드에 대해 수행한다고 보면 되겠습니다.
본 논문에서는 이런 "정렬용" 뉴럴넷을 T-net이라고 부르며, 원본 포인트 클라우드에 대해 한 번, MLP를 통과한 데이터에 대해 한 번씩 돌려 주고 다음 단계로 넘깁니다(위의 전체 흐름도 참조). 구체적으로는, T-net은 데이터를 입력받아 3x3 또는 64x64 크기의 변환 행렬을 내놓는데 이것과 데이터를 곱연산하면 transform이 완료됩니다(T-net도 전체 훈련 과정에서 함께 훈련됩니다). 문제가 있다면, 64x64 변환 행렬은 엄청 고차원이기 때문에 제대로 된 변환을 학습시키기가 보통 일이 아닙니다. 그래서 변환 행렬이 orthogonal matrix에 가까워지도록 loss function에 다음 term을 포함시킵니다.
$ L_{reg} = \left \| I-AA^{^{T}} \right \|_{F}^{2} $
Orthogonal matrix를 목표로 학습시키는 이유는 input의 정보를 잃어버리지 않는 transformation이기 떄문이라고 합니다.
하여튼 이런 과정을 통해 object classification과 semantic segmentation 등의 task를 수행할 수 있다고 합니다. 그러나 몇 가지의 한계가 있으며, 이는 후속 논문 및 관련 연구들에 의해 해결되는 중입니다.
---------- 개인적인 생각 ----------
원리를 알고 있어도 역시 뉴럴넷은 신기합니다. 저렇게 설계를 해 놓았다고 해도 초기의 weight들은 완전 랜덤일 텐데, 이런 복잡한 task를 수행할 수 있는 방향으로 착착 학습되어 나갈 수 있다는 거 자체가 참 대단하네요.
추가적으로 드는 생각으로는, 포인트 클라우드 데이터로만 이런 task들을 수행한다는 건 참 대단하긴 한데, 역시 이미지 데이터가 제공하는 풍부한 정보들도 함께 사용하는 것이 좋지 않을까라는 생각이 듭니다.
찾아보니 그런 논문이 있네요! PointPainting이라는 뉴럴넷인데, RGB이미지로부터 얻은 semantic data를 사용해서 포인트 클라우드에 클러스터링 및 bounding box regression을 수행한다고 합니다. 곧 리뷰해 보도록 하겠습니다.
'Autonomous Navigation > Perception' 카테고리의 다른 글