Knowhow 85

[TensorRT 튜토리얼] 2. Docker container

이전 글 [TensorRT 튜토리얼] 1. Installing TensorRT 에서 docker container를 이용하는 방식은 설치와는 사실 무관하니 생략했지만, 실제로 사용할 때는 무조건 docker를 쓰게 될 것이므로 따로 정리했다. TensorRT container에는 TensorRT를 이용한 build, modify, execute 모두가 가능하도록 세팅이 되어있다. 더불어 NVIDIA deep learning sofward library가 추가되면 매달 업데이트 되는 새로운 container에 같이 설치되어 있다. (monthly update이므로 관리가 잘되어 좋다.) NVIDIA docker document 를 확인해보면 가장 최신 release container 정보를 확인할 수 있고..

Knowhow/TensorRT 2024.01.19

[TensorRT 튜토리얼] 1-2. cuDNN installation

Note 현재(2024.01.12)까지 나온 TensorRT 8.6.1까지 지원되는 cuDNN은 8.9.0만 있나 보다. 버전 선택지 없이 무조건 이걸로 깔아야 되는 듯 하다. Document https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html Installation Guide - NVIDIA Docs docs.nvidia.com 바로 가기 오류가 날 때가 있는데 url이 index.html로 끝나지 않는다면 index.html 이후는 삭제하면 잘 연결된다. Installation cuDNN 역시 NVIDIA developer progam 등록되어있어야 다운로드 가능하다. 간단히 이메일 인증만 거치면 된다. 최신 cuDNN부터 다운로드..

Knowhow/TensorRT 2024.01.19

[TensorRT 튜토리얼] 1-1. CUDA installation

CUDA는 꼭 TensorRT가 아니더라도, pytorch를 비롯한 딥러닝 프레임워크를 쓸 때 자주 깔고 지우는 일이 있기 때문에 설치에 익숙해져 있으면 좋다. Check pre-installed CUDA 먼저 CUDA를 가상환경이나 docker에 새로 설치하는 것이 아닌 경우, 이미 설치된 CUDA가 있거나 설치 파일/설정이 남아있는지 확인하는 것이 좋다. 이후에 설치할 TensorRT, pytorch 모두 CUDA 버전에 dependent하므로 정확하게 설치하기 위함이다. 설치했었는지 조차 잘 모르겠으면 다음 커맨드를 쳐보자. sudo apt-key list pub rsa4096 2017-09-28 [SCE] C95B 321B 61E8 8C18 09C4 F759 DDCA E044 F796 ECB0 u..

Knowhow/TensorRT 2024.01.19

Disk usage analyzer

ubuntu는 디스크 사용량이 100% 꽉 차면 부팅이 안되거나 무한 부팅 문제에 걸리는 OS인 만큼 용량 관리를 종종 해주어야 한다. 기본적으로 ubuntu에는 disk usage analyzer라는 프로그램이 설치되어 있는데 이를 이용하면 어떤 파일이 용량을 많이 먹고 있는지 확인하기가 용이하고 바로 삭제할 수도 있어서 좋다. 실제로 사용 중인 파일들이 용량을 주로 차지하는 경우도 있지만 간혹 .cache 폴더가 100~200GB 씩 잡아먹고 있을 때가 있다. 특히 그런 경우 .cache/JetBrains 나 .cache/pip 등 수십 GB를 먹는 일이 잦다. 내 경험 상 Pycharm을 사용할 때 이미 열려있는 폴더를 또 열려고 시도할 때 pycharm이 먹통이 되어버리는 버그가 있는데, 이 때마..

Knowhow/Linux 2024.01.19

[TensorRT 튜토리얼] 1. Installing TensorRT

끄적끄적 딥러닝 모델을 써보거나 개발하는 일은 주로 하다보니 자연스레 실제 사용할 수 있는 형태로 가공하는 것까지 이야기가 나왔고, 결국 경량화하는 영역에 닿게 됐다. 경량화라는 이름 범주 안에 knowledge distillation부터 pruning, quantization, architecture search 등 많은 이론적 내용들이 있는데 그것들을 커버하는 것과 별개로, 어떻게 갖고 있는 하드웨어에서 빠르게 동작하도록 만들 것인지도 고려해야 했다. 그래서 가장 유명하고 document가 잘되어 있는 TensorRT를 A to Z 따라가면서 감을 한 번 잡아보고자 한다. 나는 컴퓨터 공학과 출신도 아니고 이런 low level(?) 내용을 다루어본 적이 없어서 사실 자신 없는데 구르면서 한 번 배워..

Knowhow/TensorRT 2024.01.17

COLMAP[python] pycolmap 보다 편하게 colmap 사용하기

