논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

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가지 요소가 포함되어야 한다.

  1. Translation equivariance: 픽셀 좌표계에서 shift가 일어날 경우, output 또한 같은 양만큼 shift 되어야 한다.
  2. Permutation invariance: n개 카메라 입력의 순서를 바꾸더라도 최종 출력에는 영향이 없어야 한다.
  3. 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된 뒤의 결과를 처리하는 역할을 한다.


Add a Comment Trackback