해당 글은 1년 전에 읽었던 <PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation> 이라는 제목의 논문을 읽고 서툴게 정리해놓은 리뷰글입니다.
아직 수정하고 보완해야할 부분이 많고 미완성의 글이지만, 기록의 목적으로 포스팅했습니다!
혹시 제가 잘못 이해한 개념이 있거나, 포스팅 과정에서 문제가 되는 자료가 쓰였다면 댓글로 알려주시면 감사하겠습니다!
- polygon으로 표현된 Mesh
- voxel로 표현된 Volumetric (voxel은 단위영역을 육면체로 표현한 것으로 마인크래프트를 생각하면 쉽다.)
- point cloud (별도의 rendering이 필요하지 않다.)
(아래 내용들에 대해서는 다음에 기회가 되면 정리하고자 한다)
{}
Unordered: pixel이나 voxel과 다르게 특별한 순서가 없다. 따라서, n개의 point (x,y,z)를 net에 feeding하는 경우의 수는 n!. 그러나, deep learning에서는 모든 경우의 수에 대해서 neural network의 output이 같아야 한다.[permutation invariant]
→ point net의 solution: symmetric function의 일종인 max pooling을 적용하였다.
Point간의 상호작용: points는 거리체계를 가진 공간으로부터 얻어진 데이터들이다. 서로의 이웃이 존재하므로 의미있는 subset이 만들어 질 수 있으므로 이러한 의미를 반영하지 않는 무작위 입력값은 비교적 좋은 결과를 낼 수 없다.
→ point net의 solution: point net은 local structure을 잡아낼 수 있고, 그 structure간의 combinatorial interaction을 얻을 수 있다.
transformation: points를 회전시키거나 평행이동하더라도 global point cloud category나 point segmentation이 변화하면 안된다.[rigid motion invariant]
→ point net의 solution: STN(Spatial Transformer Networks)을 적용하여 points를 transformation해도 해당 point의 실체는 변하지 않도록 한다.
PointNet Architecture
sorting에 관한 issue (아직 정리가 되지 않은 글):
sorting이 간단한 솔루션같은 반면, 고차원 공간에서 point perturbations(혼란)에 관한 stable한 ordering은 존재하지 않는다. 즉, sorting(by symmetric function)은 ordering issue를 완전히 해결하지 못하고 ordering issue가 지속되는 한, network는 일관적인 mapping을 할 수 없다.
이에 대한 해결책은 MLP로 각 포인트에 대한 feature을 추출한 다음 symmetric function에 feeding하는 것이다.
mlp 처리하지 않고 바로 feeding하는 것보다 약간 더 나은 결과를 냈다. (궁금증: 더 나은 결과라는 것이 ordering issue를 거의 해결할 수 있게 되었다는 것인지, 단순 성능이 좋아졌다는 것인지 모르겠다.)
definition of symmetry function
https://pytorchhair.gitbook.io/project/introduction/semantic-segmentation
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sw4r&logNo=221490603530
https://m.blog.naver.com/lsj_dct96/221702796212