<Introduction>
Object에서 3D data를 받아올때는 이미지에서와 달리 geometric 정보도 담겨있다. 따라서 위 사진과 같이 x, y, z 축의 정보로 이루어진 point 들을 data로 받게된다.
이미지는 행렬로 data가 얻어지는데 각 pixel에 할당된 값은 RGB, 3차원 값이고 여기서 pixel의 geometric 정보는 행렬에서의 위치(ex. (98, 102) = (행, 열) ) 에 대응된다. 하지만 이미지에서와 달리 object에서 depth정보도 받아오는 3d data는 point 들로 data가 얻어진다. 이 point data는 행렬로 이루어져있지 않기 때문에 각 point가 (x, y, z) 축에 대한 data를 가지고 있어야하므로 기본적으로 3차원이다. 여기에 RGB 값이 더해지면 (x, y, z, r, g, b) 와 같이 6차원이 된다.
위에서 설명한 바와 같이 이미지는 행렬로 얻어지기 때문에 regular format으로 이루어져 있지만 point들은 irregular format으로 얻어진다. 즉, point들이 행렬과 같이 특정 order에 의해 grouping된 채로 얻어지는 것이 아니기 때문에 다양한 문제가 존재한다. 따라서 일반적으로 Figure 2 와 같이 polygon, voxel 로 point data를 rendering 한 후 사용한다.
이 논문에서는 unordered, unstructured data인 point data를 위와 같이 rendering하지 않고 직접 다루기 위해서 다음 두 가지 성질을 만족시켜야 한다고 말한다.
1. Permutation invariant
2. Rigid motion invariant
Permutation invariant)
point 들이 unordered 상태로 주어지기 때문에 네트워크는 어떠한 순서로 오더라도 output이 달라지지 않도록 해야한다.
즉, n개의 point가 있을때 이들이 얻어지는 순서의 경우의 수는 n!개 만큼 존재한다. 따라서 n! 경우의 수 모두에 대해서 output 결과는 동일하도록 network는 동작해야 한다. 이를 permutation invariant라고 한다.
Rigid motion invariant)
Rigid motion은 transformation을 해도 point들 간의 distance와 방향은 그대로 유지되는 transformation을 말한다.
여기에는 다음 네 종류의 transformation이 포함된다.
- (1) Translation : 도형의 모든 점이 동일한 방향으로 동일한 거리만큼 이동된다.
- (2) Rotation : 특정 점을 기준으로 도형이 회전된다.
- (3) Reflection : 특정 직선을 기준으로 도형이 대칭이동된다.
- (4) Glide reflection : reflection과 translation을 통해 도형이 이동된다.
추가로 translation invraiant에 대한 설명은 아래 글에서 확인할 수 있다.
2020/02/16 - [인공지능 AI/컴퓨터비전] - translation invariance 설명 및 정리
<Permutation invariant>
permutation invariant는 input data들을 어떤 순서로 받든지 output에는 영향을 끼치지 않아야 함을 말한다.
Figure 3 에서 볼 수 있듯이 input이 좌측 그림과 같은 순서로 주어지든 우측 그림의 순서로 주어지든 output에는 변화가 없어야 한다. 이러한 성질을 만족하기 위해서 이 논문에서는 symmetric function을 제시한다.
symmetric function이란 변수들의 위치(순서)가 바뀌어도 결과가 같은 함수를 뜻한다. 즉, 어떤 함수 f가 f(x, y, z)=f(y, z, x)를 만족하면 symmetric function이라 한다. 대표적으로 덧셈, 곱셈 연산들이 있다. 그리고 이 논문에서는
"Symmetric function으로 max pooling 함수를 제시한다"
Max pooling은 f(x, y, z) = max(x, y, z) 을 의미하기 때문에 당연히 permutation invariant를 만족하는 symmetric function이다.
추가적으로 feature extraction을 위한 network 역시 존재하는데 이는 아래와 같이 각 point마다 mlp를 통해 feature를 생성한다.
Figure 4 에서처럼 각 point마다 mlp를 통해 feature를 생성하고 생성된 feature를 column-wise 형식으로 max pooling을 거친다. 논문에서는 각 point마다 mlp를 통해 1024개의 feature를 생성하는데 이때 사용되는 mlp의 weight는 모든 점마다 동일하게 사용된다(= weight sharing). 이렇게 각 점마다 1024개의 feature를 만드는 과정은 input data의 perturbation에 대해서 robust하도록 만든다.
n개의 점이 mlp를 통해 nx1024의 shape이 되면 column-wise로 max pooling을 하여 1024개의 output 값이 나오게 된다.
Column-wise max pooling이 뜻하는 바는 n개 점에서 각 점마다 1024개의 feature를 뽑아내고 모든 점에대해 i번째 feature를 기준으로 max값을 뽑는 task이므로 global feature를 1024개 뽑는다고 할 수 있다.
최종적으로 point마다 feature를 만드는 mlp와 symmetric function의 역할을 하면서 global feature를 뽑는 max pooling 함수를 통해서 아래와 같은 symmetric function을 구성하게 된다.
g, h, r은 각각 Figure 4에서 확인할 수 있듯이 max pooling, mlp, mlp이다. 그리고 이 식 그대로 network도 구성되어 있는데 전체적인 network 구조는 아래와 같다.
(위 그림에서 input transform과 feature transform에 해당되는 부분은 다음 절에서 설명하겠다.)
앞서 설명한 그대로 복수개의 mlp(식1 - h)를 통해 각각의 n개의 점에서 1024개의 feature를 만들고 max pooling(식1 - g)을 통해 global feature를 생성하고 다시 mlp(식1 - r)를 거쳐 k개의 class에 대한 output score가 최종 결과로 나온다.
하지만 이는 classification을 위한 network이고 Figure 6의 아래 segmentation network을 보면 조금 다르다.
먼저 segmentation task를 수행하기 위해서는 global feature뿐만 아니라 local feature도 함께 이용되어야 한다.
classification은 input전체에 대해서 하나의 output(어떤 class인지) 만을 계산하는 task이지만 segmentation은 각 pixel별로 output(pixel/point별로 어떤 class에 속하는지) 를 계산해야 하므로 local & global 정보가 모두 필요하다.
따라서 이 논문에서 선택한 방법은 64개의 feature가 생성된 intermediate layer에 max pooling을 거쳐 생성된 1024개의 feauture를 concatenate 시키는 것이다. 즉, 각 point마다 생성된 개개인의 local feature 64개 뒤에 global feature 1024개도 뒤에 붙여줌으로써 local & global 정보를 결합한다. 이후에는 다시 mlp를 통해서 point별로 class들에 대한 score m개가 나와 nxm의 shape이 output으로 나온다.
<Rigid motion invariant>
Introduction에서 설명했듯이 CNN과 같이 동작하기 위해 input에 어떤 transformation이 가해져도 output 결과에는 영향을 끼쳐서는 안된다. point cloud에서는 이를 위해 spatial transformer network(STN)를 이용한다.
(https://arxiv.org/abs/1506.02025)
STN에서는 image에 대해 rigid motion invariant를 만족시키기 위해 image를 orthogonal하게 만든다.
Figure 7의 기울어진 숫자 9 이미지를 orthogonal하게 만들기 위해 transform을 적용하여 canonoical space로 보낸다.
이 과정을 수행하기 위해 STN에서는 아래와 같이 동작한다.
- (1) input image를 canonical space로 보내기 위해 (orthogonal하게 만들기 위해) 어떠한 transformation이 적용돼야 하는지 계산한다.
- (2) 계산된 transformation을 기존 input image에 곱하여 변형이 일어나지 않은 모습의 output image를 만든다.
이미지에서 적용되는 위 STN 아이디어를 가져와서 point cloud에서는 T-net을 소개한다.
Figure 7의 STN과 동일한 형태로 mini pointNet은 구성되어 있다. 먼저 T-net에서 point data들을 canonical space로 보내기 위해 적용되어야 하는 transformation matrix를 계산한다. 그리고 input data에 transformation matrix를 곱한다.
Figure 6에서 전체 pointNet architecture를 보면 input transform뿐만 아니라 중간에 feature transform도 존재한다.
이때 feature transform에서는 64x64의 transfomation matrix를 predict해야하므로 차원이 커서 optimize시키기 어렵다. 따라서 여기에 정규화 식을 추가하는데 이는 아래와 같다.
위 식은 trasformation matrix인 A가 orthogonal matrix가 되도록 하기위한 식이다. (orthogonal matrix x는 xx^T가 I이다.) transformation matrix가 orthogonal matrix가 되면 input matrix(=input 도형)에 곱해도 도형의 원래 고유모양이 바뀌지 않는, rigid motion이 되기 때문이다. 즉, rigid motion에 대응되는 transformation matrix가 되도록 하기 위해 위 정규화 식을 추가하였다.
그림 출처)