Paper/3D

[논문 리뷰] MotionNet: Joint Perception and Motion Prediction for Autonomous Driving Based on Bird’s Eye View Maps

shvtr159 2022. 3. 25. 16:55

1. Introduction


이전까지 일반적으로 주변 환경에 대한 추정은 (1) perception : background에서 foreground를 구분해내는 작업, (2) motion prediction : object의 미래 trajectory를 예측하는 작업, 이 두가지 작업을 독립적으로 또는 동시에 처리할 수 있는 방법들이 발전해왔습니다. 

기존 주변 환경 인식 방법은 주로 카메라를 이용한 2D object detection, LiDAR를 이용한 3D object detection, 여러가지를 동시에 사용하는 fusion-based detection 방법을 기반으로 bounding box를 찾고 이 bounding box를 기반으로 motion prediction을 수행하였습니다. 그러나 이 방법은 training set에서 보지 못한 class를 detection 하기 어렵고(generalization 문제), detection 하지 못한 object는 motion prediction도 수행하지 못한다는 단점이 있습니다.

이러한 문제를 해결하기 위해 MotionNet은 BEV 기반의 표현을 사용하고, 이 BEV의 시간적 시퀀스를 기반으로 BEV의 각 cell의 category와 motion 정보를 찾습니다. 또, bbox를 사용하지 않고, 객체 인식을 위해 motion 정보를 사용할수도 있습니다. MotionNet의 기여를 요약하면 다음과 같습니다.

  • BEV 맵을 기반으로 하여 bounding box 없이 perception과 motion prediction을 동시에 수행합니다.
  • Hierarchical한 방식으로 시공간 feature를 추출하기 위한 spatio-temporal pyramid network(STPN)을 제안합니다. 저자는 이 구조가 가볍고 매우 효율적이라고 주장하였습니다.
  • 네트워크 학습을 위해 공간 및 시간 consistency loss를 개발하여 prediction이 부드럽도록 합니다.

 

2. Metholody


MotionNet은 다음 3개의 pipeline을 포함한다.

  1. Raw 3D point cloud를 BEV map로 변환하여 data 표현.
  2. Backbone 네트워크인 spatio-temporal pyramid network.
  3. Grid cell classification과 motion prediction을 위한 task 별 head.

Overview of MotionNet

2.1 Ego-motion compensation

Input은 3D point cloud의 sequence로 원본 point cloud frame들은 각각 local coordinate system으로 이루어진다.  모든 과거 프레임을 현재 프레임과 동기화해야 AV의 ego-motion을 없앨 수 있다. 즉, 좌표 변환을 통해 현재 자차(ego-vehicle)를 기준으로 설정된 모든 point cloud 좌표들을 하나의 기준 좌표계로 registration 한다. 이것은, 눈에 띄는 움직임의 추정을 회피하는 데 있어서 매우 중요합니다. 또한 정적 배경에 대한 더 많은 포인트를 집계하는 동시에 움직이는 물체의 움직임에 대한 단서를 제공한다.

2.2 BEV-map-based representation

image와 다르게 point cloud는 sparse하고 irregular하기 때문에 기존에 쓰던 convolution 방법을 그대로 사용할 수 없다. 때문에 본 논문에서는 2D convolution을 사용하기 위해 point cloud를 BEV로 변환하여 사용하였다. 변환 방법은 다음과 같다.

먼저 3D point cloud를 voxel에 할당한다. 이전 voxelize 방법은 주로 PointNet을 통해 각 voxel 안의 point 분포를 high level의 feature로 인코딩 한 것과는 달리, 단순히 voxel 내에 point가 존재하는지 or 존재저녀하지 않는지만을 나타내는 이진(binary) 상태를 사용한다. 그 후 height 차원을 image에서의 channel dimension처럼 사용하여 3D voxel을 2D pseudo-image로 사용한다. 즉, voxelize하며 생긴 ground의 grid가 pixel과 같고, 그 pixel 위에 있는 voxel들의 이진 상태들이 color image의 RGB와 같은 channel 역할을 하게 되는 것이다. 이렇게 생성된 2D pseudo-image인 BEV map에 2D convolution을 수행할 수 있다. 이 방법은 2D convolution을 이용할 수 있으므로 3D voxel이나 raw point cloud같은 이전 방식에 비해 매우 효율적이다. 

2.3 Spatio-temporal pyramid network

