Paper review/3D Object detection

[논문 리뷰] BEVFormer: Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers (2022)

성장형감자 2022. 8. 18. 20:49
728x90
반응형

나의 정리

  • 논문이 지적한 문제점: 2D image를 이용해 3D object detection을 하는데 여러 문제점들이 존재합니다. 움직이는 물체의 속도나 가려짐의 정도가 심한 물체들을 검출해내는데 문제가 발생합니다. 또한 한 가지 camera view가 아닌 multi-camera view를 사용하는 경우엔 input이 커지게 되어 계산량이 복잡해질 수 있다는 문제가 있습니다. 이런 여러 가지 문제를 해결하고자 자율 주행 perception task를 수행하기 위해 BEV feature를 2D image로 생성하여 해결하는 BEVFormer 논문입니다.
  • 해결 방안: 먼저 static image가 아닌 video를 입력으로 받아서 temporal self-attention을 진행합니다. 이 TSA를 통해서 시간적으로 object끼리 연결을 해주어 움직이는 물체의 속도나 가려짐의 정도가 심한 물체들을 검출을 할 수 있습니다. 또한 multi-camera view끼리 서로 spatial cross-attention을 진행하여 서로 다른 camera view 상에서의 같은 object를 서로 연결해주어 spatial 한 정보를 추출해 grid-shape BEV query를 생성합니다. 마지막으로 두 attention layer를 통해 추출한 spatial, temporal 정보를 하나로 합쳐서 사용하게 됩니다.
  • 하지만 여전히 monocular 3D object detection의 한계로 LiDAR 방식의 detector보다 성능의 차이가 존재하고 효율성의 문제도 아직 있습니다. 그래도 temporal image를 사용해서 LiDAR-based에 근접한 성능을 낸 detector입니다.

 

 

Abstract

 

사전 정의된 grid 모양의 BEV queries를 통해 spatial, temporal space 간의 상호작용을 통해 spatial, temporal 정보를 이용하는 BEVFormer 논문을 읽어봅시다.

 

 

spatial 정보를 합치기 위해서 각각의 BEV query가 camera view 간의 RoI를 통해서 spatial feature를 추출하는 spatial cross-attention을 사용합니다. 이때 camera view 간의 RoI라는 의미는 BEVFormer는 multi-camera를 input으로 사용하기 때문에 두 multi-view 간의 spatial feature를 추출한다는 의미입니다.

 

 

과거 BEV 정보를 반복적으로 융화시키기 위해서 temporal self-attention을 제안합니다. temporal 정보가 주는 장점이 많이 존재하기 때문에 기존의 일반 단일 image가 아닌 temporal 한 정보를 가진 image를 사용하게 됩니다.

 

 

nuScene test set으로 기존의 SOTA 모델보다 9.0 점이 더 높고 LiDAR-based baseline과 비슷한 성능을 낸다고 합니다.

 

 

 

Introduction

 

앞서 monocular 3d object detection 논문 리뷰에서 많이 언급했지만 monocular 이미지를 사용하면 LiDAR에 비해서 저렴하고 거리가 먼 물체와 traffic light나 stop line과 같은 image에서만 볼 수 있는 요소들을 detection 할 수 있다는 장점이 존재합니다. → LiDAR의 경우 거리가 멀어질수록 object에 찍히는 point가 적어져 image에 비해 detection이 매우 어렵고 point로는 traffic light나 stop line 같은 것들은 구분이 어렵습니다.

 

 

BEV(bird’s-eye-view)는 object의 크기와 위치를 명확하게 보여주고 perception과 planning 같은 다양한 자율주행 task에 적합하기 때문에 주로 사용되는 표현 방식입니다. 위 그림을 보면 왼쪽은 camera 이미지에 3D bbox를 projection 시켜서 visualize 한 사진이고 오른쪽을 보위에서 바라본 BEV 상에서의 주변 환경을 visualize한 사진입니다.

 

 

 

