Deep Feature Flow for Video Recognition

detection
cvpr2017
video
2017
cvpr

(Curtis Kim) #1

비디오 데이터를 Detection, Segmentation 하는 방식으로, 기존에 이미지의 Detection, Segmentation 모델을 이용해 각 프레임마다 Inference하는 방법이 있습니다. 이 때, CNN을 각 프레임마다 수행하게 되므로, 속도 면에서 매우 불리하다는 것이 문제 제기의 요소입니다. 비디오의 연속된 각 프레임은 서로 매우 유사하고, 관련 높은 정보를 가지고 있는데, 이런 시간적 정보를 무시하고 각 이미지 별로 CNN을 수행한다는 점이 제기된 문제입니다.

이 논문에서는, 모든 프레임에서 Feature를 뽑지 않도록 Optical Flow기반의 Feature Flow를 제안하고, 이를 통해 약간의 성능하락 대비 높은 속도 향상을 보여줍니다.

Introduction

맨 첫번째 줄이 이전 프레임입니다. 차와 사람에 대응하는 필터 2개에 대한 필터 예제입니다. 실제 차와, 사람이 있는 위치에 반응하는 것을 확인할 수 있습니다.

두번째 줄은 현재 프레임으로, 첫번째 프레임과 마찬가지로 CNN을 통해 얻어진 필터 반응을 보여줍니다.

세번째 줄이 Feature Flow를 통해 구한 필터 반응입니다. 즉 CNN으로 Feature를 구하는 과정이 아니라, Flow Field(Optical Flow)로부터 이전 프레임 피쳐를 현재 프레임으로 변환한 것입니다.

논문에서는, 이렇게 Flow Field를 통해 구한 Feature가 CNN을 통해 구한 것와 유사함을 주장합니다.

Deep Feature Flow

CNN을 통해 이미지 I 에 대해 결과를 얻은 과정을 함수 N 으로 표현하면,

y = N(I)

인데, 이를 Feature를 생성하는 부분과 실제 Task를 수행하는 부분으로 나누어 생각해볼 수 있습니다.

f = N_{feat}(I)
y = N_{task}(f)

이 논문에서는 Feature Network N_{feat} 을 듬성듬성한 Key frame에서만 수행하고, 모든 프레임에서 수행하는 $ N_{task} $의 입력값을 생성하도록 함으로써 속도를 개선했습니다.

M_{i \rightarrow k} 를 2차원 flow field라고 할 때 이는 flow estimation algorithm F 를 이용해서 추정될 수 있습니다.

M_{i \rightarrow j} = F(I_k, I_i)

이 때, feature warping은 bilinear interpolation으로 key frame으로부터 얻어질 수 있습니다.

f^c_i(p) = \sum_q{G(q, p+\delta p)f^c_k(q)} \\ G(q, p+\delta p) = g(q_x, p_x + \delta p_x) \cdot g(q_y, p_y+\delta p_y) \\ g(a,b) = max(0, 1-|a-b|)

여기서 G는 bilinear interpolation kernel 이고 \delta p = M_{i \rightarrow k}(p) 입니다 . 즉 풀어서 설명하면, 위치 p에서의 값은 키 프레임에서의 피쳐 값에서 p로 옮겨진 값들의 합으로 구해지는데, 그 값들은 optical flow로 보정된 위치와 거리가 가까울수록 높은 weight를 갖도록 설계되어 있는 것입니다.

이 때, warping은 flow estimation의 에러나, object occlusion 형성 등으로 정확하지 않을 수 있어서, 이를 보정하기 위한 Scale Field S_{i \rightarrow k} 를 추가로 도입해 Element Wise로 값을 보정합니다.

최종적으로는 아래와 같은 algorithm으로 학습이 진행되게 됩니다.

image

즉, 기존의 per-frame CNN 대비 아래와 같은 구조 변화로, N_{feat} 를 주요 프레임에서만 추출하는 차이를 갖게 됩니다.

image

이 때, 기존 네트워크 대비 새로 추가된 Flow Network는 FlowNet의 simple 버전을 사용했고, Scale Map output을 추가한 형태입니다.

N_{task} 는 Semantic Segment의 경우 DeepLab과 유사한 형태, Object Detection의 경우 R-FCN과 유사한 형태입니다.

Results

image

per-frame CNN 대비 DFF(Deep feature flow)가 성능은 크게 떨어지지 않으면서 대략 3~5배 수준으로 속도 향상이 있음을 확인할 수 있습니다. End-to-end로 전체 네트워크를 학습한 버전이 가장 성능이 좋습니다.

image

네트워크 N을 N_{feat} N_{task} 로 분리할 때, 속도와 성능 사이의 trade-off가 어떠한지 살펴본 테이블인데, 아주 높은 레이어의 feature를 feature flow로 추정해도 성능이 떨어지지 않고, 당연하게도 속도까지 빠르다는 테이블입니다.

Flow Network의 크기도 조절해보았는데, Flow Network가 작아져서 성능이 낮은 경우에도 전체적인 mIOU는 크게 떨어지지 않았고 오히려 속도 향상에 유리하다는 것을 보여줍니다.

Feature Flow를 사용한 예제로, 연속된 프레임에서 잘 작동하는 것을 확인할 수 있겠습니다.


(FGFA) Flow-Guided Feature Aggregation for Video Object Detection
'Object Tracking' 카테고리의 설명
Impression Network for Video Object Detection
(FlowTrack) End-to-end Flow Correlation Tracking with Spatial-temporal Attention
'Object Detection' Outline
(Curtis Kim) #2

Mobile Video Object Detection with Temporally-Aware Feature Maps