안녕하세요, 66번째 x-review 입니다. 이번 논문은 CVPR 2025년도에 게재된 depth completion을 depth enhancement 관점에서 해결한 논문 입니다.
그럼 바로 리뷰 시작하겠습니다 !

1. Introduction
depth completion의 근본적인 어려움은 입력 데이터가 sparse하다는 것인데요, 이에 대해서 저자는 “mismatch”와 “ambiguity”라는 키워드로 문제를 정의합니다. Fig.1을 보면 “mismatch”는 scene 전체에서 불규칙하게 샘플링된 sparse depth가 입력으로 들어오는 반면에 컨볼루션의 커널 shape은 고정되어 공간 불별하기 때문에 발생하게 됩니다. 또한 컨볼루션은 sparse depth에서 depth를 알 수 없는 픽셀의 값을 0으로 간주하기 때문에 실제로 유효한 값을 가진 depth와 그렇지 않은 depth 측정을 구분하는 것이 모호해지는 것을 “ambiguity”로 정의합니다.
이 두가지 문제를 해결하기 위해서 이전 연구에서는 sparsity에 불변한 CNN을 제안하거나, 입력 depth를 보간하거나 등의 방식을 제안하였지만 여전히 sparse depth에 컨볼루션을 적용하는 것을 완전히 피하지는 못했다고 합니다.
그래서 본 논문에서는 두 문제를 모두 해결하기 위해서 Selective Image Guided Network(SigNet)이라는 프레임워크를 제안합니다. Fig.1에서 보면, SigNet은 depth completion을 depth enhancement로 다시 정의를 하는데요, 먼저 CNN이 아닌, 그러니까 전통적인 영상 처리 기법을 이용해서 sparse depth를 dense하지만 coarse한 depth map으로 처리합니다. 이런 coarse depth는 GT에 비해 depth 퀄리티가 떨어지고 왜곡이 발생할 수 있는데, 이를 degradation이라고 합니다. 저자는 이 때의 degradation을 하나의 수학적인 함수 h와 노이즈 n으로 식(1)과 같이 정의하게 됩니다.

- Z : coarse depth map
- Y : GT
- h : degradation → Y과 Z로 바뀌면서 발생하는 왜곡 및 품질 저하 현상
- n : 노이즈
이런 degradation 모델링을 하는 이유는 단순히 coarse depth를 가지고 바로 CNN을 통해 예측을 하려고 하면 정보가 부족하기 때문에 그 대신에 Z가 Y에서 어떻게 degradatation 됐는지를 모델링하는 것이죠. 이를 통해 왜곡된 Z로부터 어떻게 하면 원래의 Y를 복원할 수 있을까를 학습할 수 있습니다. 이 degradation은 보통 이미지의 엣지 근처에서 발생하는데요, 그에 반해 RGB 이미지는 엣지와 같은 고주파 이미지 정보를 잘 가지고 있습니다. 그래서 저자는 엣지 주변에서 발생하는 degradation을 잘 활용하면 RGB 이미지 정보를 depth completion하는데 사용할 수 있을 거라고 생각했다고 합니다. 이를 위해 Degradation Aware Decomposition and Fusion(DADF) 모듈을 새로 설계하였습니다. 간단히 말하면 degradation 함수를 여러 패치로 나누어서 각 패치가 주파수 영역에서 어디에 위치하는지를 분석하는 것 입니다. 이 정보를 바탕으로 어디서 RGB 이미지의 고주파 정보가 중요한지를 결정하여 RGB 이미지에서 필요한 부분을 골라서 사용하자 하였다고 합니다.
여기서 본 논문의 main contribution을 정리하면 다음과 같습니다.
- 처음으로 depth completion을 enhancement로 새롭게 정의하는 프레임워크인 SigNet을 제안함으로써 “mismatch”와 “ambiguity” 문제를 해결
- depth 퀄리티 저하를 역으로 활용하여 RGB 데이터의 고주파 영역을 adaptive하게 사용하여 coarse depth를 보완할 수 있는 DDAF 모듈 제안
- 이전 SOTA 방법론과의 실험을 통해 프레임워크의 효과를 입증
2. Method

