CAM-Convs: Camera-Aware Multi-Scale Convolutions for Single-View Depth
Problem
기존의 depth prediction 연구들은 카메라 파라미터에 일반화되어있지 않고 데이터셋에서 사용하는 파라미터에 오버핏 되어있다.
Essence
카메라의 학습 시 CAM-Convs (Camera-Aare Multi-scale Convolutions) 레이어를 이용하였다. 이는 convolution 과정에서 camera intrinsic parameter에 대한 정보를 붙여 네트워크가 depth 값이 파라미터에 종속적인 정보를 학습할 수 있도록 한다.
Detail
CAM-Convs를 이용하는 전체 네트워크는 흔히 알려진 encoder-decoder 구조를 이용한다. Encoder, decoder의 CAM-Conv 레이어에서 camera intrinsic 정보를 추가한다. 또한 각 scale level에서 skip-connection 또한 사용한다.
CAM-Convs는 coordinate map과 field-of-view map을 미리 계산하여 convolution의 입력이 되는 feature에 추가하는 방법을 사용한다. 추가되는 정보는 아래 3가지 정보이다.
Centered Coordinates: principal point에 대한 정보이다. 두개의 채널로 구성되는데, 현재 좌표 값에서 principal point에 대한 값을 뺀 값 i - c_x
,j - c_y
)을 가진다. 처음 이미지 크기에 계산된 map을 feature 크기에 따라 bilinear interpolation을 하여 사용하였다.
Field of View Maps: 앞서 계산된 cc map으로부터 focal length 정보를 만든다.
fov_{cc}[i, j] = \arctan ( \frac{cc_{ch}[i, j]}{f}), ch \in {x, y}
Normalized Coordinates: 이미지 좌표를[-1, 1]
로 변환한 정보이다. 이것은 카메라 센서와는 상관이 없지만, 이미지 내에서 spatial context를 학습하는데 도움이 된다.
Focal Length Normalization
Focal length가 다른 두개의 카메라에서는 같은 depth 위치에 동일한 물체가 있더라도 다른 크기로 나타날 것이다. 이러한 불일치를 피하기 위해서 depth를 focal length에 대해 normalization을 하였다. 실제 depth 값d
에 대해서 normalized depth는\frac{f_n}{f}d
로 계산한다. 여기서f
는 실제 focal length이고,f_n
은 default focal length이다. 네트워크는 inverse normalized depth 값\hat{\xi} = \frac{f}{f_n d}
을 prediction 하도록 학습하였기 때문에, 원래의 raw inverse depth\xi = \frac{1}{d}
는 다음과 같이 계산된다.
\xi = \frac{f_n}{f} \hat{\xi}
Losses
사용된 loss는 일반적인 depth loss, scale-invariant gradient loss, confidence loss, normal loss를 이용하였다.