정확한 3D object detection 예측을 위해서는 강력한 BEV feature가 필요하지만 2D plane에서 생성된 BEV feature의 경우엔 ill-posed 문제가 발생하기 때문에 3D object detection의 다른 방식보다 상당한 이점을 보여주진 못합니다.

 

그래도 BEV feature를 사용하여 3D detection을 수행하는 모델들이 소개되었는데요 가장 유명한 BEV framework는 depth information을 기반으로 해 BEV feature를 생성합니다. 하지만 이 방식도 depth 값이나 distribution에 너무 예민하게 정확도가 반응한다고 합니다.

 

 

 

이처럼 BEV-based 방식의 경우에는 compounding error를 일으키게 되고 부정확한 BEV feature는 최종적인 성능에 심각한 악영향을 끼칠 수 있습니다.

→ 여기서 compounding error란 좋지 못한 depth estimation으로 인해서 부정적인 영향을 끼치게 되는 것입니다.

 

 

따라서 BEVFormer의 motivation을 정리하면 아래와 같습니다.

  1. 앞서 설명했던 compounding error를 피하기 위해서 depth information에 의존하지 않고 BEV feature를 생성하는 방법을 design 합니다.
  2. BEV는 temporal, spatial 공간을 연결할 수 있는 중요한 다리입니다.
    사람의 perception system을 생각해보면 temporal 정보가 물체의 움직임과 가려진 물체를 알아보는 것 등 중요한 역할을 수행하게 됩니다. 따라서 비디오 데이터를 사용해 효과적으로 많은 일들을 처리할 수 있다고 합니다.

 

 

 

하지만 지금까지의 연구들은 temporal 정보를 거의 사용하지 않았습니다. 주요한 challenge는 자율 주행에선 처리 시간이 중요하고 scene이 매우 빠르게 변하기 때문에 단순하게 BEV feature를 timestamp를 기준으로 쌓게 되면 추가적인 computational cost와 방해가 되는 정보를 야기하게 된다고 합니다.

 

 

따라서 BEVFormer는 효율적으로 multi-view 카메라를 통한 spatiotemporal feature와 history BEV를 합칩니다. 생성된 BEV feature로 3D detection, map segmentation과 같은 3D perception task를 위해 사용할 수 있습니다.

 

 

BEVFormer는 세 가지 중요한 design을 정리해보면

  1. attention을 사용해 spatial feature와 temporal feature들을 융화시키는 grid-shaped BEV queries
  2. multi-camera image 간의 spatial feature를 합쳐주는 spatial cross-attention module
  3. history BEV feature에서 temporal 정보를 추출해내는 temporal self-attention module

이러한 design을 통해서 움직이는 객체의 속도를 추정하고 많이 가려진 객체를 detection 하는 것, 적은 computational overhead를 가질 수 있는 장점들이 있습니다.

 

 

BEVFormer의 contribution을 마지막으로 정리해보겠습니다.

  • multi-camera로 찍은 temporal image를 BEV 형식의 input으로 사용하는 spatiotemporal transformer encoder를 가진 BEVFormer를 제안합니다. 여기서 생성된 spatial feature와 temporal feature가 합쳐진 BEV feature를 통하여 3D detection과 map segmentation을 포함한 자율 주행을 위한 perception task로 사용이 가능합니다.
  • multi-view camera 사이에서의 spatial feature를 찾기 위해서 spatial cross-attention layer를 사용하고 과거의 BEV에서 temporal feature를 찾기 위해서 temporal self-attention layer를 사용해 학습이 가능한 BEV query를 설계했습니다. 두 attention layer를 이용해 얻은 두 spatial feature와 temporal feature를 하나의 BEV feature로 통합하게 됩니다.
  • nuScenes, Waymo dataset에서 좋은 성능을 냈고 특히 nuScenes test set에서 56.9%로 DETR3D와 비교했을 땐 9%나 성능을 더 올렸습니다.

 

 

 

