Knowhow 105

SMPLX uv mapping/coordinate 사용 시 유의점

SMPLX 모델 사용한 연구들이 요새 UV domain도 많이 염두하기 때문에 각 vertex의 uv coordinate 정보도 다루기 시작한 것 같다. 근데 내가 직접 다뤄보니 생각보다 잡고생해야 될 숨은 오류들이 많은데, 미리 적어두려고 한다.  1. SMPLX_NEUTRAL.pkl / SMPLX_MALE.pkl  /SMPLX_FEMALE.pkl 모델 안에 있는 "vt" 사용 금지pkl 모델 자체를 열어보면 안에 vt라는 변수로 총 11313개 uv coordinate가 저장되어 있다. 먼저 왜 모델 vertex 개수인 10475랑 다르냐고 궁금할 수 있는데 3차원 모델을 2차원 uv map으로 쪼개는 과정에서 어쩔 수 없이 여러 번 mapping 해야 되는 경계 vertex들이 있기 때문이다. 예를..

Knowhow/Vision 2024.11.22

BFM 모델 vertex index / uv unwrap coordinates

Face template 모델 중에 FLAEM 다음으로 유명한게 BFM 모델인데 제작된 건 53490 vertex로 구성되어 있다. 하지만 3DDFA에서 inner mouth vertex를 제거해서 295개를 제거해서 53215개로 만들었고, Deep3DFaceReconstruction (Microsoft)에서는 목과 귀를 추가 제거해서 35709개로 만들었다.  후속 연구 각각에서 vertex 개수도 줄이고, UV unwrapped coordinates는 또 53215개 vertex에 대해서만 계산해뒀고 헷갈리는 점이 많아서 따로 정리했다.  Vertex index 위 파일은 초기 full BFM face vertex 53490개 중 inner mouth를 제거한 vertex 53215개로 축소하고 싶..

Knowhow/Vision 2024.11.19

argparse 사용 시 list를 argument로 넘겨주기

python 코딩할 때 무조건 쓰게 되는게 argparse인데 argument로 list를 전달해야 될 때 귀찮은 일이 많다. 예를 들어, 아래와 같이 쓰면 될 것이라고 쓰면 된다고 생각하는데parser = argparse.ArgumentParser()parser.add_argument("--something", type=list)args= parser.parse_args() 이렇게 하면 python run.py --something a b c 와 같이 썼을 때 오류 난다. 의도와 다르게 된다. 정석이 대신 아래와 같이 쓰는게 좋다.parser = argparse.ArgumentParser()parser.add_argument("--something", nargs="+")args= parser.parse..

Open3D Normal map rendering, Normal 이미지 얻는 방법

Open3D에서 주어진 mesh의 normal을 얻어내는 방법은 쉽다. Document에서도 이 기능만 설명한다.import open3d as o3dmesh = o3d.io.read_triangle_mesh(MESH_PATH)mesh.compute_vertex_normals() # vertex normals are filled inmesh.compute_triangle_normals() # face normals are filled in 그런데 normal map 즉 2D 형태로 얻는 방법은 명확히 없다. normal rendering을 하는 방법이 뚜렷하지 않다.  vis = o3d.visualization.Visualizer() vis.create_window(visible=True) opt =..

Knowhow/Vision 2024.11.05

Opencv camera index 찾기, device index 찾기

2022.06.13 - [Knowhow/Vision] - Opencv multi webcam 사용 시 인식 확인 Opencv multi webcam 사용 시 인식 확인opencv에서 라이브 웹캠을 2개 이상 사용하고자 할 때, 보통 아래와 같이 접근한다. import cv2 cam0 = cv2.VideoCapture(0) cam1 = cv2.VideoCapture(1) ... camN = cv2.VideoCapture(N) #N is a camera index 이 때, 분명 카메라 N대jseobyun.tistory.com 이전 글에서 cv2.VideoCapture()를 사용할 때 필요한 camera index를 어떻게 찾는지 정리한 바 있는데, 글 말미에서는 USB 포트를 바꿀 때마다 혹은 USB 포트가..

Knowhow/Vision 2024.10.29

pytorch3d.io.IO 느린 로딩 속도 개선 방법

