안녕하세요 이번에 들고온 논문은 2022년에 arxiv에 올라온 BinsFormer:Revisiting Adaptive Bins forMonocular Depth Estimation라는 논문입니다.
이번에는 이전에 리뷰했던 Scale Depth의 근간이 되는 BinsFormer를 직접 읽어보면서, 무엇이 핵심 아이디어였고 이후 방법들이 무엇을 덧붙였는지 정리해보고자 하였고 이를 리뷰로 들고 오게 되었습니다.
바로 리뷰 시작하도록 하겠습니다.
introduction
기존의 픽셀 단위 depth를 regression하는 것과는 다르게 bin 이라는 개념을 도입해서 depth를 어떠한 depth 범위의 구간으로 classification하는 연구가 진행되었습니다. BFormer는 마찬가지로 bin이라는 개념을 활용하고 그 구간을 adaptive하게 생성하고 Bin과 visual feature 간의 상호작용을 통해 bin의 품질을 올리고자 하는 쪽에 초점을 두었고 분류와 regression을 적절히 섞는 틀로 잘 정리해 놓은 프레임워크라고 보시면 될 것 같습니다.

기존의 픽셀 단위로 depth를 regression하는 것(a)이 주류였는데, 이러한 방식은 깊이를 깔끔하게 예측할 수 있긴 하지만 학습과정에서 수렴이 느리고 성능 또한 아쉬운 경우가 있었다고 합니다. 반대로 연속 깊이를 여러 구간으로 이산화해서 그 구간을 픽셀별 classification하는 방식(픽셀별 분류 문제(b))으로의 접근은 성능은 오르지만, 경계가 들쭉날쭉하게 나타난다는 단점이 있었습니다. 그래서 Adabins라는 각 픽셀에 대해서 이 픽셀이 어느 bin에 속할지 확률적 표현을 학습하고 빈 중심(bin centers)과의 가중합으로 최종 깊이 값을 예측하는 즉, 분류-회귀 혼합 아이디어(c)가 등장했습니다. BinsFormer는 그 혼합 구조를 바탕으로 Adabins 처럼 bin이라는 구간을 adaptive하게 생성하는 방식을 사용하되 visual feature 생성과 bin 생성은 따로 진행을 하면서 트랜스포머를 도입하여 Bin과 visual feature 간의 상호작용을 통해 bin의 품질을 올리고자 하는 쪽에 초점을 둔 프레임워크라고 보시면 될 것 같습니다.
앞서 언급했던 이전에 먼저 나온 비슷한 연구인 Adabins라는 방법론에 대한 한계를 관찰하면서 이를 보완한 것이 binsformer 라고 보시면 될 것 같습니다. 그래서 저자가 관찰한 Adabins의 문제점이 무엇이고 binsformer는 이부분을 어떻게 보완했는지가 해당 논문을 이해하는데에 있어서 중요한 요소라는 생각이 듭니다.
짧게 binsformer가 Adabins의 어떠한 부분을 보완하고 개선을 하였는지 언급하고 넘어가자면,