Fig.2를 보면 크게 depth, degradation, 그리고 이미지 브랜치로 구성되어 있습니다.
depth 브랜치에서는 CNN이 아닌 전통적인 이미지 처리 방식(ex. IP-Basic)으로 sparse depth S를 coarse depth Z를 만듭니다. 이 Z에는 노이즈 n이 포함되어 있기 때문에 denoising 연산자를 거쳐서 \hat{Z}를 만들게 됩니다. 그 다음 \hat{Z}에서 feature를 추출하기 위해 Residual group이라는 CNN 구조를 사용하였따고 합니다.
두번째 이미지 브랜치는 마찬가지로 Residual Group을 통해 이미지에 대한 feature를 추출합니다.
두번째 degradation 브랜치는 Z가 어떻게 GT depth Y에 비해 degradation 되었는지를 모델링합니다. CNN과 Residual Group을 사용해서 degradation 정보 D를 예측합니다. 이 D는 앞서 인트로에서 식(1)의 h 함수를 표현한 것이라고 합니다.
이제 depth feature \hat{Z}, 이미지 feature I, 그리고 degradation D를 융합하기 위해 DADF 모듈을 사용합니다.
2.1. Task Switching
기존의 degradation 학습은 low level의 이미지를 복원하는 작업에 쓰였는데요, 여기서 입력 이미지와 GT는 대부분 dense하고 입력이 GT보다 해상도가 낮다고 합니다. 그러나 depth completion은 입력이 sparse하고, 입력과 GT의 해상도가 같다는 차이가 있습니다. 이를 이미지 복원처럼 해보기 위해서 depth completion을 depth enhancement로 task를 전환해본 것이죠. 식(1)처럼 Z를 구하면 마치 흐린 이미지에서 선명한 이미지(Y)를 복원하는 것처럼 진행할 수 있게 됩니다.
수식적으로 살펴보면 식(2)는 Z를 생성하는 과정 입니다.

- f_{ds}(\cdot) : CNN이 아닌 이미지 처리 방식(IP-Basic)
이를 통해 sparse한 입력에서 dense하지만 coarse한 depth map을 얻는데, 이렇게 하면 직접적으로 sparse 데이터에 컨볼루션을 적용할 때 발생하는 “mismatch”와 “ambiguity”를 피할 수 있게 됩니다.
그러고 나서 식(1)의 degradation h는 진짜 함수가 아니라 어떻게 왜곡되었을것이다라고 가정한 가상의 함수 입니다. 그래서 이걸 실제로 사용할 수 있는 정보로 바꿔야 하는데, 이를 위해 degradation network를 설계 합니다. 흐릿한 depth 이미지 Z와 RGB 이미지 I를 보고 어디가 얼마나 왜곡되고 퀄리티가 저하됐는지에 대한 latent 표현인D를 출력합니다. 이 D를 다시 degradation 커널 K를 생성하는데 쓰이고, 만들어지는 K를 통해 식(3)과 같은 degradation 모델을 완성합니다. 결국 K를 GT Y에 적용하면 Z처럼 왜곡되는 depth map을 모사할 수 있습니다.

- \otimes : 컨볼루션 네트워크
- \boldsymbol{\vartheta} : 네트워크 파라미터
2.2. Degradation-Aware Decomposition and Fusion
coarse depth는 엣지 정보가 부족하기 때문에 엣지에 해당하는 고주파 정보를 많이 가지고 있는 RGB 이미지를 잘 융합해서 depth map을 만들고자 합니다. 그래서 degradation은 주로 엣지 근처에서 발생하니, 이를 통해 RGB에서 필요한 부분을 선택적으로 골라쓰자는 것이 DADF 모듈 설계의 목적 입니다.

- F_{img} : RGB 이미지에서 추출한 feature
- F_{dep} : denoise 처리한 Z에서 추출한 feature

Fig.3을 보면 알 수 있듯이, DADF 모듈은 F_{img}, F_{dep}, 그리고 F_D을 입력으로 합니다.
DADF 모듈은 크게 두 가지 동작을 하는데요, 첫번째는 Decomposition 입니다.
이는 고주파 정보를 고르기 위한 분석이라고 보시면 되는데, 그러기 위해서 가장 먼저 F_D를 주파수 영역으로 식(6)을 이용하여 변경합니다.

