Knowhow/Python, Pytorch 5

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..

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다.  위 링크를 따라가 설치 가이드라인을 따라 해보면 웬만해서 한 번에 ..

python에서 yaml 다루기, PyYAML vs ruamel.yaml

python에서 yaml을 쓰거나 읽을 때 일반적으로 PyYAML을 사용한다. 검색하면 제일 먼저 나오고 import도 직관적이어서 애용한다. 그리고 웬만한 경우에는 PyYAML로 다 해결되기 때문에 효과적이기도 하다. pip install PyYAML ### import yaml PyYAML을 쓰다가 가끔 오류가 나는 경우가 있는데 바로 yaml 최상단에 버전(+ 주석)이 명시된 경우다. camodocal 같은 과거 c++ 기반 툴들을 쓰다보면 이렇게 저장되는 yaml 파일을 볼 수 있는데 이 파일들은 PyYAML로 못 연다. (버전 1.0 이전 같다.) 예를 들어, 다음과 같이 yaml 파일이 바로 contents로 시작하지 않고 버전이 명시돼있거나 주석이나 splitter 같은 표기가 들어가있을 경..

중복 파일 검사 후 삭제/이동/복사

데이터 처리를 하다가 수작업으로 몇몇 파일들을 걸러내면 다른 폴더에서도 대응되는 파일들을 걸러내는 것이 너무 귀찮았다. 가령 multi-camera로 이미지를 취득한 뒤에, 1번 카메라를 기준으로 이미지를 선별하고 나면 나머지 카메라 이미지들도 이에 맞추어 선별해주어야 하는데 매번 파일 이름을 기억했다가 지워주는게 번거로웠다. 이런 식의 편집은 매번 코드를 짜서 해결했었는데 꽤 빈번하게 일어나는 것 같아서 파일 이름으로 비교하는 코드를 작성해서 저장해두고자 한다. def compare_files(ref_dir, src_dir): ref_names = sorted(os.listdir(ref_dir)) src_names = sorted(os.listdir(src_dir)) ref_extension = ref..