각종 논문에서 camera pose를 얻는 기본 방법으로 웬만하면 SfM을 사용하는데 그 때마다 SfM == COLMAP으로 생각하는게 당연할 만큼 COLMAP은 자주 접하게 되는 툴이다.  하지만 COLMAP은 기본적으로 c/c++ 기반으로 되어있어서 python 위주로 코딩할 때 사용성이 그렇게 좋은 편은 아니고 독자적인 포맷도 맞춰줘야 하기 때문에 뚝딱 쓰기엔 조금 시간이 걸린다. 더불어 SIFT 이하 feature 만을 사용하는 COLMAP이기 때문에 더 좋은 deep feature가 있어도 이를 COLMAP에 내장시켜 사용하는 것은 더 오래 걸린다. pycolmap이 있어서 python binding된 형태로 사용할 수 있지만, pycolmap 역시 deep feature를 기반으로 동작하도록 ..

Knowhow/Vision 2023.12.07

RealityCapture camera coordinate to opencv(vision) camera coordinate

RealityCapture 라고 유명한 photogrammetry 툴이 있다. 연구하는 입장에서는 colmap보다 훨씬 좋은 성능과 속도로 SfM을 돌려주는 툴이라고도 볼 수 있는데 graphics쪽 좌표계와 각종 설정이 섞여있어 좌표계가 자주 쓰는 좌표계와 완전히 다르게 되어 있다. 결과적으로 RealityCapture에서 뱉어주는 카메라를 별도의 후처리 없이 그대로 사용하게 되면 카메라가 지멋대로 돌아가있다.  온갖 검색을 해봐도 정확히 이해될 만한 좌표계 설명이 없고, 일반적으로 쓰는 roll, pitch, yaw 가 각각 x축, y축, z축 회전에 대응되는 것이 아니라 또 새로 정의한 순서이기 때문에 변환하는 일이 만만치 않았다. 결국 나도 온갖 자유도의 transformation과 roll, p..

Knowhow/Vision 2023.12.06

Open3d를 이용한 디버깅용 camera, bbox, origin visualization

데이터를 다루다 보면 주어진 3D point와 camera pose가 좌표계가 잘 맞춰져 있는지, coordinate origin을 어디인지, 방향은 맞는지 확인하는 것이 생각보다 귀찮고 까다롭다. 수십, 수백개나 되는 xyz 값이나 se3 값을 봐서는 알 방법이 없기 때문에 보통 시각화해서 보는데, colmap 외 사용 가능한 툴들도 제한적이고 매번 포맷을 맞추는 것도 귀찮다. 나 같은 경우, 간단히 open3d를 이용해 시각화하는 식으로 해결해왔는데 매번 반복적으로 코드를 구현하는 것이 귀찮아서 여기에 내가 주로 사용하는 디버깅용 코드를 기록해두려고 한다. Helper function들 def Rt2T(R, t): T = np.eye(4) T[:3, :3] = R T[:3, -1] = t.reshap..

Knowhow/Vision 2023.12.06

Sphere 상에서 normal vector uniform sampling

sphere상에서 normal vector를 뽑는 방법이 가장 간단하게는 위, 경도 상에서 uniform sampling해서 환산하는 방법일 것이다. 하지만 이 방법은 생각해보면 Equi-rectangular projection된 이미지 상에서 뽑아내는 것과 같은 효과이기 때문에 3D 공간 측면에서 생각해보면 극점 (north pole, south pole)에서 뽑히는 샘플이 많고 적도(equator)에서 뽑히느 샘플은 적으므로 충분히 고르다고 할 수 없다. 그러면 3D 공간 상에서 고르게 normal vector를 뽑으려면 어떻게 해야하는가? 머리를 굴려보면 대충 계산할 순 있겠다만 간단한 방식이 있다. sphere에서 고르게 normal vector를 뽑아내는 수식은 정의된 바가 있다. patchma..

Knowhow/Vision 2023.11.07

STL vector 팁들

.reserve() vs .resize() 이 두 개를 검색해보면 둘 다 vector의 크기를 사전에 할당해두는 함수들이라고 나오고 혼동하기 쉬운데, 전자는 초기값이 없고 후자는 있다는 차이 이상의 내용이 있다. 먼저 .reserve(A) 를 사용하면 A만큼의 메모리 공간을 해당 vector에 부여하고 잡아두는 것이 맞다. 하지만 메모리가 먼저 잡혀있는 것이지 실제 vector 사이즈가 A로 만들어지는 것이 아니다. 따라서 indexing이 안된다. 따라서 .reserve()를 사용하는 경우는, push_back으로 vector에 계속 넣어줄 것인데 이 과정에서 사이즈를 명시하지 않으면 내부적으로 확장하고 복사하고 확장하고 복사하고 하면서 시간 잡아먹으니 이 시간 효율을 높이고 싶을 때 쓴다. 반대로 ...