본문 바로가기
Study/Paper Review

[paper review] MonoDETR : Depth-guided Transformer for Monocular 3D Object Detection 논문 리뷰

by Hoony-Daddy 2024. 8. 28.
728x90

안녕하세요. 이번에는 monocular 3D detector인 MonoDETR 이라는 논문에 대해서 리뷰하겠습니다.

MMlab으로 유명한 CUHK의 mmlab에서 나온 논문으로 ICCV '23 에 publish되었습니다.

 

기존의 방법들은 보통 2D detector를 통해 대략적인 object center를 파악하고 3D feature를 예측하지만 본 논문은 local visual feature에 국한되지 않고 depth-guided 통해 3D feature를 estimation합니다.

 

Comparison of DETR-based Method

DETR은 2D detector로 NMS, anchor가 필요없이 높은 성능을 자랑합니다. 이를 이용한 3D detector로 여러가지 모델이 있는데 우선 PETR이 있습니다. 

 

 

[paper review] PETR 논문리뷰 (3D detection w Cam)

안녕하세요 이번에는 PETR 이라는 camera기반의 3D detection 논문을 살펴보겠습니다.최근 camera를 기반으로하는 3D detection 논문들이 많이 나오고 있습니다. 현재 multi-cam 3D detection분야는 BEV 방법론과 p

jaehoon-daddy.tistory.com

multi-view method에 보통사용하고 위의 그림에서와 같이 3D query를 만들기 위해 transformer 기반의 encoders를 사용하지 않습니다. 또한 3D query를 뽑을 때 visual feature만으로 guidance를 만들어서 depth를 cue로 사용하지는 않습니다. BEVFormer의 경우도 마찬가지로 multi-view method로 활용이 되고 BEV representation으로 image feature들을 보내는 것이 특징입니다. MonoDETR의 경우 encoding 과정에서 depth encoder를 추가하는 것이 특징이고 monocular detection의 특성상 depth guidance를 추가하는것이 꽤 강력한 요소이지 않을까 합니다.

 

 

 

Feature Extraction

visual feature의 경우 HxWx3의 image가 input으로 들어오면 resnet50을 이용해서 multi scale feature map을 만듭니다.(x8,x16,x32). depth feature를 추출하기위해서 lightweight depth predictor를 사용합니다. 

위에서 언급한 백본에서 얻은 3개의 multi-scale feature를 unify합니다. scale이 다르기때문에 x16의 크기로 통일하고 크기가 다른 나머지 2개의 feature map은 bilinear pooling을 통해 downsizing하고 element-wise aggregation을 수행합니다. 이후 3x3 conv를 태우고 최종 $f_{d}$ depth feature(H/16,W/16,C)를 얻습니다.

Depth Features단계에서 얻은 depth feature map을 통해 이번에는 foreground depth map을 얻는 과정입니다. 기존의 depth map을 구하는 depth 모델과 차이나는 점이 foreground depth만이 관심이 있다는 점 입니다. 1x1 conv를 태우는데 이 단계에서 마치 attention과 같은 효과를 갖게 되는 것 같습니다. 1x1 conv를 거치면 feature map의 resolution은 그대로고 channel(k+1)만 바뀌게 됩니다. 이 과정에서 object-wise depth label을 통해 depth map을 학습하게 됩니다. 2D bbox에서 같은 pixel에 있다면 같은 depth label로 assign됩니다(아마 3D label의 중점의 z값?). 여러개의 box에 중복되어 있는 pixel의 경우 가장 가까운 depth로 labeling합니다. 

 

본 논문에서는 depth를 k+1개로 나눕니다. k의 구간은 foreground를 나타내고 마지막은 backgound를 representation합니다. depth 구간을 d_min, d_max로 설정하고 실제 depth label(object)이 k개 중에 몇번째 구간으로 있는지 아래의 수식을 통해 정의합니다.

 

Depth-guided Transformer

Depth-guided Transformer는 visual encoder, depth encoder, depth guided decoder를 합해서 depth-guided transformer라고 합니다. visual encoder, depth encoder의 경우 앞서 extract한 visual feature, depth feature를 활용해서 transformer encoder를 통해 encoding과정을 거칩니다.  visual encoding의 경우 3개의 blocks을 거치게 되고 depth encoding의 경우 1개의 block만 거치게됩니다.  각각의 block은 보통의 transformer encoding과정처럼 self-attention과 FFN을 적용합니다.

Depth-guided Decoder에서는 encoder를 통해나온 $f^{e}_{D}$ $f^{e}_{V}$를 베이스로 합니다.  learnable query N개를 random initialization(아마도?)하게 생성한후에 depth-cross attention layer를 통과합니다. 

위의 수식은 일반적인 cross-attention 수식입니다.  이 후 query를 다시 attention을 수행합니다.(inter-query self-attention). update된 query와 visual feature map과 마찬가지로 cross-attention을 수행하고 마지막으로 FFN을 통해 depth-guided decoder를 완성시킵니다.

positional encoding부분이 좀 특이한게 앞서설명한 k+1개의 discrete depth map에서 우선 N개의 query를 k개의 bin에 균등하게 나눕니다. 이 후 각 bin에 대해서 unique한 positional encoding을 생성하는데 learnable parameter로 구성됩니다. 학습된 해당 깊이의 bin의 positional encoding에 쿼리의 값을 aggregation해서 query를 update합니다.

 

 

 

Head

기존의 DETR에서처럼 Hungarian algorithm을 사용해서 GT와 predicted results를 optimal하게 매칭시킵니다. 최종 prediction에는 총 6개의 정보가 담겨있는데, category, 2D size, projected center ->2d info, depth, 3D size, orientation ->3d info 이 그것입니다. 

Loss관점에서 볼때 그게 두 그룹으로 분류하였는데 (L2d, L3d) 학습 초기에는 L2d에 중점을 두고 학습이 진행됨에 따라 L3d로 weight를 주는 방식으로 학습을 진행했다고 합니다. 

 

$N_{gt}$는 실제 GT object개수를 뜻하고 $L_{dmap}$은 foreground depth map에 대해서 focal loss를 사용하였습니다.

 

Plug-and-play for multi-view detectors

마지막으로 그림에서처럼 multi-view전용 모델에서도 본 논문의 contribution을 활용할 수 있다고 합니다.

 

Experiments

KITTI dataset의 실험결과입니다.

 

nuscenes dataset의 실험결과입니다. nuscenes는 기본적으로 multi-view 데이터셋이기에 앞서 언급한 multi-view 모델에 해당논문의 depth-guide query방식으로 추가한 결과입니다.