Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D
Problem
기존의 알고리즘들은 이미지와 동일한 좌표계에서의 결과를 내는 것이 대부분이나 self-driving을 위한 perception에서는 적절하지 않다. 더군다나 서로 다른 좌표계를 갖는 여러 센서로부터 입력이 들어오기 때문에 차량을 기준으로하는 좌표계 기준의 prediction을 해야 한다.
Single-view 패러다임에서 n개 카메라를 사용하는 multi-view 패러다임으로 확장할 경우 다음 3가지 요소가 포함되어야 한다.
- Translation equivariance: 픽셀 좌표계에서 shift가 일어날 경우, output 또한 같은 양만큼 shift 되어야 한다.
- Permutation invariance: n개 카메라 입력의 순서를 바꾸더라도 최종 출력에는 영향이 없어야 한다.
- Ego-frame isometry equivariance: ego car에서 어떤 위치의 카메라에서라도 동일한 객체가 검출되어야 한다.
Essence
이러한 요소들을 만족시키기 위해 end-to-end로 학습할 수 있는 Lift-Splat이라는 모델을 제안하였다.
Lift는 입력된 이미지를 contextual feature를 갖는 frustum-shaped의 point cloud를 생성하여 3D 좌표계로 보내는 알고리즘이다.
Splat은 frustums 결과를 motion planning에 적합하도록 reference plane (bird's-eye-view) 으로 보내는 과정이다.
마지막으로 shooting은 reference plane에서 motion을 제안하는 방법이다.
Detail
Lift: Latent Depth Distribution
첫번째 단계로 각 카메라에서 얻은 영상을 모든 카메라가 공유하는 동일한 3D 좌표계로 끌어올리는 과정이다.
각 카메라에서 얻어온 영상과 intrinsic, extrinsic을 이용하여 각 점p
에 대해서 depth 정보를 추가하여 다음과 같이 표현할 수 있다.
(h, w, d) \in \mathbb{R}^3 | d \in D
여기서D
는 discrete depth들를 의미하며, 이렇게 모든 점에 대해서 discrete depth를 알고 있다면 D, H, W의 크기를 갖는 이미지(multi plane image)를 만들 수 있다.
여기에서 한가지 차이점은, 이미지가 RGB value 대신 feature vector를 가진다는 점이다. 각 지점p
에 대해서 네트워크로부터 생성된 context feature vectorc \in \mathbb{R}^C
가 있고, 각 discrete depth에 대한 probability distribution\alpha
가 존재한다고 생각하면,p
의 각 depth에 대한 context feature vectorc_d \in \mathbb{R}^C
는 context feature vector에 probability를 곱하여c_d = \alpha_d c
로 계산할 수 있다.
네트워크를 통해\alpha
를 prediction 한다면, 이미지의 각 지점이 그것의 ambiguity 정도에 따라 bird's-eye-view에서 어느 한 명확한 지점, 혹은 ray가 지나가는 여러 위치들에 대해 context를 위치시킬 수 있게 된다. 이를 Figure 3에서 표현하였다.
Splat: Pillar Pooling
Lift 단계에서 생성된 large point cloud를 변환하는 과정이다. Pillar는 무한의 높이를 갖는 voxel을 의미한다.
Lift 단계에서 생성된 각 point들의 feature들은 C x H x W 의 크기를 갖는 tensor로 변환된다. 여기서 H, W는 bird's-eye-view의 크기이고 C는 context feature vector의 차원을 의미한다. Context feature를 갖는 각 점들은 가장 가까운 위치의 pillar에 할당된 뒤 sum pooling 연산을 진행한다.
이렇게 생성된 tensor는 다음 단계에서 bird's-eye-view 프레임에서의 CNN의 입력으로 사용된다.
sum pooling은 위치에 대해서 정렬한 뒤 integral image와 비슷하게 cumsum trick을 이용하면 빠르게 계산될 수 있다.
Shoot: Motion Planning
앞에서 만들어진 bird's-eye-view에서의 feature map을 이용하여 motion planning을 prediction하거나 segmentation을 수행할 수 있다.
planning의 경우 K개의 template trajectory를 미리 구성하고, K개 trajectory의 각 위치에 대한 classification 문제로 해결하였다.
Implementation
모델은 2개의 네트워크로 구성되어있으며, 첫번째 네트워크는 각 이미지로부터 feature를 생성하는 역할을 하고 두번째 네트워크는 feaature가 pillar로 splat된 뒤의 결과를 처리하는 역할을 한다.