Related Work

 

Transformer-based 2D perception

DETR과 Deformable DETR에 관한 내용이 나옵니다. 이 부분은 아래 글로 대체합니다.

https://talktato.tistory.com/16

 

[논문 리뷰] DETR: End-to-End Object Detection with Transformers

나의 정리 NLP에서 주로 사용되던 Transformer를 object detection task에 사용하여 간단하고 경쟁력 있는 모델을 만들었다. direct set prediction 문제로 정의하여 bipartite matching을 통하여 유니크한 예측을..

talktato.tistory.com

https://talktato.tistory.com/17

 

[논문 리뷰] Deformable DETR: Deformable Transformers for End-to-End Object Detection

나의 정리 기존의 DETR이 가진 문제점 1. 수렴이 오래 걸린다. (학습시간이 길다) 2. 작은 물체에 대한 성능이 매우 낮다. 이 두 가지에 대한 문제점을 해결한 모델 Deformable Convolution의 아이디어를

talktato.tistory.com

 

 

 

Camera-based 3D Perception

 

Camera를 이용해서 3D object detection을 하는 방법은 다양한 방법들이 존재합니다.

 

먼저 2D bbox를 이용해서 3D bbox를 예측하는 방법이 존재합니다.

다음 방법으로는 이전에 읽었던 논문인 FCOS3D처럼 바로 3D bbox를 예측하는 방법도 존재합니다.

DETR3D는 2D image로 learnable 3D queries를 projection 시킨 뒤 알맞은 feature를 sampling 하여 3D bbox를 예측하는 방법이 존재합니다.

BEV feature를 통해서 top-down view로 3D bbox를 예측하는 방법도 존재하는데요, depth estimation을 통해 얻은 depth 정보를 이용해 image feature에서 BEV feature로 변환하여 사용하게 됩니다.

OFT, ImVoxelNet과 같은 경우엔 image feature를 사전에 정의된 voxel로 표현을 하여 사용하게 됩니다.

 

BEVFormer

 

Overall Architecture

 

위 그림이 전체적인 BEVFormer의 구조입니다. (a)가 BEVFormer의 encoder 구조이고 6개의 encoder를 쌓아서 최종적으로 사용하게 됩니다. 기존의 transformer 구조와 동일하지만 BEV query, spatial cross-attention, temporal self-attention을 사용한다는 점이 크게 다른 점입니다.

 

 

inference에선 multi-camera image를 input으로 받아 ResNet-101을 backbone으로 feature $F_t = \{F_t^i\}{i=1}^{N{view}}$ 을 추출해줍니다. 이때 $i$ 번째 view feature에 $N_{view}$ 는 camera view의 총개수를 의미하고 $B_{t-1}$ 는 t-1 시점의 BEV feature를 Q는 현재 BEV query를 의미합니다.

 

 

FFN을 거친 뒤에 encoder layer은 refine 된 BEV feature를 output으로 가지게 되고 이는 다시 다음 encoder layer의 input이 됩니다. 6개의 encoder를 거치게 되면 t timestamp의 통합된 BEV feature $B_t$ 가 생성됩니다. 여기서 생성된 BEV feature를 input으로 사용해 3D detection head와 map segmentation haed를 거치게 되면 3D bbox나 segmentation map을 얻게 됩니다.

 

 

 

BEV Queries

 

grid 모양의 learnable parameter $Q \in R^{H \times W \times C}$ 를 사전 정의하여서 BEV Query로 사용합니다. (H, W는 BEV plane의 spatial shape입니다.)

 

p = (x, y)에 위치한 $Q_p \in R^{1\times C}$ 는 BEV plane에서 해당하는 grid cell 영역에 해당하는 Query입니다. BEV plane에 존재하는 각 grid cell은 현실 크기의 s meter을 가지게 됩니다. BEV feature의 중앙은 ego car의 위치에 대응하고 BEV query에 learnable positional embedding를 추가했다고 합니다.

 

 

 

