4. 3D Computer Vision
3D Computer Vision
2D Computer Vision의 표현 방법은 하나밖에 존재하지 않았다.
하지만, 3D Computer Vision의 표현 방법은 매우 다양하다.
따라서 이를 먼저 알아보고 각 표현 방법들을 다루는 방법들을 알아보자.
1. BackGround
1) Coordinate
좌표계
월드 좌표계 카메라 좌표계 픽셀 좌표계 물체의 위치를 표현할 때
기준으로 삼는 좌표계
(임의로 설정 가능)1. 카메라의 초점을 원점으로한 좌표계
2. 방향
ⅰ. 원점: 카메라의 초점
ⅱ. x축: 카메라의 오른쪽
ⅲ. y축: 카메라의 아래쪽
ⅳ. z축: 카메라의 정면1. 투영된 이미지의 좌표계
2. 방향
ⅰ. 원점: 이미지의 왼쪽 상단
ⅱ. x축: 카메라의 오른쪽
ⅱ. y축: 카메라의 아래쪽※ 정규 좌표계: 카메라 내부 파라미터의 영향이 없을 경우 투영되는 공간에 대한 좌표계
파라미터
외부 파라미터 행렬 내부 파라미터 행렬 변환 월드좌표계 $\rightarrow$ 카메라 좌표계 카메라 좌표 $\rightarrow$ 카메라 영상의 픽셀값
(카메라 내부의 기계적인 셋팅)요소 1. 회전이동
2. 평행이동1. 초점거리: 렌즈의 중심과 CCD/CMOS와의 거리
2. 주점: 렌즈의 중심에서 이미지 센서에 수직으로
$\qquad \quad$ 내린 점의 영상픽셀좌표
3. 비대칭 계수: 이미지 센서의 y축이 기울어진 정도
4. 렌즈왜곡
5. 영상의 중심값
6. 이미지 센서의 Aspect Ratio
7. 이미지센서의 Skew Factor(렌즈왜곡 모델: 방사형 렌즈왜곡, 접선형 렌즈왜곡)
2) Representation
2. Depth Estimation
1) Stereo Matching
2) Monocular Depth Estimation
방법 | 문제점 |
---|---|
![]() | ![]() |
Segmentation모델과 비슷하게 Pixel별로 Depth를 Regression하면 된다. (ex. UNet) | Scale/Depth Ambiguity 작고 가까운 물체와 크고 멀리있는 물체를 구분할 수 없다. 때문에 하나의 이미지로는 Relative Depth만 구할 수 있다. |
Paper1: DPT
Vision Transformers for Dense Prediction이라는 논문에서는 다음과 같은 방법을 제안한다.
이 Architecture는 Detection의 FPN과 비슷하게 동작하게 된다.
Paper2: Depth Anything
3. Point Cloud
1) Classification
Paper1: PointNet
2) 3D Reconstruction
Paper1: Point Set Generation Network(PSGN)
이때, 생성된 Point Cloud는 순서가 존재하지 않는 “집합”이므로 집합간의 차이를 비교할 수 있는 새로운 방식의 Loss가 필요하다.
Chamfer Distance
\[d_{CD}(S1, S2) = \sum \limits_{x \in S_1} \min \limits_{y \in S_2} \Vert x-y \Vert_2^2 + \sum \limits_{y \in S_2} \min \limits_{y \in S_1} \Vert x-y \Vert_2^2\]
4. Predicting Meshes
1) 3D Reconstruction
Paper1: Pixel2Mesh
\[\Updownarrow\]\[\Updownarrow\]Loss Function
이제 Predict한 Mesh와 Ground Truth Mesh를 비교하는데에는 한가지 문제점이 발생한다. 같은 Shape에 대해 여러가지 표현 방법이 존재하기 때문이다.
하지만 이 방법에는 다음과 같은 문제가 존재한다.
- Train시에 Online으로 Sampling해야 하므로 이를 효율적으로 할 방법이 필요하다.
- Sampling을 통한 Backpropagation이 필요하다
Paper2: Mesh R-CNN
5. Implicit Representation
위에서 살펴보았던 모든 방식은 3D Shape를 Point들로 예측하는 방식, 즉, Explicit Representation이었다.
이 방식은 Memory도 많이 사용할 뿐 아니라 Discrete하다는 단점이 있다.
여기서는 3D Shape를 함수로 표현하는 방식인 Implicit Representation을 알아볼 예정이다.
함수로 예측하기 위해서는 어떤 좌표값을 Input으로 넣었을 때 그 좌표에 Object의 Inside인지 Outside인지에 대한 확률을 Output으로 출력하면 된다.
1) Nerf
Nerf는 Camera Parameter를 알고 있을 때, 같은 장면에 대한 여러 이미지를 통해 새로운 각도에서의 ViewPoint를 찾아내는 문제를 다루고 있다.
Volume Rendering
위의 Radience Field를 하나의 함수로 모델링하는 것을 Volume Rendering이라고한다.
direction이 $r(t) = \mathbf{o} + t\mathbf{d}$라고 할 때 Volume과 Color는 다음과 같이 표현된다.
\[\Downarrow\]
- Volume Density
- 점 $p$에서의 밀도, 이 점이 얼마나 불투명한지 나타내는 값
$\Rightarrow \sigma(\mathbf{P}) \in [0, 1]$
- Color
- 점 p에서 방향 d로 방출되는 색상
$\Rightarrow c(\mathbf{p}, \mathbf{d}) \in [0, 1]^3$Volume Rendering Equation
\[C(\mathbf{r}) = \int_{t_n}^{t_f} T(t) \sigma(\mathbf{r}(t))c(\mathbf{r}(t), \mathbf{d}) dt \approx \sum \limits_{i=1}^N T_i(1 - e^{-\sigma_i \delta_i})\mathbf{c}_i \\ T(t) = e^{-\int_{t_n}^t \sigma(\mathbf{r}(s)) ds} \approx e^{-\sum \limits_{j=1}^{i-1} \sigma_j \delta_j}\]
- $T(t)$: Transmittance, 현재 Point에서 출발한 빛이 Camera에 얼마나 도달하는지
- $\sigma(\mathbf{r}(t))$: Opacity, 현재 Point의 불투명도
- $c(\mathbf{r}(t), \mathbf{d})$: Color, 현재 Point에서 Camera에 무슨색의 빛을 방출하는지
우리는 이 식을 Sampling을 위해 Approximate하여 사용한다.
이제 Sensor의 r방향에서의 Pixel값 $C(\mathbf{r})$에 대한 모델링을 하였으니 이를 활용하여 Deep Neural Network를 학습하면 된다.
(Input= $p,d \quad \Rightarrow \quad$ Output $\sigma(\mathbf{r}), c(\mathbf{p}, \mathbf{d})$)Architecture