먼저 위는 Adabins의 아키텍쳐로 Adabins라는 친구는 마지막 고해상도 피처(decoder 마지막 층의 출력) 하나만을 의존해 bins를 뽑습니다. 그래서 1. 전역 문맥을 활용하기 어렵고 2. 같은 피처에서 빈과 픽셀 분포를 함께 예측해서 서로간에 학습솨정에서 간섭이 생긴다는 점 게다가 3. Chamfer loss가 불필요한 inductive bias를 만들 수 있다는 한계가 있었다고 보시면 될 것 같습니다.
3번에 대해서는 논문에서 자세하게 나와있지 않지만 찾아본 내용을 바탕으로 풀어서 설명드리면
여기서 말하는 Chamfer loss의 컨셉을 간단하게 설명드리면 예측한 점들이 정답 점들에 얼마나 가까이 붙어 있는지를 양쪽 방향으로 측정해서 더한 값입니다.
AdaBins 맥락에서는 예측한 bin 중심들의 집합과 GT 깊이 분포로부터 만든 점들 사이에서 해당 loss를 사용하게 된다고 보시면 될 것 같습니다. 어떻게 보면 좋은 빈은 GT 깊이 분포의 모양을 따라야 한다! 는 가정을 학습에 직접 주입하는 셈입니다. 어떻게 보면 제약을 거는 것이라고 볼 수 있습니다. 따라서 저자는 이러한 부분이 inductive bias를 만든다는 점으로 언급한 것 같습니다.
BinsFormer나 Adabins와 같은 분류-회귀 계열에서 bins의 중심은 어디까지나 기저 역할을 할 뿐이지 최종 깊이는 픽셀별 확률 P와 bin의 중심과의 가중합으로 나오기 때문에 정답 분포에 딱 붙은 빈이 반드시 최선은 아닐 수도 있습니다. 근데 Chamfer loss를 사용하게 되면 bin은 GT 분포를 따라야 한다!는 제약이 강하게 들어가서 위와 같은 문제점을 언급한 것 같습니다.
BinsFormer는 이 지점을 바로 고쳐버립니다. 1. bin 생성은 트랜스포머 쿼리가 멀티스케일 피처와 차례로 상호작용하면서 set-to-set으로 전담하고 2. 픽셀 분포는 별도의 픽셀 경로에서 뽑는 식으로 경로를 분리합니다. 그래서 저해상도에서 전역적인 장면의 구조나 스케일을 먼저 맞추고, 고해상도로 갈수록 디테일을 coarse-to-fine으로 다듬는 흐름으로 자연스럽게 만들어진다고 보시면 될 것 같습니다.
또 3. BinsFormer는 여기서 살짝 방향을 바꿔서 Chamfer loss처럼 빈을 직접 제약하지 않고, scene query를 도입해서 이거에 classification loss을 추가적으로 사용합니다. 그래서 씬에 대한 정보를 토대로 bin을 예측 할 수 있는 방식으로 동작하게 됩니다. 결과적으로 전역적인 문맥과 로컬의 디테일이 서로를 해치지 않으면서 서로의 장점들에 대해서 attention 하는 학습이 이루어지게 됩니다.
바로 Method 파트로 넘어가도록 하겠습니다.
Method


