PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation 논문 리뷰
안녕하세요 박희준입니다. 오늘은 인생 첫 3D 객체 관련 논문을 리뷰하는 날이라서 살짝 설렙니다.🤭 리뷰할 논문 이름은 PointNet입니다. 공간상 하나의 좌표를 의미하는 Point Cloud로부터 나온 이름인데요. 바로 논문 리뷰 진행해 보도록 하겠습니다!
목차
목차 구성은 최대한 논문의 양식을 따라가도록 했습니다.
- Point Net 개발 배경 및 소개
- 관련 연구
- PointNet이 해결하려는 문제
- 딥러닝을 활용한 해결 방안
- 실험 결과
- 결론 및 느낀 점
- 출처
위 7가지 순서대로 리뷰를 진행하겠습니다. 자 그럼 시작해 볼까요?! 🤩
1. Point Net 개발 배경 및 소개
- Point Cloud란 3차원 공간에 퍼져있는 점들의 집합을 의미합니다. 하나의 점은 x, y, z 값으로 표현할 수 있습니다.
- Point Cloud는 불규칙한 특성을 갖고 있습니다. 불규칙한 특성이란, 점들의 밀집도가 균일하지 않다는 걸 의미합니다. 아래 그림에 왼쪽은 Point Cloud로 표현한 토끼, 오른쪽은 Voxel로 표현한 토끼입니다. Voxel은 마인크래프트와 비슷한 개념이라고 생각하면 이해하기 편합니다. 😜
- Point Cloud의 불규칙한 특성 때문에, 대부분의 연구는 Point Cloud를 3D Voxel 또는 2D 이미지로 변환해서 사용합니다.
- 하지만, 3D Voxel로 변환하면 Voxel Grid안에 빈공간이 많이 생겨서 비효율적입니다. 아래 그림을 보면 토끼 한마리를 Voxel로 표현하기 위해서 3차원 행렬을 사용합니다. 하지만 대부분의 공간은 비어 있으므로 공간 낭비가 심하다는 문제가 있습니다.
- 변환 과정에는 또 다른 문제가 있습니다. Point Cloud에서 Voxel로 변화되는 과정에 정보가 소실됩니다. 이것은 Point Cloud가 Voxel에 비해 토끼의 모습을 더 구체적으로 나타내서 그렇습니다. 이것은 마치 아날로그 정보가 디지털 정보로 변환되며 생기는 데이터의 소실과 비슷하다고 보면 이해하기 쉽습니다.
- 이러한 문제가 있으므로 논문의 저자들은 PointNet을 개발하게 되었습니다. PointNet은 Point Cloud를 그대로 입력 받는 네트워크입니다.
- 하지만 Point Cloud는 3차원 좌표 공간에 있는 점들이 집합이므로 PointNet이 해결해야 할 문제가 있습니다.
- 첫 번째 문제는, N개의 점들의 입력 순서와 상관없이 항상 같은 결과를 출력해야 한다는 점입니다.
- 두 번째 문제는, 객체의 위치가 변하거나, 객체가 회전하더라도 같은 결과를 출력해야 한다는 점입니다. 아래 그림을 보면 이해하기 쉬울 겁니다. 아래 그림은 강체 운동이라는 개념입니다. 강체 운동이란 병진 운동(평행 이동)과 회전 운동으로만 발생하는 변환을 의미합니다.
- 지금까지 PointNet이 해결해야 하는 두 가지 문제를 소개했는데, 해결하는 방법는 뒤에서 소개됩니다.
- 이런 문제들을 모두 해결한 PointNet은 Object Classification, Part Segmentation 그리고 Semantic Segmentation 작업을 수행 할 수 있는 하나의 통합된 네트워크 구조로 이루어져 있습니다.
2. 관련 연구
2.1 Point Cloud Features
- 요기서 Point Cloud Features란 Point Cloud로부터 추출한 특징을 뜻 합니다. 2D Object Classification에서 이미지로부터 Feature Map을 추출하는 개념과 유사합니다.
- Point Feature는 수행하려는 작업에 따라 개발자가 원하는 방식으로 추출할 수 있습니다. 예를 들어, Point Feature는 한 점의 통계적인 특징을 표현할 수 있습니다.
- 그래서 Feature는 Intrinsic 또는 Extrinsic하게 분류할 수 있으며, 때에 따라 Local 또는 Global하게 분류할 수 있습니다. Local Feature는 한 객체의 Classification 작업을 할 때 사용된다면, Global Feature는 Semantic Segmentation을 할 때 사용할 수 있습니다.
2.2 Deep Learning on 3D Data
- Volumetric CNNs: Voxel에 Covolutional Neural Network를 적용한 방법입니다. 하지만 Voxel Grid에 의해 해상도에 대한 제한이 있습니다. 또한 컴퓨터 계산량이 너무 큰 문제 점이 있습니다.
- Multiview CNNs: 3D Point Cloud를 2D 이미지로 렌더링하여 Convolutional Neural Network를 적용한 방법입니다. 성능이 좋은 방법이지만, 3D Semantic Segmentation 등의 3D 작업을 할 수 없다는 단점이 존재합니다. 그리고 렌더링 과정에서 컴퓨터 계산량이 클 것입니다.
- Spectral CNNs: Mesh에 Spectral CNN을 적용하는 방법입니다. Spectral CNN이 뭔지 잘 몰라서 단점에 관한 설명은 생략하겠습니다.😅
- Feature-based DNNs: 3D 데이터로부터 도형 Feature를 추출하는 방식입니다. 하지만 Feature이 약하다는 단점이 존재합니다.
2.3 Deep Learning on Unordered Sets
- Point Cloud는 순서가 없는 벡터의 집합이라고 볼 수 있습니다.
- NLP는 Unordered Set이란 언어라는 데이터에 Deep Learning을 적용하는 분야입니다.
- 하지만, 3D 데이터와 같이 기하학적인 구조를 갖는 자료 구조에 Deep Learning을 적용한 사례는 많이 없습니다.
3. PointNet이 해결하려는 문제
- PointNet은 순서가 정의되지 않은 Point Cloud 집합을 입력받을 수 있어야 합니다.
- Classification 작업을 하기 위해서는 분류하려는 객체의 Point Cloud만 입력값으로 넣어야 합니다. 결과로는 k개의 점수를 출력할 수 있어야 합니다. 이때 k는 예측 가능한 클래스의 개수입니다.
- Part Region Segmentation 작업을 하기 위해서는 객체의 Point Cloud 집합만 입력값으로 받습니다. 그리고 n x m 점수를 출력합니다. 이때 n은 Point의 개수를 의미하고 m은 예측 가능한 클래스의 개수입니다.
- Object Region Segmentaion 작업을 하기 위해서는 3D Scene의 부분 집합을 입력값으로 받습니다. 그리고 Part Region Segmentation과 동일하게 n x m 점수를 출력합니다.
4. 딥러닝을 활용하여 해결 방안
4.1 PointNet이 가져야 할 특성
PointNet에 입력되는 데이터는 유클리드 공간에서 표현되는 점들의 집합니다. 아래 그림은 유클리드 공간에 어떤 한 점을 시각화한 내용입니다. 단순히 3D 공간이라고 이해하면 쉽습니다.
PointNet은 총 세 가지 특성을 갖고 있어야 합니다. 차례대로 소개하겠습니다.
- Unordered Input Invariance: Point Coloud 집합에 포함된 점들은 순서가 없습니다. PointNet에 입력되는 데이터가 N개라면, 네트워크는 데이터 셋이 들어갈 수 있는 순서인 N!개의 순열에 대해서 항상 동일한 결과를 출력해야합니다.
- Interaction Among Points: PointNet은 근접한 점들 사이에 거리를 계산해, Local Structure를 이해할 수 있어야 합니다. 또한, Local Structure 간의 결합도 이해할 수 있어야 합니다. 예를 들어, 동그라미를 여러 개 탐지했다고 동그라미를 출력하고 끝나면 안 됩니다. 여러 개의 동그라미가 네모난 판 위에 있는 걸 보고 바둑판이라는 결과를 출력할 수 있어야 합니다.
- Invariance Under Transformation: 객체가 회전 또는 이동하더라도 항상 동일한 결과를 출력해야 합니다.
4.2 PointNet의 구조
위에 보이는 그림은 PointNet의 구조입니다. 중요한 모듈은 세 가지 있습니다.
- Max Pooling Layer (빨간색): 입력된 N개의 점으로부터 중요한 정보를 추출합니다.
- Local and Global Information Combiner (초록색): Local Feature와 Global Feature를 통합합니다.
- Two Joint Alignment Networks (파란색): 입력된 Point Cloud와 추출된 Feature를 표준화하는 모듈이라고 생각하면 됩니다.
각 모듈에 대한 자세한 설명을 하겠습니다.
4.2.1 Symmetry Function for Unordered Input
- 위 그림에서 빨간색으로 친 부분입니다. 입력 값의 순서와 상관 없는 모델을 만들기 위해서 총 세 가지 방법이 있습니다.
- 첫 번째 방법은 N개의 데이터를 정렬하는 방식입니다. 하지만 N개의 데이터에 순서라는 걸 정의하기 힘들기 때문에 불가능에 가까운 방식입니다.
- 두 번째 방법은 RNN을 사용하는 방법입니다. RNN 같은 경우는 짧은 입력 순서에 대해서는 강건함을 보입니다. 하지만 Point Cloud와 같이 방대한 양의 데이터에 대해서는 학습하는 데 한계가 있습니다.
- 세 번째 방법은 간단한 대칭 함수를 사용하는 방법입니다. 대칭 함수는 N개의 벡터를 입력 받았을 때 N개의 벡터의 입력 순서와 상관 없이 항상 동일한 결과물을 출력합니다. 이때 대칭 함수란 정의역의 순서를 바꿔도 동일한 결과를 얻는 함수를 의미합니다. 아래는 대칭 함수의 예시입니다.
- PointNet의 전체 네트워크는 N개의 점들에 대해 어떤 결과를 출력해야 합니다. 예를 들어, PointNet이 수행하는 작업이 Object Classification이라면, 하나의 클래스를 예측해야 합니다. f(x1, x2, …. , xn)을 PointNet이 예측하는 값이라고 하겠습니다. 이때 f(x1, x2, …. , xn)을 Fully Connected Layer와 (이하 FC) Max Pooling만 사용해서 근사하게 만드는 게 Summetry Function for Unordered Input의 아이디어입니다. 아래 식을 봐주세요.
※ 참고로 논문에서는 FC란 말보다, Multi Layer Perceptron이라는 단어를 더 자주 사용합니다. 둘의 의미는 같으니까, 헷갈리지 마세요!
- h를 FC, g를 Max Pooling이라고 하겠습니다. 이때 Max Pooling은 대칭 함수가 될 수 있습니다. 1, 2, 3을 어떤 순서로 넣든, 항상 3이란 값이 출력 되기 때문입니다. 간단하게 설명하면, N개의 데이터는 FC를 거치고 Max Pooling을 하게 되어 항상 같은 값을 갖게 되는 것입니다. 아래 그림을 보면 이해가 쉬울 겁니다.
4.2. 2 Local and Global Information Aggregation
- PointNet이 Object Classification 작업만 한다면 4.2.1에서 구한 Global Feature만 있으면 됩니다. 하지만 Segmentation 작업을 하기 위해서는 Local Feature와 Global Feature에 대한 정보를 모두 알고 있어야 합니다.
- Global Feature 계산이 끝나면, Local Feature 뒤에 Global Feature 벡터를 연결하는 식으로 Global과 Local Feature를 통합했습니다. 통합한 n x 1088 크기의 새로운 벡터가 FC를 거치면서 새로운 Point Feautre를 갖는 n x 128 크기의 벡터가 생성됩니다. 이때 새롭게 만들어진 Point Feature는 Global과 Local 정보를 포함하고 있습니다.
4.2. 3 Joint Alignment Network
- 위 그림에서 빨간색으로 표시한 부분에 대한 설명입니다. Point Cloud가 강체 운동을 하여 원본 Point Cloud와 다르더라도, PointNet은 항상 동일한 결과를 출력할 수 있어야 합니다. 그러기 위해 사용된 간단한 네트워크가 Joint Alignment Network입니다.
- 우선 빨간 박스 안에 왼쪽 그림을 봐주세요. 아이디어는 간단합니다. T-Net을 거치면서 모든 점들이 표준화된 공간에 놓이게 하는 게 목적입니다. 즉, T-Net이 3 x 3 크기의 아핀 변환 행렬을 (Affine Transformation Matrix) 잘 예측하게 만들면 됩니다. n x 3 크기의 입력 데이터는 3 x 3 크기의 아핀 변환 행렬과 곱해져서 표준화가 됩니다.
- 빨간 박스 안에 오른쪽 그림을 봐주세요. 요기서 사용되는 T-Net도 동일한 방식으로 사용됩니다. Input Transformation을 거치고 나서 출력된 n x 3 크기의 벡터는 FC를 거치면서 Feature가 추출됩니다. 이때 출력된 결과는 n x 64 크기인데, Feautre 공간에 대해서도 표준화 작업을 거치기 위해 두 번째 T-Net이 사용됩니다. 이때 T-Net은 Feature 변환 행렬을 (Feature Transformation Matrix) 예측합니다. 두 번째 T-Net은 64 x 64 크기의 행렬을 예측합니다. 이것은 첫 번째 T-Net이 예측한 3 x 3 보다 훨씬 크므로 학습하기 힘듭니다. 그래서 PointNet의 Softmax Loss에 아래의 Regularization 항을 추가합니다.
- A는 두 번째 T-Net이 예측하는 64 x 64 크기의 행렬입니다. 이때 A는 직교 행렬이 되도록 제약을 받습니다. 직교 행렬은 입력 될 때 정보 소실이 없다고 하는데, 무슨 말인지 잘 모르겠습니다. 이해하셨다면 댓글 달아주세요! 아무튼 Regularization 항을 추가하므로 학습이 더 안정적이며, PointNet의 성능이 올라갔습니다.
5. 실험 결과
5.1 각 작업들의 실험 결과
- 5.1 Section에서는 PointNet이 수행할 수 있는 3D Object Classification, Object Part Segmentation, Semantic Segmentation 실험 결과를 설명합니다.
- 실험의 자세한 내용은 논문 뒤편에 Supplementary Section을 참고하세요!
5.1.1 3D Object Classification
- 입력 값이 Mesh, Voxel, Image인 State-of-the-art 3D Object Classification 모델과 성능을 비교한 표입니다. 실험은 ModelNet40 데이터셋으로 진행되었습니다.
- PointNet을 학습하기 위해서 학습 데이터의 Mesh 면에서 1024개의 점들을 고르게 샘플링했습니다.
- 입력 값이 Voxel인 Classification 모델과 비교했을 때 더 좋은 성능을 보였습니다.
- 요기서 ‘Ours baseline’이라는 모델의 결과도 포함되어 있는데, 어떤 모델을 의미하는지 모르겠습니다. 아마 논문의 Supplementary Section에 나오지 않을까 싶습니다.
5.1.2 3D Object Part Segmentation
- 위 표는 다른 3D Object Part Segmentation 모델과 PointNet을 비교한 결과입니다. 실험을 위해서 ShapeNet 데이터셋이 사용되었습니다.
- PointNet의 점수가 다른 모델들의 평균 점수보다 더 높습니다. 점수는 IoU로 계산이 되었습니다. 우선 각 클래스의 Groud-truth와 예측된 부분 사이에 IoU를 구합니다. 그리고 각 클래스 IoU의 평균을 구한 게 표의 두 번째 열에 속한 값들입니다.
5.1.3 Semantic Segmentation in Scenens
- 위 표는 PointNet과 Baseline 모델의 Semantic Segmentation의 결과를 비교한 표입니다. 비교를 위해 Stanford 3D 데이터셋을 사용했습니다.
- 값의 차이만 봐도 알 수 있습니다. PointNet이 압도적으로 성능이 뛰어납니다.
5.2 Ablation Experiment
5.2.1 Order-invarient 방식에 대한 비교
- 4.2.1 Section에서 순서가 없는 N개의 입력 값에 대해 항상 동일한 결과가 출력 되는 세 가지 방법에 대해 살펴봤습니다. 아래 표는 세 가지 방법을 비교한 실험 결과입니다.
- 세 방식 중에 Max Pooling이 가장 점수가 높습니다.
5.2.2 Input과 Feature Transformation의 효과 (T-Net)
- 아래 표는 Input Transformation과 Feature Transformation을 수행했을 때의 결과를 나타냅니다.
- Input과 Feature Transformation 모두 사용하지 않았을 때의 결과만 봐도 점수가 높습니다. 하지만 둘 다 사용했을 때 89.2%의 정확도를 보입니다.
5.3 PointNet의 강건함 🦾
- 아래 그래프는 PointNet의 강건함을 보여주는 그림입니다.
- 가장 왼쪽의 그래프를 봐주세요. N개의 Point Cloud가 있는 집합 S가 있다고 할 때, Random Input Sampling 방식으로 점을 제거했을 때 성능 변화에 대한 그래프가 빨간색 선입니다. S의 50%의 되는 양의 점들이 제거됐을 때도 성능은 3.8% 밖에 떨어지지 않습니다. 아마 Max Pooling을 사용하기 때문에 점수가 많이 떨어지지 않았을 거라고 생각이 듭니다. 🤔 파란색 그래프는 Furthest Input Sampling을 해서 Point Cloud를 제거한 방식인데, 그렇게 중요한 내용은 아니라서 Pass하겠습니다.
- 가운데 그래프를 봐주세요. Outlier에 대한 실험입니다. 요기서는 파란색 선만 봐주세요. 집합 S에서 20%의 점이 Outlier들이더라도 성능은 80% 이상입니다. 이런 성능이 나올 수 있는 것 역시 Max Pooling에 의해 Outlier들이 무시되어서 그런 것 같습니다.
- 오른쪽 그래프를 봐주세요. 집합 S에 모든 점에 대하여 Gaussian Noise를 줬을 때의 성능 평가입니다. x축은 분산인데, 값이 커질수록 성능이 떨어지는 걸 확인할 수 있습니다. 분산이 0.05일 때 성능이 80% 가깝게 나옵니다. 수치만 갖고는 이해하기 어렵네요. 😢 그림으로 나왔다면 이해하기 쉬웠을 것 같습니다.
5.4 시간 복잡도에 대한 분석
- PointNet은 1080X GPU에서 1초에 100만 개의 Point Cloud를 처리할 수 있습니다. 이게 얼마나 빠른 것인지 감이 쉽게 잡히지 않습니다. 하지만 다른 모델과 비교를 하며 PointNet의 속도를 살펴보겠습니다.
- 위에 표는 Parameter수와 FLOPs/sample을 비교한 그림입니다. 비교 대상은 PointNet, Subvolume, MVCNN입니다.
- PointNet이 파라미터의 수가 가장 적습니다. 그리고 성능도 다른 거에 비해 훨씬 빠릅니다. PointNet은 3D Object Classification을 하지만, 시간 복잡도는 O(N)입니다. 왜냐하면, 점들의 개수에 따라서 처리하는 양이 달라지기 때문입니다.
6. 결론 및 느낀 점
6.1 결론
- PointNet은 Point Cloud 데이터를 전처리 없이 그대로 입력 받을 수 있습니다. Object Classification, Part Segmentation, Semantic Segmentation을 할 수 있는 하나로 된 네트워크입니다. 그러면서도 다른 State-of-the-art 모델과 성능을 비교했을 때 견줄만하거나 더 뛰어납니다.
6.2 느낀 점
- 2D Object Detectoin 모델들은 입력 크기가 정해져 있었습니다. 하지만 PointNet은 입력 크기가 (N개의 점들) 제한되지 않는다는 점에서 사용하기 편하다고 느꼈습니다.
- 순서 없는 Point Cloud 입력에 대해서 항상 같은 결과를 출력하게 만드는 방식이 아직까지 100% 이해가 안 갑니다. Symmetric Function과 Max Pooling을 사용해서 이걸 가능하게 한 게 대충은 알겠는데, 정확하게 이해한 것 같지는 않습니다. 어렵습니다.
- 처음 읽어보는 3D 객체 관련 논문이었는데 내용이 너무 어려웠습니다. 별에 별 거 다 찾아보면서 리뷰했는데 3일 정도 걸렸네요. 😢 그래도 이제 시작이라고 생각합니다! 노력 없이는 얻는 게 없다는 말이 있죠. 열심히 하면 분명 빡고수가 될 수 있을 거라고 생각합니다!🫡
논문 리뷰하다가 카페 밖에서 본 냥이입니다. 너무 작고 깜찍하네요. 냥이는 사랑인 것 같습니다. 😽 아래는 Full 영상입니다!
7. 출처
- PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation, Qi et al., 2017–04–10
- [3D MACHINE LEARNING] — 3D DATA REPRESENTATIONS, Antoine Toisoul, 2021–03–18
- 포인트 클라우드(Point Cloud)란?, smlee, 2020-11-10
- 강체운동 — rigid body motion, CAE 지식채널
- 유클리드 공간, Wikipedia
- PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation, Computer Vision Foundation, 2017–08–12