해결하고자 하는 문제: Metric space points 때문에 local 구조 포착이 어렵다. 그렇기 때문에 미세한 패턴을 인식하거나 복잡한 scene들에 대해 일반화가 어렵다.
해결 방법: Hierarchical neural network인 PointNet++로 해결한다. 부분적으로 나눈 입력 point set을 중첩시켜 재귀적으로 적용시킨다.
Euclidean space의 포인트 집합에 대한 분석에 관심이 많음.
특히 geometric point set cloud를 중요하게 보는데, point set cloud 순서에 따라 불변해야 한다.
distance metric은 다른 특징을 보여주는 local 이웃 정보를 정의한다. 이게 무슨 말이냐면 density나 다른 속성들은 여러 위치에서 균일하지 않을 수 있다.
pointnet의 한계
- 직접적으로 point set을 처리한다.
pointnet이 포착하지 못하는 local 정보를 포착하기 위해 hierarchical neural network인 pointnet++ 제안한다.
- 계층적 방법으로 metric space에서 point를 샘플링하여 처리
요약
1. 해결하고자 하는 문제: 지역적인 구조를 포착하지 못하기 때문에 복잡한 장면의 일관성이 떨어지고 미세한 패턴을 인식하지 못한다.
2. 해결 방법: PointNet++(PointNet + CNN의 kernel 아이디어)
- Hierarchical 구조
- 입력 point set을 분할한 것을 중첩하는 과정을 반복적으로 적용
- multi scale로부터 feature combine
PointNet은 순서가 없는 point cloud로부터 불변한 결과를 출력하기 위해 max pooling을 사용한 후 모든 feature를 aggregate(하나로 모은다)한다. 그렇기 때문에 local 정보를 획득하기 어려운 점이 존재한다.
CNN은 kernel을 통해 input의 곳곳을 탐색하며 local 정보를 습득한다. CNN의 계층적 아이디어를 point set에 적용한다면 local region으로 분할하고 다시 중첩시키는 과정에서 고수준 정보를 추출하는 아이디어를 적용한 PointNet++ 아이디어로 해결하고자 한다.
1) point set을 어떻게 분할할까?
2) local feature learner로 point set이나 local feature set을 어떻게 추출할까?
두 가지 이슈는 서로 연관되어 있기 때문에 CNN처럼 weight를 공유하는 방법을 사용한다.
여기서 사용되는 local feature learner는 PointNet인데 PointNet을 사용하는 이유는 순서가 없는 point cloud에 대해 불변한 결과를 추출하기 때문이다.
바로 overlapping partitioning을 어떻게 생성할 지이다. 쉽게 설명하자면 우리가 위 두 가지 이슈에서 point set을 나누는 작업을 진행했는데, 포인트 집합 간이 겹쳐질 수 있도록 설정하는 것을 말한다.
이렇게 되면 경계 영역에서도 충분한 정보를 얻을 수 있다.
그래서 각 파티션을 만들 때 Euclidean 공간에서 중심점과 특정 크기를 갖는 구(ball)로 정의한다.
이 때 각 구(파티션)의 중심점은 임의의 포인트를 선택한 후, 그 포인트에서 가장 먼 포인트를 선택하고 이 과정을 반복하여 중심점으로 삼는다. 이게 바로 FPS(Farthest Point Sampling)이다.
point cloud는 부분마다 density(밀도)가 다르다. 그렇기 때문에 CNN과 같이 고정된 kernel size, stride를 사용하게 되면 어느 부분은 density가 너무 높고, 어느 부분은 density가 낮을 수 있다. 이를 해결하기 위해
1) 다양한 크기(multi-scale)의 이웃을 사용한다.
2) random input dropout을 사용한다.

PointNet은 규칙도 없고 순서도 없는 point cloud에 대해 불변한 결과물을 출력하기 때문에 learner로 사용한다.
그러나 PointNet은 local 정보 추출이 약하기 때문에 hierarchical layer를 사용하여 점점 더 큰 지역을 차례로 계산한다.
Point set은 2D와 다르게 균일하지 않다는 특징이 있다. 그렇기 때문에 발생할 수 있는 문제가 density가 높은 부분으로 학습시키면 sparse한 공간에 대해 일반화되지 않을 수 있다. 그렇기 때문에 density가 다른 문제를 해결하는 adaptive point net layer인 PointNet++를 사용하여 해결한다.


지금까지 진행하면 point set에서 고수준 정보를 추출한다. 그런데 이 때 발생하는 문제점은 내가 만약 point에 label을 붙여 segmentation task를 진행하고 싶다면 이미 압축된 point 정보로는 진행할 수 없다. 다시 말해 기존, 원래의 모든 점들에 대한 특징을 얻어야 한다. 그러나 모든 점을 샘플링하게 되면 계산 비용이 매우 높아진다.
이를 해결하기 위해 interpolation과 unit PointNet을 사용한다.
즉, subsampling된 점들을 interpolation을 통해 원래 점으로 전파하고, unit pointnet을 사용하여 feature vector를 얻는 과정을 반복하여 원래 점 집합에 대한 특징을 얻는다. 또한 skip connection을 통해 원본 점 정보까지 더해지며 최종 원래 점 집합에 대한 특징을 추출한다.
이를 통해 segmentation과 같은 task를 수행한다.
리마인드
방법론 위주로 정리한 PointNet++는 PointNet이 local 정보를 추출하지 못한다는 한계를 해결하기 위해 hierarchical 방법론을 적용하여 local 정보를 추출한다. centroid를 찾고, 그룹화하고, 그룹의 정보와 그룹 사이 정보를 추출한다. 특히, point set이 다양한 density를 가지고 있기 때문에 이를 해결하기 위해 multi-scale 방법을 사용하며 연산량을 줄이기 위해 MSR(하위 수준+전체 점) 방법을 사용한다.
이런 과정을 거쳤을 때 다시 segmentation과 같은 작업을 하기 위해 interpolation하고 feature를 추출하기 위한 unit pointnet, skip connection을 통해 원본 점들에 대한 특징을 추출한다.