Spatial Cross-Attention

 

multi-camera image를 input으로 사용하기 때문에 기존에 존재하던 multi-head attention을 사용하게 되면 너무나 많은 computational cost가 필요하기 때문에 효율적으로 transformer를 적용하기 위해서 spatial cross-attention을 고안했습니다. 하지만 deformable attention은 2D perception을 위해 사용되었기 때문에 그대로는 사용할 수 없고 3D scene에서 사용하기 위해서 약간의 수정을 거쳐야 합니다.

 

 

 

한 개의 BEV query의 경우 projection 된 2D point들이 일부 view에만 포함될 수 있고 다른 view에는 포함되지 않을 수 있습니다. 포함된 view를 $V_{hit}$ 이라고 하고 이러한 2D point들을 query $Q_p$ 의 reference point로 사용해 deformable detr과 같이 주변에서 sampling을 진행합니다. 최종적으로 spatial cross-attention의 output으로 sampling 된 feature의 weighted sum을 사용하게 됩니다.

 

 

 

SCA(spatial cross-attention)의 식은 아래와 같습니다.

$SCA(Q_p,F_t) = \frac{1}{|V_{hit}|}\sum_{i\in V_{hit}}\sum_{j=1}^{N_{ref}}DeformAttn(Q_p, P(p,i,j),F_t^i)$

notation을 간단히 확인하고 넘어가면 i는 i번째 camera view를 의미하고 j는 reference point의 index, $N_{ref}$ 은 reference point의 총 개수, $F_t^i$ 는 i번째 camera view의 feature, P(p, i, j)는 i번째 view image에서의 j번째 reference point를 얻기 위한 project function을 의미합니다.

 

 

 

앞서 설명한 project function을 통하여 reference point들을 구하게 되는데 이를 구하는 과정에 대해서 더 살펴보겠습니다.

먼저 p = (x, y)에 위치하는 query $Q_p$ 에 대응되는 real world의 좌표 $(x', y')$ 를 구합니다. 구하는 식은 아래와 같습니다.

$x' = (x-\frac{W}{2})\times s;\space y' = (y-\frac{H}{2})\times s$ (s는 BEV grid 해상도의 크기이고 $(x', y')$ 는 ego car의 위치 좌표입니다.)

 

 