- f_{dct} : DCT(Discrete Cosine Transform) → 주파수 성분으로 변환
결과값으로 3개의 주파수 패치 D_1, D_2, D_3을 얻습니다. 이 세 개의 주파수 패치는 특정 주파수 대역을 각각 나타내고 있습니다. 주파수로 바꾸는 이유라고 함은 엣지 정보를 포함하는 고주파와 배경을 포함하는 저주파를 구별하기 쉽도록 하기 때문이라고 하네요.
그 다음엔 RGB 이미지에서 필요한 정보만 골라내기 위해 마스크를 생성하며, 이는 식(7)과 같이 정의합니다.

- f_m : concat, convolution, pooling, 그리고 sigmoid 등을 통해 구성된 함수
해당 마스크는 RGB 이미지에서 어디가 중요해 보인다는 걸 표시하는데, 이를 식(8)을 이용해 한번 더 업데이트를 해줍니다.

- f_{ac} : 주파수 패치 D_i를 더 하고 컨볼루션 연산하여 합치기 위한 함수
- f_{idct} : 주파수 성분에서 다시 spatial 영역으로 되돌리는 inverse DCT
즉 마스크와 주파수 성분을 곱해서, 여기서 원하는 공간적으로 어디가 중요한지를 알려주는 업데이트된 마스크를 얻는 것 입니다.
그 다음엔 얻은 마스크를 이용해서 RGB 이미지의 feature 중에 중요한 부분만 강조해야겠죠.

식(9)를 통해 필요한 고주파 RGB 정보만 강조하여 남긴 feature \hat{F}_{img}를 얻습니다.
두번째 동작 과정은 융합인데요, RGB와 depth feature를 합치는 과정을 의미합니다.

식(10)의 F_{rgbd}가 두 RGB, Depth feature을 concat하여 합친 feature map 입니다. 식 (11)을 잘 봐야하는데, D_i를 다시 사용하고 있죠. 이걸 conditional Mamba의 조건으로 사용한다고 합니다.
기존 Mamba는 입력 데이터만 가지고 long-range의 관계를 잘 처리할 수 있는데, 여기서는 conditional Mamba를 가지고 degradation을 조건으로 넣어서 어디가 왜곡되었는지를 참고해서 fusion을 더 잘 하고자 합니다.

위의 Algorithm.1이 Conditional Mamba 과정을 요악한 것인데, 중요한 부분은 어떤 정보를 얼마나 강조할지를 결정하는 게이팅 파라미터 \vartriangle을 생성한다는 것 입니다. 그 다음에 A와 B를 \vartriangle를 곱해서 가중치를 조정함으로써 degradation 정도에 따라 정보를 다르게 처리할 수 있도록 합니다. 7번째 줄의 SSM은 selective state space 연산으로, 최종 fusion 결과를 생성하는 부분 입니다. 이 결과가 이제 degradation 정보를 위에서 가중치로 고려한 엣지 중심으로 개선된 fusion feature이겠죠.
일반적인 fusion 방식은 모든 부분을 단순히 합치면서 동일하게 처리하지만, Conditional Mamba는 어디가 더 중요한지 degradation을 기준으로 따지게 됩니다. 또한 멀리 떨어져있는 영역 간의 관계도 동시에 학습하면서 전체 구조를 잘 살리는 depth completion이 가능할 수 있도록 합니다.
2.3. Loss Function
loss 함수는 기본적인 depth 예측을 위한 L_r과 degradation을 위한 L_d loss로 구성되어 있습니다.
단순히 depth를 복원하는 것 뿐만 아니라 degradation이 어떻게 나타나있는지를 잘 학습할 수 있어야 하기 때문에 추가적인 degradation loss를 추가된 것 입니다.


- \hat{Y}_i : 모델이 예측한 depth
- Y_i : GT depth
- N : 전체 학습 데이터 수
식(12)는 예측 depth와 GT 사이의 L1 loss로 이루어진 일반적인 예측 loss 입니다.
중요한 건 아래의 degradation loss 입니다.

