FlowNet: Learning Optical Flow with Convolutional Networks

convolutional
sota
iccv
iccv2015

#1

Optical Flow를 Deep Learning으로 의미있게 풀었던 논문입니다. 좋은 성능, 적은 연산양의 모델 구조를 제안했는데, 핵심은 Correlation Layer에 있습니다.


Architecture

2가지 아키텍쳐를 비교했습니다.

FlowNetSimple은 일반적인 CNN의 모습으로 보입니다. Optical Flow를 비교할 2개의 이미지를 Stack해서, 6채널의 Input을 만듭니다. (RGB 3채널 이미지 X 2개) 이 입력을 그대로 Convolutional Layer를 여러번 거쳐 최종 Output으로 Optical Flow를 출력하도록 하는 것입니다.

FlowNetCorr은 조금 다른 모습입니다. 2개의 이미지를 각각 따로 Convolutional Layer들을 통해 Feature를 얻습니다. 그리고 이 둘을 Correlation Layer를 거치도록 한 후, 다시 Convolutional Layer를 반복하도록 하는 구조입니다. 즉, 각각의 이미지에서 얻은 Feature를 잘 비교하 수 있는 Correlation Layer를 제안한 것이 핵심입니다.

Correlation Layer는 Convolution Layer와 같은 연산이지만, Filter Weight 대신, 서로의 인풋을 이용한다고 생각하면 됩니다. 그러니까, Filter Weight을 반복하면서 적용하는게 아니라, Feature1을 Feature2에 반복 계산하는 것입니다. 따라서 학습할 Weight가 없는 레이어입니다.

첫번째 Feature에서 x1의 위치, 그리고 두번째 Feature에서 x2의 위치에서의 Correlation 값은 아래와 같이 계산됩니다.

image

Patch Size로 정의된 K가 Convolution으로 치면 Filter 사이즈와 유사한 부분일 것 같습니다. Convolution처럼 위 연산을 여러 Displacement에서 해야하는데, 그러면 연산양이 많아지니까, 어느정도 한정적인 displacement 내에서만 연산을 합니다.

Optical Flow 결과가 정확할 수 있도록, 결과를 높은 resolution으로 높여주는 부분도 있습니다. #segmentation 등의 논문에서도 이용하는 것처럼, deconvolution을 이용해 해상도를 높이면서 이전 feature를 concatenate하는 형태를 띄고 있습니다.

Results

여러 데이터셋에서 기존의 #sota 를 갱신했습니다. Generalization 성능까지도 좋다고 주장합니다. Flying Chair 라는 합성 데이터셋에서 학습해도 실제 촬영된 데이터에서 좋은 성능을 보여줍니다.

단, Correlation Filter를 쓴 버전이 데이터셋에대한 Overfit의 경향이 조금 더 있고(이는 학습이 더 용이한 구조라고 생각됨), large displacement가 있는 optical flow에서 조금 더 취약했다고 합니다.


#2

동작 데모


(FGFA) Flow-Guided Feature Aggregation for Video Object Detection
(FlowTrack) End-to-end Flow Correlation Tracking with Spatial-temporal Attention
Impression Network for Video Object Detection
Deep Feature Flow for Video Recognition