반응형
내 맘대로 Introduction
이 논문은 Point cloud에 transformer 적용하는 방법을 고민한 point-transformer나 point-MAE같이 Mamba 구조를 어떻게 point cloud domain에 적용할지 고민한 논문. mamba는 sequential 처리 능력을 가진 구조이다 보니 전후관계를 따로 모델링할 필요가 없는 transformer 대비 어떤 point cloud가 먼저고, 뒤인지 정의하는 것이 필수적이다. 3차원 열린 공간에서 point cloud의 "선", "후" 개념은 사실 존재하지 않기 때문에 저자들은 일정 규칙으로 연결하는 룰 하나를 제안하고 그 룰 대로 정렬한 뒤에 mamba를 통과시키는 구조다.
효과는 예상 가능하게도, 폭발적인 메모리, 연산량 절약이다. 덤으로 MAE trick도 사용 가능한지 실험을 해둬서 point MAE의 대체재로 사용되길 기대한 것 같다.
메모
![]() |
SSM은 MAMBA의 전신이다보니 개념이해가 필요. 단순히 말하면 이전 상태로부터 정보를 넘겨 받는 단계 하나, 그리고 그걸 다음으로 넘겨줄지 말지 결정하는 단계 하나로 구성된 BLOCK이라고 보면 된다. RNN과 맥락을 같이 하지만, 기억력이 더 좋고, 안정성이 더 뛰어나다고 보면 됨 |
![]() |
space filling curve는 마치 여러개의 점이 있을 때 이를 한붓그리기 할 수 있는 경로를 의미한다. 한붓그리기를 할 때 가까운 점은 먼저 연결되고, 먼 점은 나중에 연결된다는 조건을 충족시킨 형태라고 보면 된다. 당연히 해는 여러 개 존재할 수 있는데, 구현할 때 규칙을 어떻게 결정하느냐에 따라 정해진다. 아마 저자들이 구현할 때는 그림으로 보면, unit-cube 공간 자체를 지나가는 길을 하나 만들어 놓은 것 같다. point cloud 순서를 그때그때 계산하는게 아니라 공간에 정의해놓고, 그 공간 안에 들어오는 pointcloud를 연결하는 순서이지 않을까. trans-hilbert는 hilbert를 말그대로 transpose 한 것인데, 내가 생각하기론 (x,y,z) 순서의 point cloud를 특정 규칙으로 연결한 것이 hilbert면 (z,y,x) 순서로 point cloud를 뒤집고 같은 규칙으로 연결한 것이 trans-hilbert 인것 같다. 이렇게 한 이유는 vision mamba에서도 방향성 문제 때문에 row 방향으로 한번, col 방향으로 한번 인코딩하는 것처럼, 여기서도 무수히 많은 방향성 중 대표 2개는 동시에 사용하는 느낌. |
![]() |
전처리 1) point cloud 내 한 점을 찍고, 가장 먼점을 찾는 것을 반복하는 Fathest point sampling(FPS) 해서 전체 개수 줄이기 2) 미리 정의해둔 curve를 따라 해당 voxel 경로를 따라가면서, 해당 voxel center에 가장 가까운 KNN 생성. |
![]() ![]() |
위에 설명한 순서 그대로. 1) FPS + KNN -> 이 때 FPS된 point cloud만 사용 한다. 2) PointNet으로 encoding 3) Ordering -> 2가지 방향으로 ->unidirectional modeling으로 가면 성능 구림. -------- * note 순서만 다를 뿐 KNN을 voxel center 기준으로 한다면 샘플링 결과가 같을 것이기 때문에 Ph 도 Ph'이 순서만 다른 집합일 듯. 근데 그냥 따로 처리함. |
![]() |
n x k x 3 point 들은 point net 작은 것을 통과해서 NxC의 point token이 됨. 그 다음 mamba에 들어 가기 전 순서가 다르지만 같은 정보라는 점에 착안해서, 두 경로로부터 나온 token들을 정렬하는 단계가 하나 있음. 같은 point 들을 순서만 다르게 정렬한 것이기 때문에 서로 linear mapping이 가능할 것이란 가정 하게 linear mapping layer를 하나 둔다. scale + trans 를 곱해주고 알아서 맞춰지길 기대. |
![]() |
mamba 구조는 거의 그대로 가져와서 썼다고 함. recap에 가까움. hilbert 이후에 trans-hilbert가 들어가는, 순서만 다른 중복 2번 처리하는 구조의 장점을 언급하는데 hilbert curve를 지나가면서 한 번 다 훑은 상태부터는 global을 알고 있는 것인데, 이 상태에서 다시 trans-hilbert curve를 훑으면서 하나하나 보면 global + local++ 이렇게 보는 것과 다를 바 없다는 주장이다. |
![]() |
실제로 mamba 구조를 반복하면서 정보가 전달되는 과정을 수식으로 보면 최종적으로 trans-hilbert curve를 따라가면서 계산하는 과정에는 hilbert curve 에서 뽑은 feature 전체가 반드시 끼게 된다. |
![]() |
|
![]() ![]() |
구조만 따라가고 요새 대세 MAE 방식으로 self-supervised training이 안되면 아무도 안 쓸 것. 그러나 transformer 구조랑 사실 크게 다를 바가 없다보니 그대로 적용 가능. ----- 특정 point KNN token을 마스킹하고 이를 다시 복원해내는 과정 chamfer distance 사용했다. |
![]() ![]() classification을 얼마나 잘 풀었는지는 이제 중요하지 않을 것 같고. |
|
![]() |
segmentation 부터는 의미가 있는 것 같은데, 잘 나오는 성능. |
![]() 구조는 attention보다 SSM이 좋다는 얘기. 한 번 써보고 싶긴 하다. |
![]() class token은 빼는게 더 좋았다고 함. |
반응형