[CVPR 2017] PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

안녕하세요 ! 3번째 x-review로 3D data를 다루는 논문을 처음 가지고 오게 되었습니다.

그럼 바로 리뷰 시작하겠습니다 !

1. Introduction

일반적인 convolution 구조에서는 input으로 regular한 포맷의 데이터를 요구합니다. 하지만 3D data라는 것은 2D 이미지와 다르게 geometric한 정보가 함께 포함되어 있어 point cloud 같은 경우 x, y, z 축의 정보로 이루어진 point들을 정보로 가집니다. 행렬로 얻어져 regular한 format을 가지는 것이 가능한 2D 이미지에 반해, point cloud는 irregular한 format을 가질 수 밖에 없습니다. 그렇기 때문에 보통 연구에서는 3D voxel grid나 이미지 collection으로 바꾸어 사용하려는 시도들이 있었습니다. 하지만 이러한 데이터의 transformation 과정에서 데이터가 지나치게 부피가 커진다는 단점이 발생합니다.

그래서 본 논문에서는 point cloud 를 직접적으로 input data로 사용할 수 있는 새로운 이미지 representation 방식인 PointNet을 제안합니다. PointNet은 똑같이 irregular한 데이터 형태인 mesh에 비해 point cloud을 입력으로 사용하여 복잡하지 않고 더 쉽게 학습할 수 있는 간단하고 unified sturcture이지만 그렇기 위해서는 permutation invariance와 rigid motion invariance를 만족해야 합니다.

permutation invariance라 함은 point cloud는 point들이 irregular한 형태로 제공되는 point 집합의 일종이기 때문에 어떠한 순서로 point들이 주어지더라도 output 결과가 달라지지 않아야 한다는 것 입니다. rigid motion invariance의 경우 point를 transformation 하더라도 point 간의 거리와 방향이 달라지지 않음을 의미합니다. 본 논문에서는 이 조건들을 만족시키기 위해 symmetric fuction으로 max pooling을 사용하고, spatial transformer network를 이용합니다. max pooling으로 informative한 point들을 선택할 기준에 대해 학습하고, 그 선택에 대한 이유를 encode하여 마지막 fc layer에서 maxpooling을 거친 값들을 global descriptor로 모아서 classification/segmentation에 사용합니다. 이 부분에 대해서는 뒤에서 더 자세하게 설명하도록 하겠습니다.

저자는 PointNet을 어떠한 set function으로 표현해도 continuous할 수 있기 때문에 point cloud를 input으로 다루기에 적합한 구조이며, input으로 들어가는 point cloud가 sparse of keypoint로 합쳐지도록 학습한다고 합니다. (여기서 sparse of keypoint라는 것은 시각화를 하였을 때 skeleton에 해당하는 point들을 의미합니다. ) 또한 PointNet은 outlier나 missing data와 같이 input point에서 생기는 작은 변화에 강인하다고 합니다. 여기까지의 내용을 정리하여 논문의 contribution을 살펴보자면 다음과 같습니다.

  1. 3D에서 unordered point를 다루기에 적합한 딥러닝 모델 설계
  2. 3D shape classification, part segmentation 등의 task에 사용 가능
  3. method의 stability/efficiency에 대한 실험적, 이론적인 분석을 제공
  4. network에서 학습하고 선택한 3D feature에 대한 설명

2. Related Work

Deep Learning on 3D Data

3D Data를 딥러닝에 적용시키기 위한 이전의 연구들을 살펴보자면 다음과 같습니다.

Volumetric CNNs은 voxel data를 3D CNN에 적용하는 연구로 voxel 형태로 데이터를 표현하는 것은 부피가 커져 data의 sparsity와 3D conv의 연산 때문에 reolution에 제약이 생기게 됩니다. FPNN이나 Vote3D 와 같은 방법론이 이러한 문제를 해결하려 했지만 여전히 매우 큰 point cloud 데이터에서는 callenge한 문제라고 합니다.

Multiview CNNs은 point cloud를 2D image로 변형시키고 2D CNN에 적용하고자 한 연구로 introduction에서 이야기한 image collection 바꾸려는 시도가 여기에 해당합니다. 해당 방법은 classification에는 나름의 dominant한 성능을 보였지만 scene understanding이나 다른 3D task에는 취약하여 여러 task에 범용적으로 사용하기에는 한계가 있었습니다.

이외에도 mesh를 CNN에 적용하는 Spectral CNNs이나 3D Data를 vector로 변형시키는 Feature-based DNNs 등이 존재합니다.

