: image, lidar 둘 중에 하나만 사용하는 모델이 지금까지 E2E Driving에서 좋은 결과를 보여줌
limited dynamic agents 길거리에 움직이는 차나 사람이 별로 없거나, 움직임이 뻔함
Near-ideal behavior 주변 차들이 신호를 완벽히 지키고, 갑자기 끼어들지 않는 상황 (이상적인 환경이라는 뜻)
그래서 CARLA에서 Adversarial Scenario 추가함
Vehicles running red lights
Uncontrolled 4-way intersections
Pedestrian emerging from occluded regions
이러한 환경에서 Single modal들의 성능이 매우 낮게 나오게 됨
image-only: 3D information의 부족
lidar-only: 색 구분 못함 (신호위반의 문제)
Multi modal
: 한 가지 데이터를 사용하는 방식보다 성능이 좋긴 함
도심 속 운전 같은 복잡한 상황에서는 주행이 힘듦
각 데이터 별로 feature map을 추출하면 feature 추출 과정에서 global context가 떨어짐
Transfuser
: image, lidar의 feature를 추출하는 과정에서 Transfomer를 이용해 global context를 모두 고려할 수 있음
Input and Output Parameterization
Input Representation
Camera image (3대, 좌측-전방-우측) 960x480 pixel의 해상도를 가진 image를 310x160 pixel로 crop해서 입력 (이미지 외곽의 왜곡을 없애기 위함) 왜곡이 제거된 3장의 image를 하나로 composed == 132도의 FOV을 가진 단일 이미지로 입력 == 704x160x3 size data
LiDAR point cloud (360도) point cloud data 중에 자동차 전면 32m, 좌우 측면 각 16m, 총 32mX32m 영역 사용 한 셀당 (0.125mX0.125m)로 256x256 data로 변환 높이에 관한 dimension은 ground plane으로부터 위 또는 아래로 분류해서 2개의 channel을 갖도록 함 여기에 2D Goal location을 같은 256x256 BEV 공간에 그려 하나의 channel로 concatenate == 256x256x3 size data (LiDAR 2channel & Goal 1channel)
Output Representation
자동차의 경로를 자동차 위치를 원점으로 삼아 BEV space에 waypoint를 출력함. 논문 저자는 T=4를 사용, 총 4개의 watpoint 출력
TransFuser Architecture
Key idea: self-attention mechanism of transformer (image, lidar의 global context 추출)
각각의 image와 lidar data에서 CNN(ResNetY)에 통과시켜 feature map을 추출함
해당하는 feature map을 downsample (Average Pooling) == 초기 layer의 feature map을 넣으면 transformer에 적용하면 연산량이 많기 때문
압축된 feature map을 Transformer의 input으로 넣음
Transformer의 output을 원래 resolution으로 upsample해서 원래 feature map에 element-wise summation함
위 과정을 총 4가지 resolution으로 진행하면 각 branch에서 image: 22x5x1512 // lidar: 8x8x1512 크기의 tensor 나옴
Average Pooling + FC 과정을 통해 512차원으로 만들고 각 branch에서 output vector를 element-wise summation함
* element-wise summation: 똑같은 좌표(위치)에 있는 숫자들끼리 1:1로 더해주는 연산
Transformer
down sampling을 통해 만들어진 22x5(image), 8x8(lidar) feature map을 flatten(174)함
posithion embedding을 통해 각 token 간의 위치 정보를 추가함
자동차의 현재 주행 속도를 MLP에 통과시켜 임베딩 벡터로 변환한 뒤, 이를 시퀀스에 추가로 더해줌. (이로써 모델이 현재 속도에 맞춰 동적으로 Attention함.)
이후 self-attention 계층에 넣음으로써 서로 정보 교류함 (Global context 파악)
self-attention을 통해 나온 토큰을 다시 image, lidar로 쪼갬
원래 형태인 22x5(image), 8x8(lidar)로 Reshape함
이를 해당 layer의 원래 resloution으로 upsampling하여 element-wise summation
Waypoint Prediction Network
MLP : TransFuser로부터 나온 output인 512 featuer vector를 MLP에 넣어 64차원으로 만듦 (연산 효율성을 위함)
GRU : 자동차의 current position과 goal location이 input임 gps 단위로 자동차의 위치를 (0, 0)으로 두고 계산함
GRU의 hidden state는 MLP에서 얻은 64차원의 feature vector로 초기화 함 (context를 통해 좌표로 번역을 해주는 역할)
Controller
Auxiliary Task
: 4개의 보조 학습을 통해 interpretable하고 외부 변수에 강인하게 대응하도록 함
2D Depth and Sementics
Image Branch의 단점인 Depth가 존재하지 않는 점과 pixel 의미를 부여하는 과제
Depth : L1 Loss, 2D image만 보고도 Depth 추정을 잘 하도록 훈련함
Sementics : Cross-entropy Loss, class 중 어디에 속하는지 Classes: (1) unlabeled, (2) vehicle, (3) road, (4) red light, (5)pedestrian, (6) lane marking, and (7) sidewalk
HD map
LiDAR (BEV Branch) data로부터 차가 갈 수 있는 영역을 구분하는 과제
BEV space 위에 Road, Lane, Other라는 3가지 channel의 map을 그리게 함
256x256 resolution 그대로 지도를 그리게 되면 연산량이 너무 많아지기 때문에
64x64 크기의 HD map에 구분하도록 함, Cross-entropy Loss
Bounding Boxes
CenterNet의 decoder 구조를 가져와, BEV 공간에서 주변 차량들의 위치, 방향, 크기를 찾아냄
Position Map bbox 대신, 차량의 center를 가우시안 형태로 찍어냄, Focal Loss
Twp-stage Orientation 360도를 한 번에 맞추는 건 어려워서 30도씩 12등분한 방향 중 어느 방향인지 찍게 함 (Coarse classification, Cross-entropy Loss) 이후 각도를 조정함
Regression Map HD map 때 줄인 resolution 때문에 pixel 위치 오차가 발생할 수 있음 (Quantization error) 이를 Regression Map에서 교정하고, 차량의 실제 크기까지 뽑아냄, L1 Loss
Metrics
RC(Route Completion) : 주행 경로를 몇%나 주행 했는지 나타내는 수치
DS(Driving Score) : (RC X Infraction multiplier)
Infraction multiplier : 충돌, 차선 침범, 신호 위반 등을 설명한 수치
- Scenario - Town - Route - rgb: camera images - depth: corresponding depth images - semantics: corresponding segmentation images - lidar: 3d point cloud in .npy format - topdown: topdown segmentation maps - label_raw: 3d bounding boxes for vehicles - measurements: contains ego-agent's position, velocity and other metadata