pytorch3d.io.IO를 이용해 obj 파일을 읽어서 사용한다. from pytorhc3d.io import IOmesh = IO().load_mesh(MESH_PATH).cuda() # () essential 근데 이상하게도 pytorch3d 내장 함수로 파일을 읽으면 현저히 느리다. 약 10MB 정도 크기의 파일을 기준으로 했을 때 대략 trimesh 읽는 속도보다 2배 느리다.  내부적으로 뭘 더 읽는지는 모르겠으나, 대부분은 vertex, face, color 3개만 있으면 되기 때문에 굳이 필요없는 연산일 것 같다.  개선법 from pytorch3d.structures import Meshes from pytorch3d.renderer import TexturesVertex mesh =..

Pytorch3d CUDA 12 이상에서 설치하기

https://github.com/facebookresearch/pytorch3d/blob/main/INSTALL.md pytorch3d/INSTALL.md at main · facebookresearch/pytorch3dPyTorch3D is FAIR's library of reusable components for deep learning with 3D data - facebookresearch/pytorch3dgithub.comMesh를 데이터로 활용한 학습을 구현할 때 diferrentiable rasterizer를 제공하기 때문에 유용한 것을 분명하나, 인기가 없어서 인지 버전 맞추는 것이 상당히 까다로운 pytorch3d다.  위 링크를 따라가 설치 가이드라인을 따라 해보면 웬만해서 한 번에 ..

ubuntu .cache, /var/log에 쌓인 파일 삭제하기 (pip, conda, jetbrains, etc)

아침에 출근하니까 갑자기 디스크 용량 부족 경고가 떴다. 디스크 잔여 공간이 0이 돼버리면 부팅도 안되는 운영체제가 우분투이다 보니까 디스크 관리를 미리미리 해야하는데 게을러서 안했더니 그 직전까지 왔더라. 확인해보니 대부분 코드나 가상환경 파일이어서 지울건 딱히 없고, 눈에 띄는 건 .cache 안에 가득찬 쓰레기들과.... 가상환경에 설치하기 위해 받아둔 패키지들이 차지하는 쓰레기가 많더라. 함부로 지우기엔 무서우니 일일이 삭제 방법을 찾아봤는데 유용한 건 다음과 같다. pip, condapip cache purge conda clean -all 일단 이 두 개를 치면 최소 pip, conda에서 지금 사용되지 않는 것들은 싹 지워진다. JetBrains나 같은 경우 pycharm cache가 잔뜩 ..

Knowhow/Linux 2024.09.12

ubuntu 구글 드라이브 압축 없이 파일 올리기/다운받기

google drive로 공유된 파일들은 자동으로 다운받을 때 압축 과정을 거친다. 파일 사이즈가 클 때 시간이 오래 걸릴 뿐더러 압축이 실패하는 경우도 빈번하고, 더욱 짜증나는 부분은 제멋대로 분할 압축한다는 것이다.  사진 보관 정도의 사용자라면 별 문제 없겠지만 데이터 공유용으로 쓸 경우, 속도나 이름/구조 따위가 중요하기 때문에 구글 드라이브가 답답한 부분이 많다. 다행히도 위 언급한 자동압축/속도/분할압축 문제 중에 속도만 해결할 수 없고 압축 관련된 건 구글 드라이브를 직접 mount하는 방식으로 피할 수 있다. (매 파일 클릭해서 다운로드하는 수고를 덜어주는 것 만해도 감사하다.) 해결법https://99rdp.com/how-to-connect-google-drive-in-ubuntu/ Ho..

Knowhow/Linux 2024.09.10

Facescape 모델 68 keypoint/landmark index

https://facescape.nju.edu.cn/ FaceScape facescape.nju.edu.cn 위 데이터셋 중 TU model은 topology가 통일되어 있으므로 landmark에 해당하는 vertex index만 알면 모든 데이터의 landmark를 찾아낼 수 있다.  https://github.com/zhuhao-nju/facescape/tree/master/toolkit/predef facescape/toolkit/predef at master · zhuhao-nju/facescapeFaceScape (PAMI2023 & CVPR2020). Contribute to zhuhao-nju/facescape development by creating an account on GitHub...

Knowhow/Vision 2024.08.28