저자가 말하는 BinsFormer의 큰 틀은 딱 세 덩어리라고 보시면 될 것 같습니다. 픽셀 레벨 모듈, Transformer 모듈, 깊이 추정 모듈. 여기에 성능을 조금 더 끌어올리기 위해 보조적인 씬 분류(scene query) 와 멀티스케일 feature map의 활용을 했다고 보시면 될 것 같습니다.
큰 흐름은 입력 RGB 이미지가 들어오면, 픽셀 레벨 모듈이 먼저 이미지를 쭉 훑어서 멀티스케일 특징 F와 f_p 를 뽑습니다. 그리고 멀티스케일 피쳐맵은 Transformer의 키, 밸류로 들어가. 여러 개의 쿼리 토큰이 어텐션으로 멀티스케일 특징 F의 정보를 흡수합니다. 그리고 나온 각 쿼리는 작은 MLP 헤드를 거쳐 두 가지를 뽑습니다. 하나는 bin의 길이 b(깊이 축을 나누는 폭), 다른 하나는 각 빈을 대표하는 bin 임베딩 f_b입니다. 즉, 빈을 클래스처럼 직접 예측하게 됩니다.
마지막으로 깊이를 만드는 단계입니다. 피쳐맵 f_p와 bin 임베딩 f_b의 유사도를 구해 픽셀별 확률분포 P 를 만들고(Softmax) bin의 길이 b를 이용해 bin의 중심을 계산한 뒤, P와 bin의 중심을 가중합해서 최종 깊이를 얻게됩니다. 정리하면 이 픽셀은 각 빈에 속할 확률이 이만큼이니, 그 확률로 빈 중심을 섞어서 연속적인 깊이를 추정한다라고 보시면 될 것 같습니다.
아래는 위 내용을 수식적으로 푼 것 입니다.
bin의 중심 계산 식
c(b_i) \;=\; d_{\min} + (d_{\max}-d_{\min}) \left( \frac{b_i}{2} + \sum_{j=1}^{i-1} b_j \right)여기서 c(b_i)는 i번째 빈의 중심 깊이이고 d_{\max}와 d_{\min}은 각각 데이터셋의 유효 깊이 최대,최소값입니다. f_p와 bin 임베딩 f_b 사이의 내적을 통해 유사도 맵을 얻고, 이를 Softmax를 태워 확률 분포 맵 P \in \mathbb{R}^{H \times W \times N}을 만들고 마지막으로, 각 픽셀에서 최종 깊이 값 \hat d 는 그 픽셀의 확률 분포와 깊이 빈 중심 c(b)의 가중합으로 계산됩니다.
\hat d \;=\; \sum_{i=1}^{N} c(b_i)\, p_i그리고 scene query의 역할도 자세하게 설명드리면 이미지가 어떤 환경(실내/실외, 주방/교실 등)에 속하는지 장면 분류를 할 수 있도록 학습이 이루어지고,학습 중 self-attention을(transformer decoder) 통해 그 씬에 대한 정보들이 빈 쿼리들에게 간접적으로 주입되게 됩니다.
참고로 Scale Depth는 여기서 더 나아가 CLIP 텍스트까지 활용해서 씬 카테고리의 언어 정보를 적극적으로 쓰는 편입니다(특히 실내 세분류). BinsFormer는 이미지 내부의 장면 분류까지만 보조로 쓰고 끝나는 느낌이고, Scale Depth는 텍스트 조건으로 스케일을 더 명시적으로 잡는다는 점이 차이 같습니다.
그리고 멀티스케일의 피쳐맵을 뽑아냄으로써 낮은 해상도 특징에서 전반적인 장면의 구조와 스케일을 먼저 맞추고, 해상도를 올려가며면서 로컬한 영역의 디테일을 점점 fine하게 만드는 coarse-to-fine 흐름으로 동작합니다. Transformer 쿼리들이 스케일을 하나씩 올라가며 F와 반복적으로 상호작용하기 때문에 전역과 국소 정보가 단계적으로 잘 합쳐진다고 보시면 될 것 같습니다.
결과적으로 최종 depth map을 예측하게 되면 이를 Scale invariant loss를 통해 손실을 계산합니다.
\mathcal{L}_{\mathrm{reg}} \;=\; \alpha \,\sqrt{ \frac{1}{T}\sum_i g_i^{2} \;-\; \frac{\lambda}{T^{2}}\left(\sum_i g_i\right)^{2} }여기서 g_i = \log \tilde d_i - \log d_i이고 d_i는 GT depth \tilde d_i는 모델이 예측한 depth 입니다. 그리고 T 는 유효한 GT 값을 갖는 픽셀 수를 나타냅니다.
그래 최종적으로 사용되는 손실함수식은 추가적인 멀티스케일, 멀티레이어도 활용하여 이를 모두 더한 것을 최종적인 loss로 사용합니다.
\mathcal L_{\text{total}} =\sum_{s=1}^{S}\Bigg( w_s \sum_{l=1}^{L}\big(\underbrace{\mathcal L^{s,l}<em>{\text{reg}}}</em>{\text{깊이 회귀(SI)}} \;+\; \mu\,\underbrace{\mathcal L^{s,l}<em>{\text{cls}}}</em>{\text{씬 분류 CE}}\big)\Bigg)- s=1\ldots S: 스케일 인덱스(저해상도→고해상도)
- l=1\ldots L: 해당 스케일의 Transformer 레이어 인덱스. 각 레이어에서 중간 예측을 내고 보조 손실로 사용.
- \mathcal L^{s,l}_{\text{reg}}: 그 레이어에서 낸 depth map에 대한 Scale-Invariant loss
- \mathcal L^{s,l}_{\text{cls}}: 같은 레이어의 scene query에 대한 CE loss. NYU처럼 라벨이 있을 때만 쓰고, KITTI처럼 없으면 0이라고 보시면 됩니다.
- \mu: 씬 분류 손실에 대한 가중치
- w_s: 스케일별 가중치
Experiments
실험 부분에서는 세 가지 데이터셋으로 평가합니다.
그리고 scale depth랑은 다르게 실내, 실외 같이 학습시키지 않고 각각 따로 학습하여 독립적으로 평가합니다.
KITTI(실외), NYU-Depth v2(실내), SUN RGB-D(실내-일반화 성능 평가용)