Input이 사실상 2D pseudo-image이므로 기존의 동영상 분류 방법을 따라 2D convolution을 사용한다. 목표는 현재 시간에서 각 BEV 격자(lattice) cell의 class를 분류하고 미래의 위치를 추정한다. 여기서 2가지 문제점을 해결해야한다.

  1. temporal feature를 언제, 어떻게 집약(aggregate)할 것인지
  2. dense한 예측 task에서 local과 global context를 모두 캡쳐하는데 필수적이라고 여겨지는 다중 스케일 spatio-temporal feature를 얻는 방법.

이 2 문제점을 해결하기 위해 Spatio-Temporal Pyramid Network(STPN)을 제안한다. 이 네트워크는 계층적(hierarchical)한 방법으로 시공간 두 차원에서 feature를 얻어낸다. 이 네트워크의 기본 구성 요소는 Spatio-Temporal Convolution(STC) 블록으로 각 STC 블록은 시공간 feature를 얻기 위해 standard 2D convolution에 이어 degenerate 3D convolution으로 구성된다. 3D convolution의 커널 크기는 \(k\times 1 \times 1\)이고, 여기서 \(k\)는 temporal 차원이다. 이 3D 필터는 pseudo-1D convolution으로 모델의 복잡성(complexity)를 줄일 수 있다.

Spatio-temporal pyramid network 구조

multi-scale feature 학습을 더 잘 하기위해 STPN은 STC 블록으로 공간(spatial)과 시간(temporal) 차원에 걸쳐 feature hierarchy를 계산한다. 특히 spatial dimension에서는 2배씩 scaling되며 여러 scale에서 feature map을 계산한다. 이와 유사하게 temporal dimension에서는 각 temporal convolution 후에 점차적으로 temporal resolution을 감소시키며(\(T_1\geq T_2\geq T_3\geq T_4\)) 다른 scale의 temporal semantic을 얻는다. 이렇게 서로 다른 level에서 얻어진 spatio-temporal feature들을 합치기 위해 global temporal pooling을 수행하여 salient temporal feature를 추출하고, lateral connection을 통해 feature decoder의 upsampled layer에 전달한다. 이러한 구조는 local 및 global spatio-temporal context의 flow를 촉진(encourage)하여 dense prediction task에 도움이 된다. STPN의 전체적인 구조는 2D와 pseudo-1D convolution만으로 구성되기 때문에 매우 효율적이다.

2.4 Output heads

최종 output을 위해 MotionNet은 총 3개의 head를 사용한다. 3개의 haed는 2 layer의 2D covolution으로 구현하였다.

  • Cell-classification head

BEV map segmentation과 각 cell의 category를 인식한다. output은 \(H\times W\times C\)로 이때 \(C\)는 cell category의 개수이다.

  • Motion-prediction head

미래의 cell position을 예측한다. 예측된 cell position은 \(\{X^{(\tau)}\}^{t+N}_{\tau=t}\)과 같이 표현된다. 이때 \(X^{(\tau)}\in \mathbb{R}^{H\times W\times2}\)이고 이는 시간 \(\tau\)에서의 위치이고, \(t\)는 현재, \(N\)은 미래 frame 수를 나타낸다. 그 결과 output 의 shape는 \(N\times H \times W \times 2\)이다. 

  • State-estimation head

각 cell의 motion status(static 또는 moving)를 예측하고 motion prediction을 위한 보조 정보를 제공한다. output의 shape는 \(H\times W\)로 각 element는 static할 확률을 나타낸다.

Motion-prediction head는 regression loss(e.g.,smooth L1)을 통해 학습시킬 수 있다. 그러나 미래 cell의 위치를 naive하게 regression 하는 것은 static cell들에 오류를 만들 수 있다. 예를 들어, cell이 background로 분류되더라도 조금 움직일 수 있다. 이 문제를 해결하기 위해 다른 두 haed의 출력을 사용해서 예측된 cell trajectory들을 regularize한다. 구체적으로 background로 예측된 cell에 대한 motion의 threshold를 설정하여 해당 motion estimation 결과를 0으로 한다. 또, 주차된 차와 같은 static foreground는 state-estimation head의 결과를 이용해 static cell의 motion을 thresholding하여 jitter의 영향을 억제한다.

Remarks