이는 Y에 커널 K를 컨볼루션으로 적용하였을 때 얼마나 실제 coarse depth Z처럼 되는지를 확인하는 loss 입니다. 즉, 모델이 학습한 degradation 커널이 실제로 GT depth를 얼마나 coarse depth와 유사하게 망가뜨릴 수 있는지를 평가한다고 이해해주시면 좋을 것 같습니다.
본 논문의 방법론은 degradation 모델이 굉장히 큰 영향을 미치기 때문에, 이를 위해서는 K가 정말 degradation 현상을 잘 재현할 수 있어야 합니다. 그래서 degradation loss를 추가함으로써 모델이 단순히 예측 depth가 GT에 잘 맞도록 하는게 아니라 GT도 degradation을 통해 Z처럼 자연스럽게 모델링이 될 수 있도록 강제하는 loss를 추가한 것 입니다.
3. Experiment
실험은 총 4개의 데이터에 대해 평가하였다고 합니다.
(NYUv2, DIML, SUN RGBD, TOFDC)
3.1. Comparison with SOTA
3.1.1. Performance Analysis

depth completion task에서는 거의 처음 보는데, 파라미터 수를 같이 리포팅하고 있습니다. 모든 데이터셋에서 다른 방법론들 대비 압도적으로 적은 파라미터만을 이용하면서도 SOTA 혹은 그에 준하는 성능을 달성하는 것을 확인할 수 있습니다.
DIMIL이라는 데이터셋은 저도 처음 보는데, indoor와 outdoor가 모두 포함된 데이터로, 가장자리의 그림자나 불규칙한 홀이 심한 데이터라고 합니다. 이러한 데이터에 대해서도 본 논문은 모든 메트릭에 대해서 SOTA를 달성하고 있습니다. SUN RGB-D 데이터셋은 large scale의 데이터라서 다양한 센서나 scene에 대해 SigNet의 일반화 성능을 평가하기 위해 실험하였다고 합니다. 다만 제가 알기로는 SUN RGBD는 depth completion을 위한 sparse depth 수준의 depth map을 제공하지 않을텐데, 어느 정도로 샘플링을 하여 실험을 했는지는 모르겠네요.

Fig.4와 5는 TOFDC와 DIMIL 데이터셋에 대한 정성적 결과 입니다.
참고로 TOFDC 데이터는 여러 조도 조건과 open된 공간에서 취득된 데이터셋이라고 합니다.
Fig.4에서 의자의 모양이나 나뭇잎의 디테일한 엣지에 대해서 이전의 연구들에 비해 GT와 가장 유사하게 표현하고 있는 것을 알 수 있습니다. 이를 통해 RGB에서 필요한 고주파 정보를 융합하여 사용함으로써 sparse한 depth를 사용할 때 발생할 수 있는 문제들을 해결하였다는 것을 강조하고 있습니다.
3.2. Ablation Study
SigNet Designs

Tab.3은 SigNet의 주요 구성들에 대한 ablation study 입니다.
SigNet-i는 기본 베이스라인으로, degradtion과 DADF 없이 단순 더하기로 두 feature를 합친 버전 입니다.
SigNet-ii는 depth enhancement로 task를 바꾸어서 degradation 개념을 추가하여 concat으로 융합하는 버전 입니다. 이 때 이렇게 task를 바꾸기만 해도 성능이 크게 향상되는 것을 통해 단순 completion으로 가는게 아니라 enhancement 관점으로 변경하는 것이 효과적이라는 걸 알 수 있습니다.
Signet-iii는 denoising의 추가가 더해지면서, coarse depth를 그대로 사용하는게 아니라 denoising 과정을 합치면 더 좋은 feature을 뽑을 수 있다는 걸 보여주고 있습니다.
SigNet-iv는 attention map을 적용하는데, RGB의 중요한 정보만 골라내는 구조를 attention map으로 설계한 것이죠. 이를 통해 개선된 성능은 RGB 전체를 다 쓰는게 아니라 중요한 정보를 선택하는게 훨씬 효과적이라는 걸 의미하고 있습니다.
SigNet-v는 DCT 기반의 주파수 성분으로 분해하는 과정을 추가하는데요, 이를 통해 spatial이 아니라 DADF에서 주파수 기반의 분해하는 과정이 RGB의 중요한 정보를 골라내는데 도움이 된다는 것을 알 수 있습니다.
마지막 행의 SigNet-v는 conditional mamba까지 포함된 버전으로, degradation을 조건으로 long range의 모델링을 통한 fusion을 통해 큰 성능 개선을 이루었습니다. 이를 통해 fusion을 하는 방식도 단순히 뽑은 feature을 합치는 것에서 끝내는 게 아니라 논문에서 제안한 방식대로 수행하는 것이 효과적이라는 것을 실험적으로 알 수 있습니다.
Mamba Fusion and Iteration of DADF

