PointNet

박지예·2023년 12월 24일

논문 정리

목록 보기
1/9
post-thumbnail

출처: PointNet 설명(Standford)
공부 참고 출처
공부 참고 출처2

3D 객체를 표현하는 다양한 방법

  • Point Cloud: 3차원 공간에서 있는 점들의 집합
    Point Cloud Point Cloud 예시

  • Voxel: Voxel Grid에서 표현한 3D 모델 VoxelVoxel 예시

  • Mesh: 2D 삼각형으로 구성된 3D 모델 Mesh Mesh 예시(출처: MeshLab)

PointNet의 개발 배경(개발:2017)

  • Point Cloud는 불규칙한 특성을 가진다 => 밀도가 고르지 않다.
  • 그래서 이전의 연구들은 Point Cloud -> Voxel로 변환했다. 즉, 대부분의 연구는 Point Cloud를 3D Voxel 또는 2D 이미지로 변환해서 사용
    Open3D를 이용한 Voxelization(출처: Open3D)

하지만, 이것은 공간 낭비로 비효율적이며 정보의 소실이 발생한다.

  • 공간 낭비: 3D Voxel로 변환하면 Voxel Grid안에 빈공간이 많이 생겨서 비효율적(아래 그림 참고)
  • 정보의 소실: Point Cloud가 Voxel에 비해 토끼의 모습을 더 구체적으로 나타내서 그렇다. 이것은 마치 아날로그 정보가 디지털 정보로 변환되며 생기는 데이터의 소실과 비슷하다고 보면 이해하기 쉽다.
    => 해결책: PointNet(Point Cloud를 그대로 입력 데이터로 사용하는 네트워크)

PointNet이 해결하려는 문제

  • 순서가 정해지지 않은 Point Cloud 집합을 입력받아서 같은 결과값을 추출할 수 있어야 한다. (입력의 점들에 대해 permutation invariance하다.)

PointNet을 수행하는 과정(neural network)

  1. 3D Object Classification: 이게 무슨 물체인가? 판독
  2. Part Segmentation: 어떤 물체 안에서, 이건 어떤 부분인가? (ex. 책상: 상판, 다리...)
  3. Semantic Segmentation: 어떤 배경(Scene)이 주어질 때, 그 배경 안에 있는 다양한 객체들에 대한 Segmentation 작업

=> 어떤 아키텍처가 필요한가?

PointNet Architecture

Classification Network 부터 보자.
1) nx3이 입력된다. n: 점의 개수. / 3: (x,y,z) 값
2) 처음 input transform에서 3x3 행렬과 곱해진다. => nx3 행렬이 된다.
3) mlp(64, 64): fully connected layer를 거친다.
4) feature transform: 64x64 행렬이 곱해짐 -> nx64 행렬이 된다.
5) mlp(64,128,1024): fully connected layer를 거친다.
6) 다음으로 max pooling을 수행한다. => 1024개의 global feature를 추출한다.
7) mlp(512,256,k): fully connected layer를 거친다.
여기서 k는 모델이 예측할 수 있는 label의 개수이다.
=> output scores: 최종 score

Segmentation Network
결과: nxm (n: 데이터의 개수, m: 각 데이터가 수확할 수 있는 label의 개수)

여기서 중요하게 볼 것은 Classification Network에서 max pooling(1번)과, Segmentation Network에서 nx1088 행렬(2번), 그리고 Classification Network에서 input transform(3x3 transform),feature transform(64x64 transform)(3번)이다.

정리

  • use of a single symmetric function, max pooling
  • network는 point cloud의 흥미롭거나 유용한 점을 선택하고 선택에 대한 이유를 encode하는 일련의 최적화 혹은 기준을 효과적으로 학습한다.
  • network의 Fully-connected layer는 학습된 최적 값을 전체 형상에 대한 global descriptor로 모으거나(shape classification), per point label을 예측하는데 사용된다.(shape segmentation)

1번: Max Pooling

Point Cloud를 계산하기 위해서는, symmetry Function이 필요하다.
(Symmetry Function for Unordered Input: 순서가 없는 입력을 위한 대칭 함수)
PointNet은 순서가 없기 때문에, N개의 벡터를 입력받았을 때, 입력 순서와 상관없이 항상 동일한 결과를 출력해야 한다.
=> 대칭 함수를 사용한다.
f(x1,x2) = f(x2,x1)

h: Hidden Layer
g: Max Pooling(대표값 추출)
f({x1, ... ,xn}) ≈ g(h(x1), ... ,h(xn))
(g와 h를 사용해서 f를 근사한다.)

PointNet 요약 정리

  • Unified Architecture
  • 입력 : Raw 3D point cloud data (x;y;z)
  • 출력 : class label (classification) or per point segment/part labels

0개의 댓글