Deep Learning on Unordered Sets

이전까지의 연구에서는 ordered data에 집중하여 (speech, video, 3D Data) 연구를 진행하여 geometry 정보의 역할이 부족하였고 그렇기에 본 논문에서 unordered set인 point cloud를 직접 input으로 사용하고자 하였습니다.

3. Problem Statement

point cloud의 point들은 (x, y, z) 좌표 뿐만 아니라 rgb 정보가 담겨져 있는 feature channel도 가지고 있지만, 해당 모델에서는 간단히 (x, y, z) 좌표만을 사용합니다.

먼저 object classification task에서는 output으로 k개의 class에 대한 k개의 score을 가지며, segmentation task에서는 n개의 포인트에 대한 m개의 semantic subcategories를 가져 n*m개의 output을 가진다고 하네요. 이 부분보다는 point cloud의 point를 표현할 때 (x, y, z) 좌표를 사용한다는 점이 기억해야할 부분인 것 같습니다.

4. Deep Learning on Point Sets

4.1. Properties of Point Sets in \mathbb{R}^n

유클리디언 공간의 point들을 input으로 사용하기 위해서는 고려해야하는 사항들이 존재한다고 introduction에서 언급한 바 있습니다. 좀 더 자세히 3가지로 나누어서 생각해볼 수 있습니다.

Unordered

2D 이미지의 pixel array와 다르게 point cloud는 특정 순서라는 것이 존재하지 않고 하나의 point 집합으로 이루어져 있습니다. 즉, N개의 point들로 이루어진 point 집합이 만들어낼 수 있는 순서는 N!개가 되는 셈이죠. 이러한 N!개의 순서로 들어올 수 있는 input에 대해 output은 언제나 동일한 결과를 내뱉어야만 합니다.

Interaction among points

위에서 서술한것 처럼 point들은 유클리디언 공간, 즉 distance metric 공간에 존재하는 점들이기 때문에 각각의 점들이 독립적이 아니라 서로 의미있는 point가 될 수 있습니다. 그렇기 때문에 주변의 point들로부터 local feature을 얻을 수 있어, point 집합 안에서 의미있는 하나의 subset을 형성할 수 있습니다.

Invariance under transformations

3D는 기하학적인 object인만큼 point 집합은 특정 변환을 하게 되더라도 invariant 해야 합니다. 예를 들어 회전과 이동이 함께 적용되더라도 ( 해당 transformation이 제가 introduction에서 언급한 rigid motion invariant에 해당합니다. ) output 결과가 달라지면 안되겠죠.

4.2. PointNet Architecture

구조에서 눈여겨보아야 할 점은 3가지 입니다.

Symmetry Function for Unordered Input

input data의 순서에 invariant 하기 위해서는 보통 3가지 방법을 사용합니다. 먼저 input의 순서를 정렬하는 것 입니다. 가장 쉬운 방법이라 여길 수 있지만 dimension이 커질수록 사실상 거의 사용할 수 없습니다. 두번째는 모든 permutation을 고려하여 RNN을 적용하는 것인데, 모든 permutation에 대해 augment를 한다면 permutation invariant할 순 있겠지만 N개의 point에서 N!가지의 순서를 고려해야하는 상황에서 N의 숫자가 커져 large scale이 된다면 적용을 보장할 수 없습니다. 결국 본 논문에서 선택한 방식이 3번으로 symmetric function을 사용하는 것 입니다.

우선 symmetric function이란 계산하는 변수의 순서가 바뀌더라도 같은 결과를 내는 함수를 의미합니다. 가령 덧셈과 곱셈과 같은 연산들이 이에 해당하며 f(x, y, z)=f(z, x, y)를 만족하는 것 입니다. 본 논문에서는 바로 max pooling을 symmetric function으로 사용하였습니다. max pooling은 f(x, y, z)=max(x, y, z)가 성립되기 때문에 permutation invariance를 만족하며 symmetric function으로 사용될 수 있습니다.

Figure 2.와 식(1)과 함께 max pooling을 사용한 모델의 기본적인 module을 살펴보면 다음과 같습니다. 우선 n개의 point를 MLP(=h)를 적용한다고 가정하면 n*1024개의 feature을 생성하고 maxpooling(=g)을 거쳐서 최종 1024개의 값이 나오게 됩니다. 이 때 MLP를 지나가는 각 point들은 weight를 share하게 되어 모든 point에 대해 같은 weight를 가집니다. 그렇다면 point 간의 정보는 어떻게 가져올 수 있는지 생각을 해보면 max pooling을 통해 point들 중 max 값이라는 정보를 가져오게 되는 것이라고 생각합니다. max pooling까지 거쳐 얻은 1024개의 global feature을 마지막으로 MLP를 통과시키면 k개의 class에 대한 k개의 score을 얻을 수 있습니다. maxpooling으로 max값만을 global feature로 취했기 때문에 input point의 순서에 상관없이 동일한 값을 feature로 가짐으로써 permutation invariance를 만족하게 되었습니다.