anchor height를 미리 사전 정의해서 다른 높이에 따른 단서를 포착할 수 있게 합니다. 위와 같은 방법을 통해 3D reference points의 pillar를 얻을 수 있습니다. → $(x', y', z'i){j=1}^{N{ref}}$

 

 

마지막으로 앞서 말한 reference point를 얻기 위해 사용하는 project function을 살펴보면

$P(p,i,j) = (x_{ij},y_{ij}) \space\space\space\space, where \space\space z_{ij} \cdot [x_{ij} \space\space\space y_{ij} \space\space\space 1]^T = T_i \cdot [x'\space\space\space y'\space\space\space z'_j \space\space\space 1]^T$

$T_i$ 는 i번째 camera에 적용할 projection matrix입니다.

 

 

 

Temporal self-Attention

 

temporal 단서가 없이 static image만을 이용해선 움직이는 물체의 속도를 추론하거나 많이 가려져있는 객체를 검출하는데 큰 어려움이 있습니다. 이처럼 주변 환경을 인식하는데 spatial 정보도 중요하지만 temporal 정보도 매우 중요합니다. 따라서 이러한 문제점을 해결하기 위해서 현재 환경과 과거의 BEV feature를 합쳐주는 temporal self-attention을 고안하였습니다.

 

 

 

현재 시점 t의 BEV query Q와 이전 시점의 BEV feature $B_{t-1}$ 이 주어졌을 때, 먼저 같은 grid의 feature가 실제 위치에 일치하도록 $B_{t-1}$ 을 Q에 맞춰서 위치시킵니다. align이 완료된 t-1 시점의 BEV feature를 $B'_{t-1}$ 로 표현합니다.

ego vehicle이 움직이게 되면 이미지 상에서의 world 좌표계가 달라질 것이고 그것을 일치시켜서 이전 ego vehicle 기준의 grid와 동일하게 맞춰줍니다.

 

 

하지만 t-1부터 t까지 이동 가능한 object는 다양한 offset을 가지고 이동하게 됩니다.

내가 이동한 방향과 다른 방향으로 가거나 image 상의 object들이 각각 다른 방향, 속도로 움직이기 때문에 다양한 offset을 가지고 이동한다고 표현한 것 같습니다.

 

 

따라서 다른 시간의 BEV feature 간에 동일한 객체에 정확히 짝짓는 것이 어려운 문제가 됩니다. 이 문제를 Temporal self-attention(TSA)를 이용해서 feature 간에 시간적인 연결을 해주게 됩니다. 즉 이전 timestamp의 BEV feature와 현재 시점의 query 간에 어떤 객체가 동일한 객체인지 시간적으로 연결을 해주는 역할을 하게 됩니다. 식은 아래와 같습니다.

$TSA(Q_p,\{Q, B'{t-1})= \sum{V \in \{Q, B'_{t-1}\}}DeformAttn(Q_p, p, V)$t-

 

 

 

Temporal self-attention은 이전 시점의 BEV feature과 self-attention을 진행하기 때문에 첫 번째 sample의 경우에는 이전 시점의 feature가 존재하지 않습니다. 따라서 첫 sample의 경우에는 temporal 정보가 없이 그냥 지금 시점의 BEV query를 가지고 self-attention을 진행합니다. 이런 temporal self-attention은 간단하게 BEV를 쌓아 올리는 방식과 비교하였을 때 더 적은 computational cost와 방해가 되는 정보를 덜 만들어 내서 효율적이라고 합니다.

 

 

 

Applications of BEV Features

자율 주행 perception 분야에서 다양하게 쓰일 수 있는데요, head와 약간의 수정만 있으면 3D object detection, map segmentation에 모두 쓰일 수 있습니다.

 

 

 

Implementation Details

 

Training Phase

현재 시점 t의 sample에서 지난 2초 동안의 연속된 sequence에서 서로 다른 3개를 random 하게 sampling을 합니다. 이런 random sampling은 ego-motion의 다양성을 augment 하는 전략으로도 사용됩니다. 여기서 sampling 한 3개의 timestamp를 t-3, t-2, t-1로 표현합니다.

 

 

앞서 말했듯 $B_{t-3}$ 은 이전의 BEV feature가 없으므로 그냥 self-attention을 진행하게 됩니다. attention layer를 거치게 되면서 $B_t$ 는 t-3, t-2, t-1, t 총 네 개의 timstamp에 존재하는 temporal, spatial 정보가 담겨있게 됩니다. 최종적으로 BEV feature $B_t$ 를 detection & segmentation head를 통과시켜 loss를 계산하게 됩니다.

 

 

 

Experiments

 

Experimental Settings

backbone으로 두 가지를 사용하였는데 ResNet101-DCN (FCOS3 D checkpoint), VoVnet-99 (DD3D checkpoint)입니다. FPN을 사용하였고 이때 크기는 $\{\frac{1}{16}, \frac{1}{32},\frac{1}{64}\}$ 를 가지고 C = 256로 설정하였습니다.

 

 

 

3D Object Detection Results

BEVFormer-S는 temporal self-attention의 효과를 보기 위해서 그냥 일반적인 self-attention으로 진행한 모델을 의미합니다.

 

 

 

Multi-tasks Perception Results

 

 

Visualization

마지막으로 appendix에 나와있는 visualization 몇 개를 보고 끝마치겠습니다.

 

728x90
반응형