내 맘대로 Introduction

논문 ETCH 에서 핵심으로 인용했던 SE3 equivariant network의 본체다. point cloud는 이미지랑 달리 3차원에 존재하기 때문에 rotation, translation이 발생할 수 있고, 이에 따라 point feature가 다르게 뽑히는 문제가 있다. 이를 해결하기 위해서 주어진 point cloud에서 feature를 뽑을 때, 어떻게 회전/이동 상태에 상관없이 feature를 뽑을 수 있을지 고민한 논문.
pinscreen에서 쓴 논문으로, 이전에 6D rotation representation을 소개한 논문도 그렇고 3차원 회전을 다루는데 진심인 그룹 같다. 이 논문도 어떤 실용성, 우수성보다 수학적 전개를 중심으로 하는 논문이라서 더 참고할만 하다.
핵심은 point cloud 상에서 3D convolution을 수행하는 것인데 (Graph convolution 마냥) 이 때 kernel의 디자인을 수학적으로 3D 회전/이동이 발생했을 때도 일관되게 했다. 말이 어려운데 간단하게 말하면, neighbor point 간의 상대 회전 / 상대 이동 값을 kernel의 입력으로 넣는 방식이다. 더불어 회전/이동을 동시에 다루면 자유도가 너무 높기 때문에 6D라서, 회전과 이동을 분리해서 다뤄 연산량을 낮춘 것도 핵심.
내용 자체는 좋지만 어려우므로, 그렇구나 수준으로 이해하고 코드를 보는게 나은 것 같다.
메모
![]() ![]() |
지향하는 바는 point cloud를 돌리고 feature를 뽑으나 feature를 뽑은 뒤 돌리나 똑같길 원한다. 그게 equivariant의 의미. 이를 구현하기에 가장 좋은 방식은 convolution 2D convolution도 그렇고, 국소적으로 보는 것을 반복해서 전체를 이해하는 방식이 이런 회전/이동 변환이 있는 상황에 적합함 예를 들면, MLP라면 다 때려넣어야 하는데 이 과정에서 회전/이동을 어떻게 같이 embedding해줄지 고민하는게 쉽지 않음 convolution이면 애초에 국소적으로 보고 상대 정보에 집중하기 때문에 여지가 더 있음 --------- 한 point가 주어지면 회전 방향 1개를 기준으로 다른 point와의 관계를 추정함 다시 말하면 point 1개당 feature가 F = V x D가 아니라 F = V x N x D 임 point directional feature를 뽑음. |
![]() |
회전 방향 N개를 어떻게 정할 수 있을까. 3차원 회전은 연속 공간에서 무한개인데... 정20면체의 회전 대칭성을 이용했음 12개 꼭짓점을 기준으로 각각 잡고 72도 씩 돌리면 정20면체는 그대로 회전 대칭임. 이 때 유니크한 3차원 회전을 모아보면 60개. 이 60개의 3차원 회전으로 3차원 공간의 무한한 회전을 approximation함. 이동 P는 nerighbor 개수 |
![]() |
|
![]() ![]() |
그림으로 보면 이럼, point 1개를 잡았을 때 neighbor point, xi in P에 대해서 60개의 회전 방향 x 상대거리 만큼 aggregation해서 feature를 만드는 방식. 근데 보다 시피 가짓수가 너무 많으므로 회전/이동을 따로따로 하되 여러번 반복해서 approximation하는 방식. ---- point A랑 point B를 비교한다 치면 A의 회전 상태 60개 x B의 회전 상태 60개 x 상대 거리 측정 이필요한 셈. |
![]() |
![]() 회전/이동 중 이동을 먼저 다룸 point A와 point B 의 회전 상태는 똑같다는 가정하에 상대거리 값 1개만 feature로 씀 neighbor에 대해서만 수행 --- explicit kernel은 상대 거리 값을 진짜 거리 그 자체로 쓰는 방식 implicit kernel은 상개 거리를 네트워크한테 맡기는 식. 후자는 학습 량이 필요하므로 여기서 주로 사용하진 않았고 마지막 layer 정도에서만 썼다고 함 |
![]() |
이제 회전 point A의 회전 60개 x point B의 K개 회전으로 축소함 원래는 60 x 60이겠지만 point A 회전 상태에서 neighbor 회전 K개만 뽑아서 축소. |
![]() |
이렇게 하면 원래 60x60 이었던 가짓수가 60x(K+N)개로 줄음. |
![]() 이렇게 설계한 뒤, 실제로 학습할 때는 각 회전 방향 60개에 대해 attention weight도 같이 추론함 weighted sum 할 수 있게. |
![]() feature aggregation할 때도 aggregation. |
![]() |
![]() |
![]() |
|
![]() ![]() |