Bounding-box 기반 방법과 비교했을 때, 위와 같은 design은 training set에서 보지 못한 객체를 더 잘 인식할 수 있도록 한다. 직관적으로 다음 3가지의 장점을 확인할 수 있다.

  1. Bounding-box 기반 방법은 ROI global shape/texture 정보를 사용하여 객체를 찾아낸다. 그러나 이는 객체의 category에 따라 다르고, 보았던 객체만을 기반으로 보지 못했던 객체까지 일반화하기 어렵다. 그러나 MotionNet의 design은 ROI들을 grid cell들로 분해하고, 각 cell에서 많은 객체 category들이 공유하는 local 정보를 얻어낸다.
  2. Bounding-box 기반 방법은 객체 제안(proposal)과 NMS(Non-Maximum Suppression)를 사용하여 불확실한 detection 결과들을 없앨 수 있다. 반면에 MotionNet은 모든 occupied cell들에 대해 예측을 한다.
  3. MotionNet에 의해 활용된(leverage) Temporal 정보는 객체의 존재와 그 motion에 대한 단서를 제공해준다.

2.5 Loss function

먼저, 3개의 head과 관련된 loss가 동시에 최소가 되도록 network를 학습시킨다. Cell-classification 과 state-estimation head는 class imbalance 문제를 해결하기 위해 각 category term마다 다른 weight가 할당되는 cross-entropy loss를 사용한다. motion-prediction head는 classification head의 같은 specification에 따라 weight가 결정되는 weighted smooth L1 loss를 적용한다. 그러나 위 loss들은 network 학습을 global하게 regularize할 수 있을 뿐 local의 spatial, temporal consistency를 보장할 수 없다. 이 단점을 해결하기 위해 아래 추가적인 loss를 사용한다.

  • Spatial consistency loss

일반적으로 생각했을 때, 같은 rigid object에 속하는 cell의 경우 예측된 motion은 거의 같아야 한다. 이를 적용하기 위해 다음과 같은 spatial consistency loss를 통해 예측된 motion을 제한(constrain)한다.

$$L_s=\sum_{k}\sum_{(i,j),(i',j')\in o_k}\left\|X^{(\tau)}_{i,j}-X^{(\tau)}_{i',j'} \right\|$$

\(\left\|\cdot\right\|\)은 smooth L1 loss, \(o_k\)는 \(k\)번째 object instance, \(X^{(\tau)}_{i,j}\in \mathbb{R}^2\)은 위치 \((i,j)\)에 시간 \(\tau\)에서 예측된 motion이다. 그러나 모든 \(X^{(\tau)}_{i,j},X^{(\tau)}_{i',j'}\)쌍을 계산하는 것은 computation cost가 매우 크기때문에 index 상 인접한 두 위치를 포함하는 쌍의 subset만 고려한다.

  • Foreground temporal consistency loss

위 spatial consistency loss와 유사하게 local time window에 temporal constraint을 사용할 수 있다. 각 object들은 연속된 두 frame에서 급격한 움직임의 변화가 없다고 가정하여 다음과 같은 Loss를 사용할 수 있다.

$$L_{ft}=\sum_{k}\left\|X^{(\tau)}_{o_k}-X^{(\tau+\Delta t)}_{o_k}\right\|$$

\(X^{(\tau)}_{o_k}\in \mathbb{R}^2\)은 object \(k\)의 전체 motion이고, 이 평균 motion은 \(X^{(\tau)}_{o_k}\sum_{(i,j)\in o_k}X^{(\tau)}_{i,j}/M\) (\(M\)은 \(o_k\)에 속한 cell의 개수)로 계산된다.

  • Background temporal consistency loss

\(L_{ft}\)는 vehicle과 같은 foreground object들에만 적용되고 background cell은 고려되지 않는다. 이 약점을 해결하기 위해 또다른 temporal loss를 적용한다.

$$L_{bt}=\sum_{(i,j)\in X^{(\tau)}\;\cap \;T(\tilde{X}^{(\tau - \Delta t)})}\left\|X^{(\tau)}_{i,j}-T_{i,j}(\tilde{X}^{(\tau-\Delta t)})\right\|$$

\(X^{(\tau)}, \tilde{X}^{(\tau)}\)는 각각 현재 time이 \(t, t+\Delta t\)인 prediction이고, \(T\in SE(3)\)는 \(\tilde{X}^{(\tau-\Delta t)}\)를 $X^{(\tau)}$에 align하는 rigid transformation이다. \(T\)는 ground-truth ego motion이나 ICP와 같은 registration 알고리즘을 통해 구할 수 있다. \(\tilde{X}^{(\tau - \Delta t)}\)는 discrete grid이므로 transform 된 결과는 cell에서 interpolate 된다. 이 transformation을 적용한 뒤 \(T(\tilde{X}^{(\tau - \Delta t)})\)는 주로 background인 \(X^{(\tau)}\)의 static cell과 overlap 된다. 이 loss를 최소화해서 network가 overlap된 영역에 대해 일관적인 결과를 내도록 하고, 그 결과로 시간적으로 smooth한 예측을 할 수 있다.

