Knowhow/Vision 44

Tensorboard를 이용한 pb 파일 시각화

종종 사전 학습된 딥러닝 모델을 불러와서 사용할 때 ckpt, pb, pth, pbtxt 등 다양한 확장자명을 볼 수 있는데 이중 .pb 확장자를 갖는 모델에 대한 글이다. .pb 파일이란? pb는 protocol buffer를 줄인 말로 protobuf라고도 부른다. 깊게 알 필요없이 pb는 데이터를 serialize하는 방식 중 하나인데 간단히 binary로 바꿔서 통신에 유리하도록 하는 방법이라고 보면 되겠다. 하나 기억해야 될 것은 serialize한 데이터의 구조도 같이 저장한다는 것이다. 위키피디아의 말을 빌리면 다음과 같이 설명하고 있다. Protocol Buffers (Protobuf) is a method of serializing structured data. It is useful i..

Knowhow/Vision 2023.02.03

Basalt 사용, tag 규격 정하기, 이미지로부터 rosbag 파일 만들기

2022.12.07 - [Knowhow] - Fisheye camera model(KB, UCM, DS 모델) Fisheye camera model(KB, UCM, DS 모델) Introduction fisheye 카메라는 일반적으로 광각을 넘어서 180도 이상을 촬영하는 경우까지 포함하기 때문에 직관적으로 이해하기가 어렵다. 이미지 sensor는 앞을 보고 있는 평면이기 때문에 물리적으 jseobyun.tistory.com 위 글에서 소개한 3가지 모델을 적용하여 직접 광각 카메라의 캘리브레이션을 수행하고자 할 때 Basalt-mirror 라는 소프트웨어를 사용하면 손 쉽게 할 수 있다. 이전 글의 말미에서 DS 모델을 적용하고자 할 때만 추천을 했지만 코드를 뜯어보니 camera_type을 "kb4"..

Knowhow/Vision 2023.01.19

Theseus tutorial : simple pose estimation

NeuraIPS2022, facebookresearch에서 Theseus 라는 이름으로 differentiable non-linear optimization library를 공개했다. 프로젝트 페이지의 링크는 다음과 같다. https://sites.google.com/view/theseus-ai/ Theseus Theseus is an efficient application-agnostic library for building custom nonlinear optimization layers in PyTorch to support constructing various problems in robotics and vision as end-to-end differentiable architectures. S..

Knowhow/Vision 2022.11.24

COLMAP[CLI] SfM/MVS with known camera parameters and poses

2022.07.07 - [Knowhow] - COLMAP[GUI] multi-camera setting 글에서 간접적으로 알 수 있듯이, COLMAP을 사용할 때 미리 알고 있는 카메라 파라미터가 있을 때, SfM 및 MVS의 최적화 과정에서 해당 파라미터를 제외할 수 있다. 앞선 글이 카메라 intrinsic parameter를 알고 있을 때 어떻게 반영하는지 포함했다면, 이 글에서는 카메라 intrinsic parameter와 더불어 카메라 자세까지 주어졌을 때 이를 어떻게 반영하는지 정리하고자 한다. 하나 참고할 점은, GUI를 사용하지 않고 CLI로 사용하는 방법을 정리한다. 왜냐하면, 카메라 파라미터 중 intrinsic parameters를 알고 있는 경우, 카메라는 보통 수 대에 그치기 때문..

Knowhow/Vision 2022.07.14

COLMAP write txt files in python

기존에 갖고 있던 데이터를 COLMAP format에 맞추어 변형하는 코드를 정리하고자 한다. COLMAP을 사용하고자 하는 경우가 보통 SfM, MVS를 통해 3D point를 얻어내기 위함이기 때문에 points3D.txt에 대한 코드는 정리하지 않았다. (이미 points3D.txt가 있는 경우에는 COLMAP을 사용하지 않을테니...) images.txt와 cameras.txt 형태로 데이터를 정리하는 코드만 정리하고자 한다. 1. images.txt : pose notation은 https://jseobyun.tistory.com/31 참고 하나 유념할 것은, 일반적으로 quaternion을 사용할 때, x,y,z,w 표기를 사용하는데 colmap은 w,x,y,z 표기를 사용한다. ''' giv..

Knowhow/Vision 2022.07.13

COLMAP read bin/txt/ db files in python

