전체 글 611

As-Rigid-As-Possible Surface Modeling

내 맘대로 Introductionregistration에서 무조건 사용하는 non-rigid ICP의 핵심 원리가 나와있는 논문. ARAP이라고 불리기도 하는데, 2007년 논문이다. 이젠 15년도 더 된 논문인데 아직까지 사용되고, 이것만 한게 없다고 하는 논문. 임팩트가 참 좋은 것 같다. 논문도 깔끔함. mesh deformation 시에 mesh가 stretching, shear같은 non-linear deformation을 당연히 겪게 되는데 이를 그냥 열린 문제로 최적화하면 형상이 일그러진다. 핵심 아이디어는 stretching, shear가 발생하더라도 국소적으로 face와 그 주변 face들만 보면 rigid하게 움직인다는 것이다. 마치 자전거 체인이 각 분절은 쇠라서 고정되어 있지만 전체..

Paper/Others 2024.07.16

Open3d ray casting 쉽게 하기, 2d point to mesh intersection 찾기

camera pose, intrinsic parameter, 2d keypoint를 알고 있을 때 이를 3D mesh으로 back projection하려면 ray casting을 해야 한다. 직접 구현하려면 연산량 문제로 속도가 어마어마하게 느리기 때문에 최적화가 잘 된 기능을 가져와서 사용하는게 무조건 낫다.  우회법으로 3d mesh vertex를 projection한 뒤, 2d keypoint와 가장 가까운 vertex를 찾아내는 식으로 할 수 있겠지만, 이 방법은 vertex가 충분히 많아야 하고, mesh가 1겹일 때만 가능하다.  얼굴을 예로 들면, face keypoint와 head mesh 간의 비교 시 우회법으로 구현하면, 눈 keypoint가 뒤통수에서 나오는 경우가 있다. 당연하게도,..

Knowhow/Vision 2024.07.16

DPHMs: Diffusion Parametric Head Models for Depth-based Tracking

내 맘대로 Introduction 이 논문은 NPHM의 활용에 해당하는 논문이라고 볼 수 있다. 이상적으로 잘 학습되어 있는 NPHM이 존재한다면, 이를 depth iuput에 fitting했을 때 품질 좋은 mesh가 나와야 한다. 하지만 NPHM은 watertight high quality mesh를 이용해 학습한 모델이다 보니 depth input 같이 noise가 심한 경우 fitting이 잘 안된다. 결과적으로 mesh도 입력 영상과는 다른 값이 나오게 된다. DPHM은 이를 해결하기 위해서 NPHM id, expression latent를 denoising한다는 컨셉의 diffusion model을 갖다 붙인다. NPHM으로만 찾아낸 id, expression latent가 초기값이 되고 de..

Paper/Human 2024.07.15

Trimesh to Open3d TriangleMesh

python에서 mesh 읽고 쓸 때, 대표적으로 사용하는 Trimesh와 open3d. 이 둘 간의 mesh 변환을 할 때 약간의 주의 사항이 있다. 단순히 vertex와 face 구성만 변환한다면 trimesh에서 as_open3d 라는 함수를 지원해주므로 간단하지만, texture까지 옮길 때는 조금 차이가 있다. def trimesh2open3d(mesh_path, texture_path): mesh = trimesh.load_mesh(mesh_path) vertices = mesh.vertices faces = mesh.faces uvs = mesh.visual.uv uvs[:,1] = 1-uvs[:,1] triangles_uvs = [] for i in range(3): triangles_uv..

Knowhow/Vision 2024.07.12

Dense Semantic and Topological Correspondence of 3D Faces without Landmarks

내 맘대로 Introduction template mesh와 SCAN이 있을 때 보통 registration은 keypoint를 이용한 rigid ICP 후  non-rigid ICP를 돌리는 것이 일반적이다. 하지만 keypoint를 뽑아내는 전처리가 필요하고 이 정확도에 따라서 성능이 좌지우지되는 부분이 있다. 이 논문은 ECCV 2018년 논문으로 조금 되긴 했지만, 딥러닝 붐 이후로도 뚝심있게 여전히 최적화 노하우를 소개한다. Keypoint 없이 그냥 registration하는 ICP 노하우이자, topology까지 최대한 유사하게 맞추면서 fitting하는 노하우를 소개한다.  얼굴같이 geometry가 사람마다 유사한 mesh여서 가능한 기법. 메모시작은 역시나 ICP다. 얼굴만 대상으로 하..