Local and Global Information Aggregation

classification에서는 global feature을 SVM으로 학습시키거나, Figure2. 처럼 MLP를 거쳐 k개의 score, 즉 [f_1, …, f_K]형태의 vector을 얻을 수 있는데 segmentation은 각 point마다 어떤 class에 속하는 것인지 알아야하는 task인만큼 global feature가 아닌 local feature 또한 필요합니다. 때문에 global feature와 local feature을 같이 사용할 수 있도록 고안해낸 구조가 Figure 2.의 Segmentation Network 입니다.

global feature는 동일하게 max pooling layer까지 거친 1024개의 feature을 사용하고, mlp와 maxpooling을 거치기 전의 각각의 point feature을 따로 꺼내서 일종의 local feature로 사용하게 됩니다. point feature와 global feature을 concat함으로써 per point feature을 얻습니다. 그림상으로 concat이 단순히 64개의 local feature에 1024개의 global feature을 합친것으로 보이네요. 이렇게 합친 1088개의 feature을 mlp를 통해 n개의 point에 대한 m개의 score을 ouput으로 가지게 됩니다.

Joint Alignment Network

input으로 들어온 point cloud를 통해 의미있는 classification/segmentation을 하기 위해서는 특정한 transformation을 거치더라도 invariant 해야 합니다. 특정한 transformation이라고 함은 위에서 얘기한 permutation invariance와 더불어 rigid transformation을 이야기합니다. 보통 2D 이미지에 적용하는 방식인 feature 추출하기 이전에 canonical하게 정렬하는 방식인 STN을 T-net이라는 이름의 affine transforme을 수행하는 mini-network로 제안합니다. STN에 대해 먼저 간략하게 알아보도록 하겠습니다.

STN에서는 rigid motion invariance하기 위해서 image를 orthogonal하게 만들고자 합니다. 예를 들어 위의 그림처럼 회전,이동된 이미지를 orthogonal하게 만들기 위해서 transformation을 통해 canonical space로 보냅니다. 다르게 얘기하면, 이미지를 orthogonal 하기 위해선 어떤 transformation이 적용되어야 하는지 계산하고, 계산한 transformation을 input 이미지에 곱해줌으로써 변형이 일어나지 않은 output을 만들 수 있다는 것이 STN의 아이디어 입니다.

본 논문에서는 그러한 STN의 아이디어를 활용한 T-net을 제안한 것이죠. Figure 2.에서 input transform과 feature transform이 T-net에 해당합니다. input transform에서는 input image를 orthogonal하게 만들기 위해서 3×3의 transform matrix를 계산하였고, feature transform에서는 64×64 matrix을 계산하여 canonical space로 보내고자 하였습니다. 그러나 feature transform의 64×64 transform matrix를 계산할시 차원이 커져 optimize하는데 어려움이 생깁니다. 그래서 정규화하기 위해 식(2)를 추가합니다. A는 feature transformation에서 예측한 matrix로 AA^TI가 되어 orthogonal martix가 되도록 하였습니다. transformation matrix가 orthogonal matrix가 될수록 transformation matrix를 input 이미지에 곱했을 때 이미지의 정보를 잃지 않고 rigid motion이 가능해지기 때문에 transformation matrix가 orthogonal matrix에 가까워지도록 설정하였습니다. 실제로 해당 정규화 식을 추가함으로써 optimization이 더 안정적이고 더 나은 성능을 보였다고 합니다.

5. Experiment

5.1. Applications

3D Object Classification

classification에서는 classification benchmark인 ModelNet40으로 평가하였습니다. ModelNet40은 40개의 object category에 대한 12,311개의 CAD model로 구성되어 있습니다. 입력으로 들어갈 raw point cloud는 mesh face에서 1024개의 포인트를 샘플링하여 사용하였습니다.

