[ICCV 2023] VAD: Vectorized Scene Representation for Efficient Autonomous Driving

Introduction

자율주행을 하기 위해서는 먼저 주변의 환경을 인식하고, 미래의 움직임을 예측하고, 이를 토대로 내가 어떻게 갈지 계획해야합니다. 이 논문 이전에 유명한 자율주행 방법론을 한번 살펴봅시다(UniAD, CVPR 2023 Best paper).
UniAD는 4개의 모듈(Tracking, Mapping, Motion, Occupancy)와 Planning 모듈을 합쳐 End-to-End로 다음 궤적을 예측합니다. 눈여겨봐야할 점은 UniAD는 Occupancy map을 Rasterized 방식으로 처리한다는 것입니다. Rasterized는 공간은 grid로 나누고 각 셀마다의 값을 채우는 방식입니다. UniAD는 BEV 공간은 200×200의 grid로 나누고, 해당 공간이 주행가능한지, 차선인지, 점유되었는지 map을 만들어서 사용합니다. 이는 좋은 성능을 낼 수 있지만 당연히 연산량을 많이 필요하고, UniAD는 1.8FPS라는 느린 성능을 보입니다.

VAD의 저자는 이 부분을 지적합니다. Rasterizing을 하는 것이 문제라고 얘기합니다. Rasterizing을 하면 위에서 얘기한 연산량 문제와 instance-level structure 정보를 놓칩니다. 그래서 저자는 해결책으로 scene을 vectorization해서 표현합니다. 이러한 vectorized map은 도로의 정보를 표현가능하고 궤적을 찾을 때 경우의 수를 횔씬 줄여줍니다. 그리고 agent(이동가능한 객체)들의 충돌 역시 표현가능합니다. 이처럼 필요한 것들은 전부 가능하면서 연산 효율적이라고 주장합니다.


Methods

먼저 전반적인 파이프라인을 설명하겠습니다. 입력은 multi-frame + multi-view입니다. VAD는 먼저 이미지들을 BEV feature으로 인코딩합니다. 그리고 VAD가 agent query와 map query를 이용해서 이동가능한 물체들을 파악하고, 도로 상황을 파악합니다. 그리고 Ego Query를 Query로 agent/map query를 key, value로 Cross attn하는 planning transformer를 통해 최종적인 궤적을 산출해냅니다

Vectorized map

먼저 vectorized map 만드는 과정입니다. map query(Q_m)가 BEV feature map에 query하여 이를 벡터화된 정보로 표현합니다. \mathcal{R}^{N_{m} \times N_{p} \times 2} 이때 N_m, N_p는 각각 예측된 map vector의 수, 각 map vector의 point 수 입니다. 벡터들은 3가지 카테고리로 구분됩니다 1. lane divider 2. road boundary 3. pedestrian crossing. 이는 같이 예측되는 class score로 구분할 수 있습니다. 코드를 보면 map query들은 self attn, cross attention 후 MLP를 통과하여 위 값들을 내놓습니다.

Vectorized agent motion

다음은 agent motion 역시 vector로 표현해야합니다.(agent motion이란 주변 동적 객체들의 미래 궤적). 먼저 agent query가 deformable attention으로 BEV에서 agent 특징을 추출하고, MLP head가 위치, 종류, 방향을 decoding합니다. 현재는 각 agent가 자기 자신에 대한 정보만 가지고 있습니다. 하지만 미래 궤적을 알기위해서는 agent끼리 정보를 교환해야합니다. 이를 위해 agent-agent과 agent-map간의 attention을 진행합니다. 이렇게 정보를 교환한 후 MLP를 통해 motion을 출력합니다.

Planning Via Interaction

이렇게 vector화된 map과 agent motion을 얻었습니다. 그러나 우리가 알아야할건 결국 현재 자기자신이 다음에 어디로 가야할지 입니다. 그러나 map과 agent motion은 전역적인 정보입니다. 이를 ego query를 통해서 다음 우리 궤적을 위해 필요한 정보만 추출해줍니다. 이때 추출방식은 ego query는 attention의 query로, 그리고 map/agent query를 attention의 key/value로 취하여 정보를 Cross attention으로 추출합니다.

Planning Head

planning할때는 바로 위에서 만든 ego query 1(map query와 상호 작용한)과 ego query 2(agent query와 상호 작용한)을 가지고 있고, 현재 차가 어디로 가야할지에 대한 정보 c도 추가적으로 주어집니다. 이 c는 아주 간단한 방향 지시로 turn left, turn right, go straight로 구분됩니다. 그리고 s_{ego}는 optional한 정보로 현재 차의 상태에 대한 정보입니다.

Vectorized Planning Constraint

위와 같은 벡터화된 궤적 학습만으로는 충돌하면 안된다나 도로를 벗어나면 안된다를 충분히 학습하지 못합니다. 그래서 VAD는 추가적인 3개의 규제화를 적용하여 이러한 문제들을 처리합니다.

Ego-Agent Collision Constraint

먼저 내 차량이 다른 agent와 충돌하지 않아야 합니다. 이를 위해 ego의 planning waypoint와 다른 agent의 예측 waypoint를 같은 미래 시점끼리 비교합니다.
비교 대상은 두 번 걸러집니다. 먼저 confidence가 낮은 agent 예측을 threshold \epsilon_a로 제거하고, multi-modal 예측 중에서는 가장 confidence가 높은 궤적 하나만 사용합니다.
충돌을 피하려면 방향별로 다른 안전거리가 필요합니다. 옆 차선에 나란히 달리는 것은 정상이지만, 앞차와 가까운 것은 위험하기 때문입니다. 그래서 횡방향(좌우) \delta_X와 종방향(앞뒤) \delta_Y를 비대칭으로 설정합니다(각각 1.5m, 3.0m).
각 미래 timestep에서 범위 \delta_a 내의 최근접 agent를 찾고, 방향별 거리 d^i_a가 threshold보다 가까우면 침범한 만큼 벌점을 줍니다:

\mathcal{L}^i_{\text{col}} = \max(0,\ \delta_i - d^i_a)

이 loss는 학습 시에만 작동하는 soft penalty로, threshold 안으로 들어온 waypoint를 agent 궤적으로부터 밀어내는 gradient를 만듭니다.

Ego-Boundary Overstepping Constraint

그리고 차랑이 도로 경계쪽으로 가면 안됩니다. 이를 위해 경로를 주행가능한 쪽으로 밀어주는 규제화가 필요합니다.
먼저 이번에도 confidence가 낮은 map 예측을 걸러냅니다. 그리고 미래 시점에서 plan한 waypoint와 가장 가까운 map boundary line과의 거리 d_{bd}^t를 계산합니다. 그리고 이를 아래 수식에 대입하여 규제를 줍니다.

Ego-Lane Directional Constraint

이것 역시 간단한 개념입니다. 차량의 motion 방향은 lane의 방향과 다르지 않습니다. 이 사실을 규제화로 사용합니다. 먼저 confidence가 낮은 map 예측을 걸러냅니다. 그리고 우리 미래 시점 waypoint와 가장 가까운 도로 구분선을 찾습니다. 최종적으로 lane vector와 ego vector 사이의 각도 차이를 loss로 사용합니

End-to-End Learning

Vectorized Scene Learning Loss

이미지를 vectorzied map과 vectorized motion prediction을 하기 위해서는 loss가 필요합니다. Map learning을 위해서는 Manhattan 거리를 이용하여 GT map point와의 차이를 loss로 사용합니다. 반면 classification 예측을 위해서는 focal loss를 사용합니다. Motion prediction을 위해서는 L1 loss를 사용합니다. 그리고 마찬가지로 focal loss를 이용해서 agent의 class를 예측합니다.
그리고 각 agent는 Nk개의 미래 궤적을 예측합니다. 각 궤적의 minFDE를 계산하여 가장 작은 것을 선택합니다. 골라진 궤적과 GT 궤적간의 오차를 L1 loss로 구하여 학습에 사용합니다.

Imitation Learning Loss

이 loss는 궤적을 잘 따라가는 채점하는 loss입니다. 예측한 궤적과 GT 궤적의 차이를 L1 loss로 계산하여 학습에 사용합니다.

Total Loss

위에서 쭉 나열했듯이 VAD는 많은 loss를 사용합니다. 수식으로 표현하면 아래와 같습니다.


Experiments

실험은 open-loop는 nuScenes에서 진행하였습니다. 1000개의 주행 장면이 있고, 각 장면들은 20초 정도의 분량입니다. nuScenes는 23개의 카테고리에 대해 3D BBox를 제공하고, 6개의 카메라가 있어 360도를 전부 커버합니다.
그리고 close-loop로 CARLA simulator와 Town05 benchmark를 사용합니다.

Open-loop 평가

VAD는 성능과 속도면에서 SOTA를 달성했습니다. VAD-Base로도 UniAD의 절반 정도의 추론속도를 달성했습니다. 그리고 성능에서도 대부분의 지표에서 가장 높은 것을 볼 수 있습니다(VAD-Base). UniAD는 다양한 auxiliary task를 예측해야하고 tedious한 전처리 과정이 필요하므로 느리다고 저자는 주장하고 있습니다. 맨 아래 회색 부분은 차량의 현재 상태(ego status)를 넣어준 결과입니다. Ego status를 넣어주면 shortcut에 빠지기 때문에 따로 빼놓았습니다.

Close-loop 평가

Metric RC(Route Completion)는 경주는 완료한 퍼센테이지, DS(Driving Score)는 RC에 위반 페널티를 곱한 것입니다.
VAD는 vision-only E2E planning 방법론들을 압도합니다. ST-P3와 비교했을때 DS가 많이 오르는 것을 볼 수 있습니다. ST-P3는 Long에서 RC는 높지만 DS는 낮습니다. 이는 위반을 반복하면서까지 완주를 위해 달린다고 보면 됩니다. 반면 VAD는 RC도 비슷한 반면 DS는 ST-P3와 비교하면 3배 정도로 높습니다. 그리고 Lidar를 사용한 Transfuser과도 일부를 제외하고는 더 높은 것을 볼 수 있습니다.

Ablation Study

위 table은 수많은 loss들이 결국 도움을 주는가?에 대한 실험입니다. 먼저 map은 planning에 핵심적인 가이드를 제공하기에, ego-map 상호작용(ID1)를 빼면 L2 오차가 많이 오릅니다. 그리고 ego-agent/ego-map 상호작용은 ego query에 implicit한 장면 정보를 채워주는 역할이라(ID2) Collision이 크게 오르는 것을 볼 수 있습니다.
ID3는 constrain들을 뺀 실험입니다. 그리고 이는 Collision이 크게 올립니다. 결국 implicit한 벡터 학습만으로 충돌을 해결할 수 없고, 위에서 저자가 주장한 휴리스틱한 규제화가 기하학적 이해를 위해 필수적임을 증명합니다.

Author: 김 정우

Leave a Reply