Depth Estimation을 하고싶은데 GT가 없어요
몇가지 생각해볼수 있다.
1. 뭔가 GT처럼 활용할 수 있는걸 고전 알고리즘으로 뽑고, supervised learning 알고리즘을 활용해 학습
2. 그냥 self/unsupervised learning 할게요
3. transfer learning?
이전 포스팅의 Mono-depth-and-Motion이 유사한 상황이다.
- Hamlyn Dataset을 사용
- 그런데 GT depth가 없는 데이터셋
- 그래서 저자는 GT depth를 Libelas Tool을 사용하여 생성했음! (학습은 self-supervised로 하고 GT는 정량적 평가용도로만 썼지만)
그런데 Libelas 툴은 C++ 기반인가 그래서 우리 신세대 파이썬 인간들이 쓰기 좀 어렵다.
하지만 역시 누군가가 파이썬 버전을 만들어놨다.
Libelas 특징?
- 이미지 grayscale로 변환해야함
- 이건 고전적인 스테레오 방식이라 학습 기반이 아닌 것 같음.
[삽질 1] 이건 실패했으니 스킵하면 됩니다
https://github.com/PieroV/PyElas
git clone 귀찮아서 pip으로 설치하려고 시도했는데 잘 안되었다.
https://lsjsj92.tistory.com/592 이 블로그에서 설명하는 규칙처럼 되어있어야 가능한데, 저기도 setup.py 있긴 하던데 뭐가 안맞나?
pip install git+https://github.com/PieroV/PyElas.git 하려는데 에러 발생
...
암튼 잘 안되길래 https://github.com/jlowenz/pyelas 이걸로 레포 바꿨더니 해결
[삽질 2]
https://github.com/jlowenz/pyelas
굿. 이건 빌드 된다.
이제 import 해서 써보자
import os
import cv2
import matplotlib.pyplot as plt
import numpy as np
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'pyelas', 'src'))
import elas
gastrec_path = "../kitti/input/2011_09_26/2011_09_26_drive_0001_sync"
ch_names = ["image_02", "image_03"]
fname = lambda x : "data/" + str(x).zfill(10) + ".png"
number = 50
# Images can be loaded with any library, as long as they can be accessed with buffer protocol
left_path = os.path.join(gastrec_path, ch_names[0], fname(number))
right_path = os.path.join(gastrec_path, ch_names[1], fname(number))
print(left_path)
print(right_path)
left = cv2.imread(left_path)
right = cv2.imread(right_path)
print(left.shape)
left_rgb = cv2.cvtColor(left,cv2.COLOR_BGR2RGB)
right_rgb = cv2.cvtColor(right,cv2.COLOR_BGR2RGB)
f, axarr = plt.subplots(2,2)
f.set_size_inches(30, 10)
axarr[0,0].imshow(left_rgb)
axarr[0,1].imshow(right_rgb)
###################
left = cv2.cvtColor(left, cv2.COLOR_BGR2GRAY)
right = cv2.cvtColor(right, cv2.COLOR_BGR2GRAY)
disp_left = np.empty_like(left, dtype=np.float32)
disp_right = np.empty_like(right, dtype=np.float32)
params = elas.Elas_parameters()
params.postprocess_only_left = False
elas = elas.Elas(params)
elas.process_stereo(left, right, disp_left, disp_right)
scaled_depth_left = (disp_left / np.amax(disp_left) * 255.0).astype(np.uint8)
axarr[1,0].imshow(disp_left)
axarr[1,1].imshow(disp_right)
plt.savefig("my_tools/kitti.png")
grayscale인데다 딥러닝도 아닐테니까 안좋을줄 알았는데 생각보단 괜찮은 듯
그래서 Mono-depth-and-motion에서 이걸 가지고 GT를 만들었나봄.
'AIML 분야 > Depth, Camera Pose, VO, SLAM 등' 카테고리의 다른 글
[연구일지] 2022.08.10 Monocular Depth Estimation 기록 (0) | 2022.08.10 |
---|---|
[Monocular Depth Estimation] mono toolbox 코드 뜯는 기록 (0) | 2022.08.05 |
[Monocular Depth Estimation] Mono depth Toolbox 사용: AdaBins 돌려보기 (0) | 2022.07.19 |
[Monocular Depth Estimation] AdaBins, BinsFormer, 그리고 KITTI Depth Dataset 셋업 (0) | 2022.07.18 |
depth estimation task 조사 + BinsFormer 대충 보기 (0) | 2022.07.18 |
댓글