COLMAP을 사용하고 나면 나오는 결과 파일은 총 ( images, cameras, points3D ) 3개다. bin 파일이나 txt 파일로 저장되도록 설정이 되어있는데, 이를 주로 사용하는 python으로 가져오기가 매번 heuristic하기엔 번거로워 read function을 작성했다. 아래 함수를 통해서, colmap의 결과값을 각 요소 별로 list 형태로 얻을 수 있다. 이후에 원하는 형태로 사용하면 된다. 먼저 bin 파일을 갖고 있을 경우, txt 파일로 변환하는 것으로 시작한다. colmap model_converter --input_path /path/to/dir-of-bins/ --output_path /path/to/dir-of-txts/ --output_type TXT 1. c..

Knowhow/Vision 2022.07.13

COLMAP[GUI] multi-camera setting

COLMAP은 워낙 유명해서 3D vision한다고 하면 한 번쯤은 들어봤을 것이다. 링크(https://colmap.github.io/index.html) 에서 소개하는 바와 같이 SfM과 MVS를 손쉽게 돌릴 수 있도록 도와주는 tool 혹은 코드라고 생각하면 된다. 설치가 복잡했으나, 최근에는 그냥 sudo apt install colmap 명령어 한 번으로 설치할 수 있고 튜토리얼 또한 잘 정리되어 있어서 사용성도 매우 뛰어난 장점이 있다. (단, 이렇게 깔면 CUDA를 사용하는 기능에서는 제한적임) 이 글에서는 튜토리얼에서 나오지 않지만, 꽤나 자주 벌어지는 상황이어서 매번 찾기 귀찮은 multi-camera setting에서의 colmap 사용법을 정리하고자 한다. 튜토리얼은 single-vi..

Knowhow/Vision 2022.07.07

Open3d RGB/Depth image rendering

3D 데이터의 시각화를 위해서든 3D데이터의 2D 데이터화를 위해서든 공간에 임의의 위치에 카메라를 두고 렌더링을 해야할 때가 있는데, 다른 툴을 쓰자니 진입 장벽이 높고 라이센스 문제도 있어 애를 먹다가 open3d로 간단히 할 수 있는 방법을 찾아 정리한다. 3D graphics 툴 대비 퀄리티나 자유도 측면에서 아쉬운 점은 분명히 있겠지만, 그 정도의 수준을 요구하지 않는다면 충분한 방법같다. open3d.visualization.Visualizer()를 이용하는 방법인데 글로 설명하는 것보다 코드로 설명하는 것이 이해도 쉽고 혹 사용하고자 하는 사람에게도 편할 것 같아 하나의 class로 작성한 코드는 다음과 같다. class Renderer(): def __init__(self, obj, ..

Knowhow/Vision 2022.07.01

Obj file의 manifold/non-manifold 구분

mesh 데이터를 이용한 무언가를 진행할 때, 보통 mesh가 manifold한지, 아닌지 구분하는 작업이 필요하고 non-manifold mesh라면 해당 vertex와 face를 제거하든지 해서 전처리를 한 뒤에 사용하게 된다. 특히, 캐드에서나 3D graphic tool에서 non-manifold mesh를 그대로 사용한다면, 냅다 오류가 나거나 구멍이 뚫려있는 mesh를 볼 수 있다. 그래서 가장 대표적으로 mesh를 저장하는 데이터 포맷인 obj file에 대해서 mesh가 manifold한지 판단하는 방법 및 코드를 정리해보고자 한다. Manifold 먼저, 지금까지 내가 공부하고 그리고 직관적으로 해석한 바로 manifold mesh가 뭔지 정리해보자면, mesh의 모든 edge를 2개 이..

Knowhow/Vision 2022.06.30

3D mesh voxelization

3D mesh가 차지하고 있는 voxel 공간, 즉, occupancy volume을 구하기 위해 mesh를 voxel화 하는 작업이 필요할 때가 있다. vertex와 face로 구성된 mesh로부터 voxel을 얻어내는 것이 간단해보이지만 막상 구현해보면 꽤나 복잡하고 동작 시간도 오래 걸린다. 이 작업을 아주 간단하게, 그리고 아주 빠르진 않지만 직접 구현하는 것보단 빠르게 해결할 수 있는 방법이 있다. binvox라는 프로그램을 사용하는 것인데, 아래 링크에 접속해서 executable 파일을 OS 맞게 받은 후 실행시키면 된다. https://www.patrickmin.com/binvox/ 한 개인이 박사 과정 중에 구현해서 공유한 것인데, 유용하게 사용할 수준이다. 단, 모든 axis dimen..

Knowhow/Vision 2022.06.17