요약된 전체 loss function은 다음과 같다.

$$L=L_{cls}+L_{motion}+L_{state}+\alpha L_s +\beta L_{ft}+\gamma L_{bt}$$

\(L_{cls}, L_{motion}\)은 cell-classification과 state-estimation head의 cross-entropy loss이고, \(L_{motion}\)은 motion-prediction head의 smooth L1 loss, \(\alpha, \beta, \gamma \)은 balancing factor이다. \(L\)은 여러개의 task를 포함하므로 multi-objective 최적화 framework를 이용해 최소화할 수 있고, 이는 task간의 trade-off를 adaptive하게 할 수 있다. 

 

3. Experiments


  • Dataset

본 논문에서는 nuScenes 데이터셋을 이용하여 네트워크의 성능을 실험하였다. 그러나 nuScenes 데이터셋은 motion 정보 없이 bounding box만 제공되기 때문에 두 sweep간의 ground-truth cell motion을 따로 계산해야한다. Bounding box에 속한 각 cell에서의 motion은 $\mathcal{R}x+c_{\Delta}-x$로 계산된다. \(x\)는 cell 위치, $\mathcal{R}$는 box center에대한 yaw 회전, $c_{\Delta}$는 box center의 변위(displacement)이다. Bounding box 외부의 cell들은 motion을 0으로 설정한다. 전체 1000개의 scene 중 box annotation을 얻을 수 있는 training set + validation set 850개 scenetraining set 500개, validation set 100개, test set 250개로 나눠 사용하였다. 각 scene은 20Hz Lidar를 이용한 20초 가량의 sequence로 약 400 frame으로 이루어져있다.

또, 각 scene을 짧은 clip으로 나눠 input으로 사용하였다. 불필요한 반복(redundancy)를 을 줄이기 위해 각 clip은 현재 time과 대응되는 keyframe과 keyframe에 동기화된(sunchronized) 4개의 history sweep을 사용한다. Training을 위한 keyframe은 2Hz로 샘플링 하고, validation과 test를 위한 keyframe은 clip간 유사도를 줄이기 위해 1Hz로 샘플링 한다. Clip에서 연속되는 두 frame의 간격은 0.2초이다. Training data는 keyframe clip과는 별도로 현재 time이 $(t+0.05)s$ ($t$:neighboring keyframe의 time)인 clip을 추가로 추출한다. 이러한 추가 clip은 temporal consistency loss들을 계산하기 위해 keyframe clip과 쌍을 이룬다. 요약하면 training clip pair 17,065개, validation clip 1,719개, test clip 4,309개로 구성된다.

  • Implementation details

Point cloud는 X, Y, Z에 대응되는 \([-32, 32]\times [-32, 32]\times [-3, 2]\)m로 정의된 영역 내에 위치하도록 crop된다. 각 voxel의 resolution은 $({\Delta}x,{\Delta}y, {\Delta}z)=(0.25, 0.25, 0.4)$m이다. Temporal 정보는 synchronized된 point cloud 5 frame을 사용한다. 여기서 4개는 과거의 timestamp이고 1개는 현재와 대응된다. Perception은 background, vehicle(차량 및 버스), pedestrian, bicycle 그리고 other로 총 5개의 cell category를 정의한다.

MotionNet의 경우 input은 \(5\times 13\times 256\times 256\)크기의 4D tensor이다. 이 tensor를 STPN에 넣기 전에 먼저 2-layer 2D convolution으로 channel 크기를 32로 높인다. STPN은 STC block1과 2에만 spatio-temporal convolution을 수행하고 feature map을 padding하지 않으며 temporal resolution을 점차 감소시킨다. 논문의 실험에서는 $T_1=5, T_2=3, T_3=T_4=1$로 주어졌다. 그 결과 STC block 3, 4는 일반 2D convolution이 수행된다.

  • Evaluation criteria

motion prediction 결과를 평가하기 위해 cell을 static, slow(\(\leq 5m/s\)), fast(\(>5m/s\))의 3 그룹으로 나눠 평가하였다. 각 그룹에서 예측된 변위와 groun-truth 변위간의 평균 \(L_2\) distance를 계산한다. 이 평균값과는 별도로 중간값도 계산한다. Classification에서 (1) 전체 cell의 평균 정확도인 overall cell classification accuracy(OA)와 (2) 5개 모든 category의 평균 정확도인 mean category accuracy(MCA)의 2가지 metric을 이용해서 성능을 평가한다. 모든 평가는 비어있지 않은 cell만 사용한다.

