[논문리뷰] Global-Local Path Networks for Monocular Depth Estimationwith Vertical CutDepth(GLPDepth)
들어가며
이번에 소개할 논문은 Monocular depth estimation(MDE)의 연구인 GLPDepth입니다. 핵심 기술은 아래와 같습니다.
- 계층적인 Transformer 인코더: 이 모델의 인코더 구조는 Segformer와 동일합니다. 간략한 특징으로는 이미지 해상도를 계층적으로 줄여가며 Attention을 수행하기 때문에 다양한 scale의 features와 연산 속도에 이점이 있습니다.
- lightweight 디코더: lightweight 디코더를 설계하는 것도 Segformer와 비슷합니다. 하지만 이 논문에서는 Selective Feature Fusion(SFF) Module을 제시하며, 인코더에서 추출한 상대적으로 낮은 local features와, 디코더에서 상대적으로 큰 global features를 선택적으로 통합합니다. 말이 좀 어려웠는데 나중에 자세히 설명하겠습니다. 지금은 그냥 local features와 global features를 선택적으로 통합하는구나 정도로만 이해하면 되겠습니다.
- Data augmentation: MDE에서는 Data augmentation이 되게 모호합니다. 이전 연구 중 CutDepth라는 논문이 괜찮은 성능을 낸 것으로 보아 저자는 이 CutDepth를 약간 변형시켜서 모델에 적용하였습니다. 이따 자세히 설명하겠습니다. 진짜 별 거 없습니다.
본 논문에서 인코더에서 출력된 local features를 디코더의 glocal features로 전달하는 것을 global-local path 라고 합니다. 이제 이러한 local, global features를 SFF라는 융합 모듈을 사용하여 통합합니다. 이 모듈은 두 Features에 대한 서로 다른 attention map을 사용함으로써, 두드러진 영역에만 선택적으로 초점을 맞출 수 있게 도와준다고 합니다.
여기에 Data augmentation까지 새로 제안하여 추가적인 계산량 없이 성능을 증가시켰다고 합니다.
이제 세부적인 내용을 살펴보겠습니다.
Method
전반적인 구조는 아래와 같습니다.
계층적인 Transformer 인코더로 Multi-Level features를 global 의존성으로 학습하고, 이 추출된 Features를 디코더에 Skip conntection과 SFF 모듈로 인코더에서 추출된 표현들로 깊이맵을 복구합니다.
Encoder
인코더는 풍부한 정보를 추출하는데 초점을 둡니다. 그러기 위해 계층적인 Transformer 구조를 도입하고 동작하는 방식은 아래와 같습니다.
- 3*3 convolution 연산으로 이미지 패치들의 시퀀스를 임베딩한다.
- 이 이미지 패치들이 Self-Attention, Residual skip이 있는 MLP-Conv-MLP 레이어로 구성된 Transofrmer block으로 입력된다. 이전 Segformer의 논문에서 MLP-Conv-MLP 레이어를 Positional encoding 대신에 적용했더니 성능이 크게 증가하였습니다.
- Self-Attention 레이어에서 계산 비용을 줄이기 위해, 각 Attention head의 차원이 \( R_i \) 비율로 줄입니다(줄이는 방식은 링크의 Effcient Self-Attention 참고).
- 이 Block을 통과하고 나온 출력으로, Convolution을 겹치게 구성하여 patch merging을 수행한다. 이렇게 겹치게 Merging 함으로써 지역적인 연속성을 보장할 수 있었다고 하네요(자세한 내용은 링크의 Overlapped Patch Merging 참고 ).
이러한 과정들이 디코딩에서 활용될 Multi-scale features를 계층적인 구조를 가지는 Transformer 인코더에서 생성하는 것을 가능하게 하였고, 여기에서는 4개의 Transformer blocks을 사용하고, 각 block은 \( \frac {1} {4}, \frac {1} {8}, \frac {1} {16}, \frac {1} {32} \)의 해상도과 [\( C_1, C_2, C_3, C_4 \)]의 차원을 가집니다.
Lightweight Decoder
Transformer 인코더는 최종적으로 \( \frac {1} {32}H * \frac {1} {32} W * C_4 \)의 해상도를 가지는 bottleneck feature \( F^4_E \)를 출력합니다. 이 정보들이 압축된 bottleneck feature를 Depth map으로 복원하기 위해 가볍고 효과적인 디코더를 구성합니다. 이전 연구들은 디코더에서 Convolution과 Deconvolution을 적절하게 쌓아서 이미지를 회복하였는데, 본 논문에서는 인코더에서 Features에 대한 학습만 잘 이루어지면, 디코더에서는 아주 적은 Convolution과 Upsampling 레이어들로만으로도 더 나은 성능 효과를 볼 수 있다고 합니다.
- 먼저, bottleneck feature \( F^4_E \)의 채널은 너무 크기 때문에, 계산 복잡도를 줄이기 위해 1 * 1 Convolution를 이용하여 \( N_C \)로 줄임.
- 점진적으로 이미지의 크기를 \( H \) x \( W \) x \( N_C \)로 확장하기 위해서 모든 디코더 Block에서 bilinear upsampling을 사용
- 2개의 Convolution 레이어들과 sigmoid 함수를 사용하여 \( H \) x \( W \) x \( 1 \)의 깊이맵의 확률값을 예측.
- 최종적으로 최대 깊이 값을 위 깊이맵에 곱해주어 최종적인 깊이맵 값 추정
이러한 심플한 구조로 이전 연구들만큼 정밀한 깊이 맵을 생성할 수 있지만, 추가적으로 미세한 디테일을 가진 local 정보를 추출하기 위해, 제안된 fusion module과의 skip conntection을 도입합니다.
Selective Feature Fusion
본 논문에서는 각 Features에 대한 attention map을 획득하고, local feature와 global feature를 적응적으로 선택하고 통합하기 위한 Selective Feature Fusion(SFF) module을 제안합니다.
- 먼저 인코더의 출력 Features인 \( F_E \)를 디코디의 출력 Features인 \( F_D \)의 차원으로 맞춰주기 위해, Convolution 레이어의 연산으로 \( N_C \)의 차원으로 줄여줍니다.
- 그리고 이 Features 들은 채널을 기준으로 결합되고 2개의 Conv-BatchNorm-ReLU를 통과합니다.
결합(\( N_C + N_C = 2 * N_C \)) -> 1번째 Conv(\( 2 * N_C \) -> \( N_C \))-> 2번째 Conv(\(N_C\) -> \( 2 \)) - 최종적으로 Convolution 및 sigmoid 레이어는 2개의 채널 Attention map을 생성하고, 여기서 각 local 및 global feature가 채널과 곱하여 중요한 위치에 초점이 맞춰집니다.
- 이 곱해진 features들은 행렬합으로 global, local 정보가 통합된 hybrid feautre \( H_D \)를 구성합니다.
Local 연속성을 강화하기 위해, 1/4의 크기를 가지는 인코더 feature \( F^1_E \)가 디코더로 입력될 때는 차원을 줄이지 않았다고 합니다.
Vertical CutDepth
최근 input image에 gt depth map 어느 한 부분을 랜덤하게 crop 하여 결합하는 CutDepth라는 data augmentation이 제안되었습니다.
그러나 본 논문에서는 Depth estimation에서는 수직 위치가 주로 사용된다고 주장합니다. 그래서 Crop은 수직 방향은 고정하고, 수평 방향으로만 적용한다고 합니다.
기존 방법의 수식이며 \( \left( l, u \right) \)는 Crop될 기준점의 좌표(좌상단) \( \left( w, h \right) \)는 크롭 될 너비와 높이입니다.
위 식은 변화된 수식인데, 수직 좌표(\( u \))를 0으로 설정하고, 수직 길이(\(h\))도 기존 이미지의 길이 \(H \) 로 설정하였다. 여기서 \( \alpha, \beta \)는 0 ~ 1 사이의 값이고, W, H는 각각 이미지의 가로와 세로 길이이다. \( p \)는 하이퍼 파라미터인데 0.75로 설정하였습니다.
Experiments
data augmentation detail
본 논문의 data augmentation의 확률은 0.5로 설정하였습니다(horizontal flips, random brightness(\( \pm 0.2 \)), contrast(\( \pm 0.2 \)), gamma(\( \pm 20 \)), hue(\( \pm 20 \)), saturation(\( \pm 30 \)), value(\( \pm 20 \)). 앞서 말한 Vertical CutDepth의 \( p \)는 0.75로 설정하였는데, 이렇게 하면 Vertical CutDepth의 확률은 0.25입니다.
\( p \) 가 0.75일 때 가장 나은 성능을 보였습니다.
또한 이 모델은 기존 모델들보다 적은 파라미터로 나은 성능을 보였습니다. 아래의 모든 결과는 동일한 인코더로 디코더만 변경한 것입니다.
SFF 모듈 없이도 다른 모델들 보다 나은 성능을 보였으며, 이는 인코더가 풍부한 표현력을 가졌다는 것입니다.
MDE 논문인 GLPDepth를 한 번 리뷰해 보았습니다.
자세한 내용은 본 논문을 참고하시고, 언제나 게시글에 대한 피드백은 환영입니다.
긴 글 읽어주셔서 감사합니다.