Table 1. 은 이미지를 모델의 input으로 사용하기 전에 voxel grid와 같은 volumetric한 형태로 바꾸거나 multi-view image representation을 수행하는 이전의 방법론들과 고전적인 방식으로 feature extraction을 진행한 baseline, 그리고 fc layer와 max pooling을 모두 사용한 PointNet에 대한 성능 비교입니다. PointNet은 타 방법론과 비교해보았을 때 비슷하거나 좋은 성능을 보이고 있습니다. 월등하게 좋은 성능은 아닐지라도, raw point cloud를 어떠한 전처리 과정 없이 그대로 input data로 사용하여도 손색이 없다는 점을 증명하였기에 의미있는 실험 결과라고 생각합니다.

part segmentation은 일단 저에게는 굉장히 생소한 task로 .. point에 의자의 다리나 컵의 손잡이와 같이 part category label을 할당해야 하기 때문에 3D task 중에 어려운 task에 속한다고 합니다. ‘의자’, ‘컵’이라는 class에서 더 나아가 말 그대로 class의 어떤 부분에 label을 부여하는 task이라고 생각합니다. 해당 실험에서는 part segmentation을 per-point classification 문제로 간주하였고 평가 metric으로는 mIOU를 사용하였습니다. Table 2.는 베이스라인 네트워크를 3D CNN으로 잡고 PointNet의 성능을 비교한 결과 입니다. 고전적인 방식의 method들과 비교하였을 때 좋은 성능을 보임을 알 수 있습니다.

다음은 scene에서의 segmentation 실험 입니다. Figure 4.와 같이 room이라는 공간을 point로 나누어 segmentation을 진행하는 task 입니다. Dataset은 Stanford 3D semantic parsing dataset으로 271개의 room을 포함한 6개의 area에 대해 3D scan을 진행한 데이터셋 입니다. 각 point마다 13개의 카테고리에 대한 semantic label이 annotation되어 있습니다. Table3.의 결과를 보면 PointNet의 성능이 월등히 높은 것을 확인할 수 있습니다. 특이한 점은 본문에서는 point cloud의 (x, y, z) 좌표만을 사용한다고 표현하였지만 scene에서의 semantic segmentation을 수행하기 위해서 추가적으로 rgb 정보와 방에 대한 0과 1사이의 normalized location 정보를 추가적으로 사용하고 있습니다.

5.2. Architecture Design Analysis

이 파트는 다양한 방법론을 적용하여 실험을 진행한 성능 결과를 보여줍니다.

Comparison with Alternative Order-invariant Methods

permutation invariance 하기 위해서 max pooling 이외의 다른 방식을 사용했을 때의 성능을 비교하는 실험 입니다.

먼저 unsorted input / sorted input(max pooling layer 적용)으로 나누어 비교를 해보면 당연히 permutation invariance를 보장해주는 sorted input의 성능이 좋은 것을 알 수 있습니다. LSTM의 경우 max pooling을 적용한 것보다 높은 성능을 보이지만 .. Architecture 파트에서 설명했듯이 RNN 구조를 사용한다는 것은 아쉽게도 어렵습니다. LSTM 아래부터는 symmetry function 사이의 비교로 max pooling을 사용한 것이 가장 좋은 성능을 보이고 있습니다. attention sum이라는 방법은 각각의 point로부터 예측된 scalar score을 softmax 계산함으로써 normalize 된 score을 얻는다고 서술되어 있는데 해당 방식이 왜 symmetry function인 것인지 아직 잘 와닿지는 않는 것 같습니다 ..

input transformation과 feature transformation이 얼마나 효과적인지 보여주는 실험 입니다. input과 feature을 각각 사용했을 때보다 확실히 동시에 적용하는 것이 좀 더 좋은 성능을 보이고 있네요. 또한 input과 feature을 각각 적용했을 때 input transformation을 적용하였을 때 성능이 향상하고, feature을 사용하면 오히려 성능이 소폭 하락하는 결과를 보이는데 아마 input transformation이 입력으로 들어가는 point이 transformation에 강인하도록 만들어주기 때문이지 않을까 추측해보았습니다.

Author: 손 건화

