(FGFA) Flow-Guided Feature Aggregation for Video Object Detection

detection
iccv
video
iccv2017
optical-flow

(Curtis Kim) #1

시간 상 연속된 이미지로 이루어진 Video에 대해 Object Detection(#cnn:object-detection) 하는 단순한 방식은 단순히 각 이미지 하나하나를 기존 Image Detector를 이용해 검출하면 됩니다. 그런데 이 경우, Temporal Information을 사용하지 않고 있기 때문에, 사용하는 정보에서 손실이 많다고 볼 수 있습니다. 그러니까, 많은 정보들이 이전, 그 이전 등등의 프레임에서 얻을 수 있다는 건데, 그 정보를 버리고 사용한다는 뜻이 됩니다.

예를 들어서, 갑작스런 움직임 때문에 이미지가 흐려지면(Motion Blur 라고 부름), 이미지 하나만 가지고 검출하기 어려운데, 이전 프레임 정보로 부터 이를 보정할 수 있다는 뜻입니다.

이를 위해서, T-CNN, Seq-NMS 같은 논문 등에서는, 각 이미지에서 나온 Bounding Box 정보를 어떻게 합칠 것인지에 대한 방식을 제안합니다. 즉, 각 프레임 별로 검출된 결과를 놓고, 이를 시간 상으로 어떻게 재활용할지를 고민한다는 뜻입니다. 이러한 방식은 end-to-end 학습은 아니고, 사람이 어떻게 aggregate할지를 코딩하는 방식입니다.

이 논문에서는 예전에 얻어진 Feature를 재사용하는 방식을 제안함으로써, end-to-end로 Video Detection을 수행하는 방식을 제안합니다. 특히 Deep Feature Flow에서는 재사용을 통한 속도 향상에 주안점을 두었다면, 여기에서는 이전 피쳐로부터 현재 프레임에서 얻기 어려운 정보를 추가하는 것으로 방향을 바꾸어, 성능 향상에 도움을 주었습니다.

Flow Guided Feature Aggregation

이름에서 어느 정도 힌트를 얻을 수 있는 것처럼, Flow 즉 Optical Flow를 이용해 Feature를 여러 시간 축에 걸쳐 사용하는 방식을 제안합니다.

기존에 이미지 대상으로 Detection을 하는 CNN을 아래와 같이 둘로 나누어 본다고 생각을 해봅시다.

N = N_{feat} + N_{det}
f = N_{feat}(I)
y = N_{det}(f)

즉, Feature를 뽑아서 원하는 Detection을 수행하는 2단계로 구성되어 있다고 굳이 나누어본 거고, 특히 이곳에서 N_{feat}(I) 부분을 다른 시간대에서 재활용하기 위해서 Optical Flow를 사용합니다.

Flow guided warping

2 프레임의 이미지, I_i, I_j 사이에서 flow field를 M_{i\rightarrow j} 를 Network F 에 의해서 추정(FlowNet 류를 이용함)한다고 하면, 이미지 I_j 에서 얻어진 피쳐가 I_i 에 맞추어 사용되려면, W는 bilinear warping function으로 정의하고,

f_{j \rightarrow i} = W(f_j, M_{i \rightarrow j}) = W(f_j, F(I_i, I_j))

로 정의합니다. 즉, 서로 다른 시간 대의 이미지에서 얻은 Feature는 서로 Optical Flow를 통해 보정되어 전달되는 방식입니다.

Feature Aggreagation

여러 프레임에서 얻어진 이미지는 서로 illuminations, viewpoints, pose 등의 상태에 따라 변화가 일어나고 이를 위와 같은 flow guided warping으로 align하는 방식을 제안했는데, 이를 합칠 때에는 weight를 사용해서 합칩니다.

f_i = \sum_{j=i-K}^{i+K}w_{j \rightarrow i}f_{j \rightarrow i}

즉, 주변 시간대의 CNN으로 부터 얻은 Feature를 flow를 이용해 현재 시간대로 align한 후 weighted sum 하는 방식입니다.

이렇게 얻어진 피쳐 f 는 N_{def} 를 통해 최종적인 결과를 얻게됩니다.

y_i = N_{def}(f_i)

Adaptive Weight

위에서 등장한 weight는 아래와 같은 방식으로 계산해서 사용합니다.

즉, 이미지 상 각 위치 p 별로, 유사도에 따라 weight가 주어지며, 이는 softmax로 각 위치별 weight sum은 1이 됩니다.

Summary

지금까지 정리한 방식을 알고리즘으로 소개하면 위와 같습니다.

Architecture

논문에서는 아래와 같은 Architecture를 불러와 사용했습니다.

  • FlowNet 구조를 살짝 변형해서, optical flow를 추정하는 부분에 사용했습니다.
  • Feature Network는 Inception-Resnet의 변형을 사용했습니다.
  • R-FCN 구조의 Detection 방식을 사용했습니다.

Results

flow-guided 되지 않은 버전을 보면 성능이 상대적으로 낮고, 이는 여러 프레임 정보를 쓰지 않은 방식에 비해 크게 향상되지 않았는데, flow guide를 사용한 버전이 가장 성능이 좋은 것을 확인할 수 있습니다.

트레이닝 타임에 여러 frame을 사용하지 않더라도 성능이 유사하게 나오는데 이는 temporal dropout의 효과라고 합니다.

baseline 대비해서, 모션 블러 등의 상황에서 좀 더 안정적인 몇가지 예제가 실려 있습니다.

작고, 빠른 물체에 대해서는 여전히 성능 향상의 기회가 보입니다.

Code


Impression Network for Video Object Detection
(FlowTrack) End-to-end Flow Correlation Tracking with Spatial-temporal Attention
'Object Detection' Outline
(Curtis Kim) #2