1. Motivation

Scene flow는 장면 내 포인트들의 3D motion field다. 이를 image plane에 투영하면 2D optical flow가 된다. 그러나 기존 대부분의 연구는 2D 표현에 기반하여 stereo 또는 RGB-D 이미지에서 optical flow와 disparity map을 별도로 추정하며, 3D scene flow를 직접 최적화하지 않는다.

이러한 방법들은 point cloud만을 입력으로 사용하는 경우에는 적용할 수 없다. FlowNet3D는 동적 환경의 point cloud에서 직접 3D scene flow를 end-to-end로 학습하는 방법을 제안한다.

기존 scene flow 추정 방법들은 주로 2D 이미지(RGB-D, stereo)를 입력으로 하며, optical flow와 depth/disparity를 별도로 추정한 뒤 결합하는 방식을 사용하였다. PointNet++과 같은 point cloud deep learning 방법이 등장하면서, 3D point cloud에서 직접 특징을 학습하는 것이 가능해졌다. FlowNet3D는 이 방향을 scene flow 추정으로 확장한다.

3. Proposed Method

문제 정의

Source point cloud에서 target point cloud로 각 point가 이동할 때의 motion을 추정하는 것이 목표다.

Set Convolution (set_conv)

포인트 클라우드의 좌표와 feature를 추출하는 기본 레이어. PointNet++ 기반으로 Farthest Point Sampling(FPS)을 통해 centroid를 선택하고, centroid를 중심으로 한 local coordinate 값을 입력으로 사용한다.

Flow Embedding Layer

두 시간 step의 point feature를 aggregate learning하여 flow embedding을 출력하는 핵심 레이어다.

  • t 프레임의 각 포인트 x_i에 대해, t+1 프레임에서 반지름 r 이내의 이웃 포인트 y_j와의 차이를 weight로 활용한다.
  • Weighted-sum 방식으로 가장 가능성 있는 t+1 프레임의 포인트와 연결한다.
  • 포인트는 non-ordered하므로 element-wise max 함수를 사용한다.

Flow Refinement Layer

Flow embedding의 출력을 모든 point로 upsampling하는 네트워크다.

  • FPS 대신 target 프레임의 포인트를 기준으로 3D interpolation을 적용한다.
  • 이전 set_conv와 유사한 구조를 사용하나, local region sampling 방식이 다르다.

학습 Loss

  1. Smooth L1 Loss (Huber Loss): Forward flow와 GT의 차이를 계산한다.
  2. Cycle Consistency Loss: Forward flow + backward flow가 정확하다면 0이 되어야 함을 이용하여 추가적인 regularization loss를 계산한다.

4. Experiments

FlyingThings3D 합성 데이터셋과 KITTI LiDAR 데이터셋에서 평가하였다. FlowNet3D는 기존 non-learning 기반 방법들 대비 우수한 성능을 보이며, point cloud에서 직접 scene flow를 추정하는 방법의 가능성을 실증하였다.

5. Conclusion & Limitation

FlowNet3D는 Flow Embedding Layer와 Flow Refinement Layer라는 두 개의 새로운 레이어를 제안하여, 3D point cloud에서 end-to-end로 scene flow를 학습하는 최초의 방법 중 하나다. 다만 point cloud 처리 특성상 계산 비용이 크며, 실시간 처리에는 한계가 있다.

Key References

  • PointNet++: Deep Learning on Point Sets for 3D Classification and Segmentation
  • FlowNet: Learning Optical Flow with Convolutional Networks