Paper/Others

Learning Implicit Functions for Dense 3D Shape Correspondence of Generic Objects

침닦는수건 2024. 10. 18. 15:31
반응형

내 맘대로 Introduction

 

주제는 관심에서 벗어나도 한참 벗어났지만, 3D dense correspondence라는 관점에서 참고할 만할까 해서 읽은 22년도 논문. 어떻게 하면 효과적으로 semantic embedding을 할 수 있을지 고민한 논문으로 embedding space 상의 거리로 correspondence를 찾아낸다. 

 

뭔가 이것저것 들어가있지만 결국 이것도 VAE와 95% 동일하다. 입력으로 들어간 N point와 별개로 중간에 query point가 따로 들어간다는게 차이일 뿐 거의 동일하다. 서로 다른 shape의 object를 대상으로 하다보니 mutual correspondence가 애초에 불가능하고, 그렇기 때문에 query point로 지정해서 correspondence를 풀고자 한 것 같다. 없으면 없다고 하게 하려고.

 

그리고 GT가 없는 대상이다보니 unsupervised가 주 초점이라 좀 포커스가 분산되어있는 느낌.

 

메모

풀고자 하는 문제는

object A, object B의 각 위치 p, q 간의 일치도를 계산할 수 있는 latent space를 구축하는 것이다. 



데이터 -> latent를 1대1 대응으로 콕 집는 방식으로해왔으나 이번에는 uncertainty를 포함한 mapping으로 풀어보겠다는게 차이

-> AE 대신 VAE를 활용해보겠다는 컨셉으로 넘어간 느낌.

일단은 Self recon 과정에서 embedding space를 구축하는 것을 기본으로 하고 이 때 gaussian 형태로 latent mapping을 한다. (sigma를 uncertainty로 쓰도록)

이후 같은 카테고리 object끼리 pair로 묶어서 latent를 기준으로 서로 교체해가면서 loss (recon, normal 비교) 를 걸어주는 식의 unsupervised + self-supervised다.
Encoder는 이 당시 point processing 정석 pointnet을 썼고 처음부터 VAE가 아니라 AE처럼 latent z 먼저 deterministic하게 뽑고

이 z + query 를 다시 semantic embedding + uncertainty로 mapping하는 방식이다. 

query가 추가된 이후부터 보면 VAE랑 비슷함.


이게 지금도 통용되는 논리인지는 모르겠으나 구조적으로 MLP 3개 이상을 쓰면 encoder 성능이 떨어진다고 해서 3겹만 쓰되 N개 (마치 head를 여러개 두는 식)으로 사용해서 연산을 늘렸다.

뒤에 decoder가 붙어야 self recon loss가 가능하기 때문에 뒤에 붙임

decoder 없으면 E(A), E(B)를 비교하는 식인데 이러면 연산량이 너무 많이 들어서 학습 capacity가 부족한 문제도 있음.


SCAN에서 N개 sample해서 쓰는 것. 이게 inside인지 outside인지 계산해서 0, 1 labeling도 해둠. k 파트로 나눈 것 별로 .


어느 파트에 속하는지를 상징하는 occupancy 


point cloud vs reconstructed point cloud 


self 아니고 이제 pair 단위로 볼때 loss



약간의 트릭이 있는데 object A, B 간의 occupancy embedding 값을 서로 swap해서 reconstruction 함

그리고는 cloest point 기준으로 비교 (chamfer distance)

같은 query에 대해서 같은 occupancy embedding이 나왔어야 하고, 그 기준으로 chamfer distance를 비교했다면 값이 작았을 것




나머지는 비슷한 컨셉을 normal 이나 point에도 옮긴 것

결과사진은 크게 볼 필요없으므로 생략.
반응형