카메라 리그(Camera Rig)는 여러 개의 카메라가 설치된 시스템을 의미한다. 이 시스템은 주로 자율 주행차와 같은 환경에서 사용된다. Arbitrary camera rigs도 마찬가지로 다양한 구성과 배치로 설치된 카메라 시스템을 의미하는데, 동일하게 여러 개의 카메라가 서로 다른 위치와 방향으로 설치되어, 각기 다른 시점에서 이미지를 촬영하는 환경을 의미한다. 이러한 이미지를 통합하여 차량 주변의 3D 환경을 이해하는 것이 중요하다.
Lift, Splat, Shoot 방법은 이러한 arbitrary camera rigs에서 얻은 이미지를 3D로 재구성하는 데 사용된다. 재구성한 3D Representation을 하나의 bird's-eye-view (BEV) 좌표계로 변환하여 통합한다.
입력 영상의 픽셀 값을 누적하여 특정 직사각형 영역의 합을 빠르게 계산할 수 있는 데이터 구조를 의미한다. 특정 영역의 합을 단순히 몇 번의 덧셈으로 효율적으로 구할 수 있다. 예를 들어, 직사각형 영역 내의 픽셀 합은 해당 영역의 네 꼭짓점에서 계산된 누적값들을 조합하여 빠르게 구할 수 있다.
이 영상을 참고로 이해할 수 있다.
이미지 출처: 논문 Robust BEV 3D Object Detection for Vehicles with Tire Blow-Out
용어 | 설명 |
---|---|
Extrinsic Translation | 카메라가 3D 공간에서 이동한 거리 |
Extrinsic Rotation | 카메라가 3D 공간에서 회전한 정도 |
Image Permutation | 이미지 픽셀을 랜덤하게 섞거나 재배열 |
Image Translation | 이미지 전체를 특정 방향으로 평행 이동 |
Extrinsic Translation
Extrinsic Rotation
Image Permutation
Image Translation
이 논문의 핵심 기여를 이해하기 위해서는 다음 네 가지 변환과 그에 따른 모델의 특성을 이해해야 한다.
이러한 특성은 모델이 각각의 변환에 대해 얼마나 안정적으로 작동하는 지를 보여주는 중요한 지표이다. "Invariance"는 변환에도 결과가 불변함을, "Equivariance"는 입력의 변환이 출력에도 일관되게 반영됨을 의미한다.
변환 유형 | 유지되는 성질 | 의미 |
---|---|---|
Extrinsic Translation | Rough Equivariance | 카메라 위치가 바뀌어도 BEV 표현이 크게 왜곡되지 않음 |
Extrinsic Rotation | Rough Equivariance | 카메라가 회전해도 BEV 표현이 어느 정도 일관성을 유지 |
Image Permutation | Exact Permutation Invariance | 카메라 이미지 순서가 바뀌어도 BEV 표현이 동일 |
Image Translation | Rough Invariance | 이미지가 픽셀 단위로 이동해도 BEV 표현이 크게 영향을 받지 않음 |
이 개념이 중요한 이유는 자율주행 환경에서는 차량이 계속 이동하고 회전하기 때문에 같은 환경을 다양한 위치에서 바라볼 수 있어야 한다. 모델이 이런 변화를 고려하지 못한다면, 같은 장면을 다른 방식으로 해석하는 오류가 발생할 수 있다. 따라서 모델이 Isometry Equivariance를 가지면 차량의 이동과 회전에 대해 일관된 출력을 낼 수 있다.
예를 들어, 자율주행 차량이 정지 상태에서 BEV를 생성하면 도로와 차선, 차량을 잘 탐지한다. 이때 차량이 앞으로 이동했을 때, 이전 BEV 예측 결과도 동일하게 이동한 형태여야 한다.
LSS 모델은 BEV representation을 만들 때, Lift-Splat pooling을 사용하여 이 성질을 최대한 유지하려고 한다.
결과적으로, 차량이 이동해도 모델의 BEV 표현이 동일한 방식으로 변환되어 차가 움직여도 모델이 같은 방식으로 이해할 수 있도록 만든다.
일반적으로 카메라는 전방(View-Frustum)에서 2D 이미지 데이터를 획득하지만, 자율 주행이나 로봇 비전에서는 주변 환경을 3D로 이해하는 것이 중요하다. 따라서 2D 이미지에서 얻은 정보를 3D 공간으로 변환한 후, 다시 위에서 내려다본 형태(BEV)로 투영하여 표현한다. 이 과정에서 차량, 차선, 보행자, 도로 정보 등을 3D 공간에서 위치 정렬한 후 2D 평면에 투영하여 사용한다.
LSS 논문에서도 (2D → 3D → BEV)의 순서로 BEV Representation을 생성하는데, 아래 이미지를 통해 이해를 도울 수 있다.
HxW size를 가진 2D Image 입력값이 어떻게 BEV가 되는가? 이걸 3단계로 나누어서 설명하고, 그게 이 논문의 제목이다. Lift! Splat! Shooting!
2D 이미지에서 feature을 추출하고 각 픽셀마다 깊이 분포를 추정한다. 이를 통해 2D features를 3D 공간으로 들어올려 Frustum 형태의 3D features point cloud를 생성한다.
여러 카메라에서 생성된 3D Frustum features를 하나의 공통된 BEV 공간으로 Projection한다. 이 과정에서 효율적인 연산을 위해 Pillar Pooling 기법을 사용하여 특징들을 합친다. (Sum pooling이라고 함)
BEV 공간에서 다양한 경로 후보를 Shooting하여 각 경로의 안전성을 평가한다. 이 단계를 자율주행을 위한 모션 플래닝에 활용한다.
LSS는 여러 카메라의 2D 이미지를 효과적으로 3D BEV Representation으로 변환하고, 이를 직접 자율주행 태스크와 연결하는 end-to-end 구조를 제공한다. 여기까지 이 논문의 컨셉을 preview 했다고 봐주시면 좋을 것 같다.
Frustum은 절두체란 이름으로 입체를 절단하는 하나나 두 평행면 사이의 부분이라는 정의를 갖고 있다.
이미지 출처: 절두체 위키백과
Frustum과 BEV 개념을 처음 접하면 되게 생소하게 다가오는데, Frustum-shape Point Cloud는 3D Object detection에서 사용되는 데이터 형태로 카메라의 시야에 기반한 특정 3D 공간 영역이다.
이 영역은 일반적으로 절두체(Frustum) 모양으로 카메라의 시야 각에 따라 가까운 면(Near Plane)과 먼 면(Far Plane)을 잘라낸 피라미드 형태를 가진다.
주로 2D Image에서 객체의 경계 상자를 검출한 후, 이를 3D로 확장하여 Frustum 영역을 설정하게 되는데 이는 2D와 3D 데이터를 연결하는데 중요한 역할을 한다.
이미지 출처: 논문 Frustum PointNets for 3D Object Detection from RGB Data
위 그림을 참고로 하여서 2D 이미지에서 Depth가 추가되어 3D Box 형태가 되었음을 볼 수 있다. LSS 논문에서 Fig. 4에서도 Lift하는 과정이 이에 해당되며 절두체 모양을 볼 수 있다.
다시 정리하면 2D 이미지를 입력으로 받아 깊이 추정(Depth Estimation)을 통해 Frustum-shaped Point Cloud를 생성하였고, 이는 객체 탐지 또는 BEV Presentation 생성에 사용된다.
자율 주행 차량이나 객체가 이동하는 경로를 의미하는데, 어떤 차량이 특정 시점부터 미래의 몇 초 동안 어디로 움직일지 예측하는 것을 의미한다. 자율 주행에서는 차량이 올바르게 주행하기 위해 최적의 trajectory를 찾는 것이 중요한데, 이를 motion planning(경로 계획)이라고 한다.
모델은 여러 개의 가능한 trajectory 후보들을 생성하고, 그중 최적의 경로를 선택한다. 가장 안전하고 효율적인 경로 선택하는 것이 중요하기에 미리 정의된 다양한 궤적 중에서 하나를 선택하는 방식을 사용한다.
Template Trajectory는 미리 정의된 고정된 궤적(trajectory)을 의미한다.
모델이 궤적을 직접 생성하는 것이 아니라, 미리 만들어진 몇 개의 궤적 중에서 선택하는 방식인데, 예시로
이 있다.
자율주행 차량이 완전히 새로운 궤적을 매번 생성하면 계산량이 너무 많아지고 예측이 불안정할 수 있기 때문이다. 따라서 미리 만들어진 여러 개의 가능한 궤적 중에서 하나를 선택하는 방식이 더 효율적이고 안정적으로 볼 수 있는데, 이는 마치 운전자가 운전할 때 미리 정해진 길 중 하나를 선택해서 가는 것과 비슷하다.
Expert Trajectory(전문가 궤적)는 실제 사람이 운전한 데이터에서 얻은 "이상적인" 궤적을 의미한다. 경험이 많은 운전자가 최적의 경로를 따라갔다면, 그 경로를 모델이 학습하도록 하는 것이다.
학습 데이터에 사람이 직접 운전한 궤적(trajectory)이 있으면, 모델은 이 expert trajectory를 학습하면서, 최적의 주행 경로를 예측하도록 훈련된다. 따라서 모델이 나중에 자율주행을 할 때, 사람이 했던 운전 패턴을 참고해서 가장 자연스러운 궤적을 선택한다.
모델이 학습할 때 완전히 랜덤한 궤적을 따르는 것이 아니라 실제 사람이 운전한 궤적을 기준으로 배우기 때문이고, 모델이 자율주행을 할 때 보다 자연스럽고 안전한 주행 경로를 선택할 수 있다.
위에서 설명했듯, 자율주행에서 경로 예측(trajectory prediction)을 하는 방법은 크게 두 가지로 나뉜다.
방식 | 설명 | 장점 | 단점 |
---|---|---|---|
Template Trajectory 선택 | 미리 정의된 여러 궤적 중 하나를 선택 | 빠르고 안정적 | 유연성이 부족할 수 있음 |
직접 궤적 생성 | 모델이 완전히 새로운 궤적을 생성 | 유연함 (어떤 경로든 가능) | 계산량이 많고 불안정할 수 있음 |
LSS 논문에서는 Template Trajectory 방식을 사용하여 모델이 미리 정의된 Trajectory 중에서 가장 적절한 것을 선택하는 방식으로 Motion Planning을 수행한다. 결국 Fixed Template Trajectory도 classification의 Task라 볼 수 있으며, 이 과정 또한 미리 정의된 Trajectory 후보들 중에서 가장 적절한 것을 고르는 것이므로 분류(Classification) 문제로 변환하여 Cost map을 정의하여 최적화하며 학습한다.
Oracle은 실험에서 "항상 올바른 답을 제공하는 가상의 존재"를 의미한다. Oracle 실험은 실제 시스템과 시스템의 특정 구성 요소가 항상 올바르게 작동한다고 가정했을 때의 성능을 비교하는 데 사용된다.
예를 들어, LSS 논문에서는 "Oracle Depth"라는 표현을 사용하며, 이는 LIDAR 포인트 클라우드에서 얻은 실제 깊이 정보이다. 이는 카메라 이미지만으로 깊이를 추정하는 Lift-Splat 모델과 비교하기 위한 "이상적인 기준"으로 사용된다.
이 실험의 주요 목적은
서 이다.
여기까지 BEV Represntation, Motion Planning 등을 위한 기본 개념을 정리하였습니다.
감사합니다.