Paper/Human 2024.07.11

MonoNPHM: Dynamic Head Reconstruction from Monocular Videos

내 맘대로 Introduction NPHM 이 나온지 1년만에 같은 저자가 NPHM++과 같이 새 논문을 내었다. 제목도 그렇고 마치 주어진 비디오의 정보를 이용해서head model을 만드는 것 같지만 아니다. 모델은 NPHM처럼 따로 존재하고, 이걸 모든 비디오 프레임을 이용해 동시에 최적화+트래킹한 뒤, canonical model만 꺼내는 식으로 얻어내는 것이다.  핵심은 NPHM과 같은 모델을 학습한 것. 그럼 NPHM을 가져다 쓴 것이냐? 새로 학습했다. 그 생각엔 크게 없다. apperance(color)를 표현하는 texture space를 추가하고 싶어서 새로 한 것 같은데, 사실 비디오에 fitting할 때 keypoint만 갖고도 할 수 있으니 NPHM으로도 같은 결과물을 얻어낼 순 ..

Paper/Human 2024.07.11

Learning Neural Parametric Head Models

내 맘대로 Introduction 이 논문은 head parametric model을 implicit function 형태로 만든 논문이다. 어떻게 보면 imGHUM 과 맥락을 같이 한다고 볼 수 있지만 기존의 explicit mesh model을 implicit하게 변형하는게 아니라 애초에 처음부터 3D SCAN 데이터를 갖고 새로 만드는 것이기 때문에 차이점이 명확하게 있다.  PCA 기반 방식의 smoothing되고, 지나치게 평준화된 결과에서 벗어나 implicit function 형태 (deformable NeRF MLP들)로 표현함으로써 좀 더 디테일한 표현이 가능하게 됐고, 해상도 또한 자유롭게 조절할 수 있게 되었다.  아무래도 파라미터가 PCA 파라미터가 아니므로, 파라미터를 직관적으로 ..

Paper/Human 2024.07.11

Reconstruction of Personalized 3D Face Rigs from Monocular Video

내 맘대로 Introduction 개인적으로 또 역작이라고 생각하는 논문을 발견했다. 2016년 ACM에 게재된 논문이라 오래 되긴 했지만 그 깊이와 성능은 오히려 요즘 쏟아져 나오는 논문들을 부끄럽게 만들기 충분한 수준인 것 같다. 이 당시에는 디테일을 설명하지 않아도 모두가 이해하고 수준이어서 그런지 디테일이 빠져있어, 조금 논문이 어렵게 느껴지지만 그럼에도 불구하고 아이디어가 좋다는게 느껴진다.  monoculde video로 부터 animatable head를 복원해내는 논문인데, 위 사진에서도 볼 수 있다시피 주름까지 잡아내는 정확도를 자랑한다. 더 대단한 건 딥러닝 한 방울도 들어가지 않은 최적화로 푼 논문이라는 점. 핵심 아이디어는 coarse-medium-fine 3 layer를 이용한 3..

Paper/Human 2024.07.10

Open3D OBJ texture 안 보일 때, enable_post_processing=True로 해결 안 될 때, texture가 검정색으로 뜰 때 확인 사항

Open3d 에서 OBJ를 확인할 때 가장 번거로운 문제가 texture가 제멋대로 처리될 때다. 대표적으로 아래 그림처럼 texture가 있음에도 검정색으로 뜬다거나, 회색으로 뜨는 상황이 있다.   검색해보면 o3d.io.read_triangle_mesh(..., enable_post_processing=True)로 설정하면 해결된다고 하는데, 이렇게 해결되지 않는게 진짜 머리 터진다. 원인이야 많이 있겠지만, 내 경험 상 이런 경우 문제는 크게 4가지로 나뉘는 것 같다. 매번 까먹고 다시 구르는게 억울해서 메모 해둔다.  *enable_post_processing=True 무지성으로 쓰지 말자.홈페이지 보면 위와 같은 작업을 수행한다고 하는데, 저 첫 줄의 triangulate meshes with..

Trouble/Vision 2024.07.09