7 thoughts on “[CVPR 2017] PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

  1. 안녕하세요 ! 좋은 리뷰 감사합니다.

    point cloud의 (x, y, z) 좌표만을 사용한다고 표현하였지만 scene에서의 semantic segmentation을 수행하기 위해서 추가적으로 rgb 정보와 방에 대한 0과 1사이의 normalized location 정보를 추가적으로 사용한 이유가 무엇인지 설명해주실 수 있으신가요 ?

    추가적으로, max pooling을 통해서 point들 중 max 값 정보를 가져오는 것이 point 간의 정보와 같다고 하셨는데,, 이해가 잘 가지 않습니다 . . 보충 설명 가능하신가요 . . ?

    감사합니다 ! !

    1. 안녕하세요 ! 리뷰 읽어주셔서 감사합니다.

      우선 scene semantic segmentation에서 (x, y, z) 축 이외에 추가적인 정보를 사용하는 것에 대한 본문 이상의 설명은 논문에 나와있지 않습니다 .. 아무래도 room이라는 scene에 대한 전체적인 segmentation을 진행해야하다보니 (x, y, z) 축만으로는 무리가 있지 않았을까요 .. ? (x, y, z)축을 사용하는 이유도 simple하기 때문이라고 적었으니 .. 어려운 task로 갈수록 더 많은 정보가 필요하지 않았을까 생각합니다

      그리고 “maxpooling을 통해서 point들 중 max 값 정보를 가져오는 것이 point 간의 정보와 같다”라고 이야기했던 이유는 mlp를 지날 때 node들이 모두 같은 weight를 공유하는 상황에서 point data의 max 라는 특정한 정보를 가지고옴으로써 point의 정보를 가져올 수 있었다는 의미로 제가 논문을 읽으면서 들었던 생각을 적었던 것 입니다 ㅎㅎ ..

  2. 좋은 리뷰 감사합니다.
    maxpool을 통해 permutation invariance를 해결하려고 한 것이 가장 큰 point라고 생각하는데 잘 캐치하셨네요ㅎ 간단히 질문 드리자면, “max pooling까지 거쳐 얻은 1024개의 global feature을 마지막으로 MLP를 통과시키면 k개의 class에 대한 k개의 score을 얻을 수 있습니다. ” 라고 하셨는데 1024개의 global feature라는게 1024개의 points들에 대한 feature를 의미하는 건가요?

    1. 안녕하세요 ! 리뷰 읽어주셔서 감사합니다.

      mlp를 통과시키면 n개의 점에서 n * 1024개의 shape이 생성되고 max pooling 하면 최종 1024개의 ouput을 만들 수 있습니다. 결국 n개의 점에 대해서 최종적인 global feature 1024개가 생성되는 것 입니다 !

  3. 꼼꼼한 리뷰 잘 보았습니다. 리뷰를 굉장히 잘 쓰시네요. 저한테 3D 데이터는 비디오 데이터가 익숙한데 point cloud라는 데이터의 속성을 잘 설명해주신 것 같습니다.

    몇가지 궁금한 점 질문드리겠습니다.

    일단 point cloud 데이터는 스케일이 어떻게 정의 되는지 궁금합니다. 일반적으로 이미지는 0-255의 스케일을 가지는데 point cloud는 어떻게 구성이 되는지 궁금합니다.

    그리고 Unordered로 표현이 된다는건 결국 point a b c가 입력으로 들어오든 b c a로 들어오든 같은 데이터라는 의미인가요? 순서가 정확히 무엇을 의미하는지 한번 더 설명해주시면 감사하겠습니다.

    1. 안녕하세요 ! 리뷰 읽어주셔서 감사합니다.

      point cloud의 구성은 기본적으로 (x, y, z)축으로 이루어져 있고 센서에 따라서 RGB 정보도 추가되어 RGB 정보의 경우에는 일반 이미지인 0-255 스케일을 가지고 있습니다. 이미지 데이터는 픽셀의 위치 정보를 항상 양수로 가지며 기준점은 좌상단으로 삼고 있는 반면, 포인트 클라우드는 점의 위치 정보를 양수 또는 음수로 표현할 수 있습니다. 또한 기준점은 센서의 위치로, point cloud는 어떤 센서에서 얻냐에 따라서 조금씩 다른 구성을 가지고 있습니다.
      point cloud라는 데이터 자체가 여러 포인트의 ‘집합’으로 말씀하신 것 처럼 Unordered로 표현이 된다는건 결국 point a b c가 입력으로 들어오든 b c a로 들어오든 같은 데이터라는 의미가 맞습니다 !

  4. 안녕하세요 건화님, 강제 추억 소환 죄송합니다..

    궁금한 점이 있는데, symmetric function에 덧셈과 곱셈과 같은 연산들이 아닌 maxpooling이 채택된 이유가 다른 방법들에 문제가 있어서 그런건가요?

    또 permutation invariance와 rigid motion invariance 를 만족하지 못 하면 point cloud를 input으로 직접 사용할 때 어떤 문제가 생기는지 궁금합니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다