마지막으로 Fig.8은 Mamba fusion에 대한 ablation study 입니다.
Fig.8(b)의 vim은 vanilla vision mamba를 사용해서 RGB-D feature를 인코딩하는 버전으로 베이스라인에 해당합니다. 여기서 conditional Mamba로 변경하면 Mamba가 어디가 중요한지를 condition으로 받아서 작동할 수 있도록 합니다. 여기에 DCT composition의 분해 수를 변경해서 실험을 해보았을 때 논문에서 디폴트로 사용하고 있는 3개가 가장 좋은 성능을 보이고 있네요. 이를 통해 고주파, 즉 엣지 중심의 정보를 선택해서 사용하는 것이 더 정확한 depth를 복원할 수 있다는 것을 알 수 있습니다.
그 다음엔 Fig.(a)에서 보이는 것처럼, DAF를 반복하는 횟수에 따른 성능을 평가하였습니다.
반복 횟수가 증가할수록 RMSE가 감소하긴 합니다만, 이 과정에서 계산량이 함께 증가하게 됩니다. 따라서 실험적으로 확인하였을 때 5번 반복하는 것이 trade-off 관계가 가장 잘 맞기 때문에 본 논문에서는 5번을 디폴트로 사용하고 있다고 하네요.
안녕하세요, 좋은 리뷰 감사합니다.
degradation 파트에서 주파수 성분으로 변환하는 이유가 RGB 이미지에서 엣지 부분이 고주파 영역에 해당하기 때문에 이를 선택적으로 사용하기 위해서라고 이해하였습니다. 그런데 지금 decomposition한 부분에서 3개로 나눈 주파수 성분을 모두 concat하여 단순히 RGB 이미지에서 어디가 중요해 보인다는 걸 표시해주는 마스크를 얻은 거 같은데 이게 고주파 영역을 선택적으로 활용하였다고 할 수 있는 것인가요 ?? 혹시 추가적인 처리가 있었는지가 궁금합니다 !
감사합니다.
안녕하세요, 리뷰 읽어주셔서 감사합니다.
고주파 영역을 선택적으로 활용하기 위한 직접적인 처리는 추가적으로 있진 않습니다. 다만 고주파-전경/저주파-배경으로 분리하기 위해서 애초에 decomposition을 했었고, RGB에서 중요해보이는 영역을 표현하는 마스크라고 함은 전경을 나타내는 고주파 정보를 표현하고 있을 것이라는 가정하에 다음과 같은 과정을 거친 것이라고 이해하였습니다.
감사합니다.
하이요. 리뷰 잘 읽었네요 좋은 논문인 것 같은데 그만큼 궁금한게 많아서 댓글 남겨요.
우선 첫번째 질문으로 수식8번에 관해서 물어볼게 있어요. 일단 제가 이해한 내용을 말씀드리면 수식 6을 통해 서로 다른 대역대의 주파수 패치 1,2,3을 얻었는데 이들을 그냥 sum (Sigma?)을 하고 컨볼루션 태우고(f_ac) 마스크 적용해서(m) 다시 이미지로 변환하는(f_idct) 과정으로 이해를 했어요.
근데 이 과정 자체에서 궁금한게 DCT를 통해 서로 다른 파장대를 나타내는 것이라면 이들을 단순히 더한다음에 masking하는 것이 아니라 이 중에서 고른 다음에 마스킹을 하든 컨볼루션을 하든 연산을 해야하는 것이 아닌가라는 생각이 들어서요.
즉, 리뷰에서도 주파수 성분대로 바꾼 이유가 고주파를 저주파 성분들과 특별히 구분하기 위해서라고 했는데 그럼 D1,2,3 각 패치들 중에서 고주파 중점으로 골라 쓰고 저주파 부분에 해당하는 패치는 버리고 해야하는거 아닌가yo? DCT를 자세히는 알지 못해서 그러는데 리뷰보고 이해하기로는 D1은 저주파 D3는 고주파 D2는 저주파와 고주파 사이 어느 영역대 이런 느낌으로 이해했거든요.
근데 이 중에서 저주파 성분 보다는 고주파 성분에 더 집중하고 싶다고 했으니 고주파 성분의 D3(예시)만을 활용해서 마스크 취하는 것이 더 좋지 않나요? 결국 이게 주파수 성분으로 변환하게 되면 영상의 spatial한 개념이 다 사라지게 되는거라 Masking 행위 자체가 저주파를 거르고 고주파를 살리는 방향으로 되는거로 이해하면 되나요?
예를들어서 주파수 성분대의 feature map도 2D feature map이라면 이때 2D feature의 중앙부분(spatial 축 H,W 기준)이 저주파 바깥쪽이 보통 고주파니깐 2D mask가 중앙부분을 지워버리는 식으로 동작한다고 이해하면 되는건지?
—–
2번째 질문은요 사실 degradation을 잘 하는 마스크를 구하자!라는 컨셉이 100% 완벽히 이해가 안돼서요. degradation을 잘하는 만큼 역으로 coarse를 잘 복원할 수 있다라는 컨셉 같은데 이게 단순히 행렬 연산 하듯이 역행렬, 역함수 개념이 아닐 것인데 degradation을 잘 해야하는 이유가 정확히 무엇인가요? degradation을 잘 할 수 있으면 어떤 부분을 하자로 만들어야하는지를 더 자세히 알 수 있고 이 어떤 부분을 하자로 만들어야하는가에 대한 영역을 반대로 더 집중해서 복원시켜야 더 좋은 양질의 뎁스를 구할 수 있다고 생각하면 되는건가요?
—-
3번째 질문은 그래서 해당 모델 속도가 어떻게 되나요? Figure 8에서 속도도 같이 알려줘야할 것 같은데 속도는 쏙 뺴고 안알려준 것 같아서 더 궁금하네요.
감사합니다.
안녕하세요, 리뷰 읽어주셔서 감사합니다 . . .
첫번째 질문에 대해서는, 논문에서는 고주파만을 사용하는 방식 대신에 D1-D3을 모두 활용하되 학습을 통해 고주파를 강조하는 방식을 선택했다고 이해해주시면 좋을 거 같습니다.
D1, D2를 완전히 버리기에는 의미론적인 구조 정보가 포함되어 있기 때문에 우선 이 패치들을 모두 더한 다음에 컨볼루션이랑 마스킹을 통해서 고주파가 그 중에서도 더 중요하도록 가중치를 주는 과정을 수행한 것 입니다. 전체 정보 중에서 선택적으로 강조하는 방식을 선택해서 단순한 고주파 필터링보다 더 효과적일 수 있었다고 합니다.
(그리고 말씀하신 예시의 마스킹 방식으로 이해하시는게 맞습니다.)
—
두번째로는 degradation을 하는 목적이 복원이 잘 되려면 무엇을 복원해야되는지를 정확하게 알아야된다는 것 입니다. 말씀하신 것처럼 degradation이 잘되어 있다는게 복원 대상을 분명하게 알고 있는 상황이라는 의미이기 때문에 더 좋은 depth를 예측할 수 있는 것 입니다.
—
마지막으로 논문에서 추론 속도에 대해서는 적혀있지 않습니다 . . . 혹시 몰라 서플도 찾아봤는데 속도에 대해서는 전혀 언급이 없네요 . .
감사합니다.