3.1 Comparison with state-of-the-art methods

Baseline

MotionNet의 결과를 다음 방법들과 비교한다.

  1. Static model : 주변 환경은 static하다고 가정하여 static model과 비교한다.
  2. FlowNet3D와 HPLFlowNet : 두 point cloud간 scene flow 예측 결과를 비교한다. 시간 $t-\delta$부터 $t$에서의 flow $\Delta d$가 주어졌을때, 현재 시간 $t$에서 미래 $t+n\delta$까지의 변화를 $n\Delta d$로 예측할 수 있다.
  3. PointRCNN : raw point cloud로부터 3D object B.B를 예측한다. point cloud sequence에서 B.B를 얻은 후 Kalman 필터를 사용하여 객체를 추적하고 미래 경로를 예측한다.
  4. LSTM-Encoder-Decoder. 다단계 OGM(Occupancy Grid Map)들을 예측한다. Backbone 구조를 유지하면서 MotionNet과 같은 output head를 사용하여 MotionNet의 task에 사용한다.

Results

Perception과 motion prediction 성능 비교. 1초 뒤(20 frame 뒤) 예측 성능을 비교하였다.

3.2 Ablation studies

Number of frames

Motion prediction은 mean error를 계산.

Frame 수가 늘어날수록 computation cost도 늘어나지만 성능도 향상시킬 수 있다. 그러나 5개보다 많은 frame을 사용하면 성능이 크게 증가하지 않는다. 이 accuracy-efficiency trade-off를 고려해 5개의 frame을 사용하였다.

Ego-motion compensation

Sweep synchronization의 효과.

Sweep synchronize는 model의 성능에 매우 큰 영향을 준다. 이는 ego-motion compensation의 중요성을 보여준다.

Input data representations

Input data representation 비교 결과.

더 좋은 geometric information을 포함하는 voxel이나 pillar를 사용한 결과를 비교하였다. 또, detail한 shape의 효과를 알아보기 위해 resolution을 바꿔서도 실험하였다. 표에서의 $(0.5, 0.5, 0.5)\Delta =$ $(0.5\Delta x, 0.5\Delta y, 0.5\Delta z)$를 의미하며 이는 원래 $\Delta x \times \Delta y$의 영역보다 8배 이상 큰 binary voxel을 생성한다. 실험 결과는 무조건적인 세분화가 성능 향상을 유도하지는 않고, cost를 고려해야한다는 것을 의미한다.

Spatio-temporal feature extraction

Festure fusion 위치와 다른 spatio-temporal covolution 방법과 비교.

먼저 spatio-temporal feature를 다른 시간대에 aggregate하는 다른 두 가지 방법과 비교한다.

  1. Early fusion. 2개의 STC block(Spatial downsampling 없이)을 사용해서 점진적으로 temporal resolution을 낮춘 뒤 temporal convolution을 사용하지 않는 STPN을 사용하는 방법. 즉, $T_i = 1,\, i\in [1,4]$
  2. Late fusion. STPN을 사용하지만 STC block 3과 4에서만 temporal convolution을 수행. 즉, $T_1=T_2=5,T_3=3,T_4=1$

Midle fusion이 성능이 가장 좋다. 그 이유는 early fusion은 temporal receptive field에서 frame간 correlation이 거의 없을 수 있는데 특히 빠르게 이동하는 물체가 이에 해당된다. Late fusion은 너무 많은 low-level motion cue들을 무시하는 문제가 있다.

Prediction strategies

다른 Training과 prediction 방법을 사용한 결과.

(1) 보조 state head 사용 여부. (2) 인접 timestamp간 relative offset 사용 vs target timestamp에서 직접 motion을 regressing. (3~5) Motion Jitter Supression(J.S.)를 위해 classification과 state estimation 결과 사용 여부.

(1) 보조 state head를 사용하면 네트워크 학습에 대한 추가적인 supervision을 가져오고 background jitter를 억제하는데 도움을 줘서 성능이 더 좋아진다.

(2) Relative offset을 사용하는 것이 더 좋다.

(3) Classification과 state estimation 결과는 정확도를 약간 포기하지만 jitter를 크게 억제시키는데 도움이 된다. 

 

잘못된 점이 있을 수 있고 해석에 가깝기때문에 오류나 질문 감사히 받겠습니다.