표 1은 KITTI(Eigen, 0–80m)에서의 비교테이블인데. 백본이 가벼워도 경쟁력 있다 라는 것을 확인 하실 수 있고 transformer 기반의 백본을 사용하면 SOTA성능을 보이는 것을 확인 하실 수 있습니다.
백본 스케일링을 보면, 어찌보면 당연하겠지만 ResNet-18 -> ResNet-50 -> Swin-Tiny -> Swin-Base(†) -> Swin-Large(†)로 갈수록 오차 지표가 점점 개선되는 게 보이지만 동일 백본 비교대상은 2개 밖에는 없었습니다 . 결과적으로 최종 Swin-Large(†) 는 표 내 최고 성능을 보입니다. δ3은 여러 방법이 0.999로 포화라서 실제 차이는 오차 지표쪽을 보는 게 더 낫습니다.
AdaBins(E-B5+mini-ViT)과 비교했을 때에도 모든 부분에 대해서 성능이 개선된 것을 확인하실 수 있습니다. 다만 Adabins와 백본을 동일하게 적용시켜보고 평가를 했으면 좀더 공정한 비교가 되지 않았을 까 하는 아쉬움이 있습니다.

NYU-Depth v2(0–10m)에도 kitti랑 마찬가지로 백본이 강해질수록 BinsFormer가 꾸준히 올라가지만 엄청 낮지는 않지만 다소 낮은 성능을 보이는δ3의 성능에 대한 저자의 언급은 따로 없었습니다. 다만 Adabins와 비교했을 때에는 유의미한 성능 향상이 있다고 볼 수는 있을 것 같습니다.

위는 NYU로만 학습하고 SUN RGB-D에서 평가했을 때의 결과입니다. 다른 실내 도메인에서의 일반화 성능을 평가하는 지표라고 생각하시면 좋을 것 같습니다.

위는 BinsFormer가 어떤 구성요소로 성능을 끌어올리는지 하나씩 뜯어보는 ablation 실험표입니다. 기준선은 Reg. Baseline인데 말 그대로 BinsFormer의 픽셀 모듈만 써서(트랜스포머/깊이 모듈 없음) 픽셀별 깊이를 직접 회귀합니다. 또 여기에 트랜스포머와 쿼리 MLP만 살짝 얹고도 여전히 회귀로만 예측하는 Reg. Baseline+를 추가해 공정하게 비교했다라고 볼 수 있을 것 같고 그래서 Reg. Baseline+와 최종 BinsFormer의 차이는 회귀 vs 분류–회귀 이 부분에 있다고 보시면 될 것 같습니다. 그 다음은 분류–회귀 안에서 bin 생성 방식을 바꿔가면서 비교하는 실험을 했습니다. 고정 UD/SI처럼 미리 정한 구간을 쓰는 경우, 그리고 AdaBins처럼 adaptive bin을 쓰되 한 경로에서 같이 뽑는 경우를 포함합니다. 빈을 쿼리 기반(set-to-set)으로 전담 예측하고(=Bins Query), Aux info, 멀티스케일 피쳐(Multi-S.)까지 사용했을 때 성능이 가장 좋은 것을 확인 할 수 있습니다. (다만 저는 Aux info가 scene query를 뜻한다고 생각했는데 Adabins에 체크가 되어있는 걸 보니 헷갈리네요.. 아마 저 체크는 Adabins에서 Charmfer loss를 의미하는게 아닐까 조심스럽게 추측해봅니다.) 특히 bin의 생성을 피쳐맵 생성과 분리하고 멀티스케일을 활용하는 성능향상에 큰 몫을 하는 것으로 보입니다.