Deep Feature Flow for Video Recognition

Inc Lomin's avatar
Sep 08, 2019
Deep Feature Flow for Video Recognition
 
 

Introduction

Motivation

영상 내에서 인접한 장면들은 상당히 유사한 feature들을 갖습니다. 아래 그림은 중 첫 번째 줄과 두 번째 줄은 인접한 두 장면 (key frame과 current frame)을 R-101에 통과시킨 후, feature map에서 임의의 두 채널을 시각화하여 비교한 것입니다. 그리고 마지막 줄의 그림은 flow field를 이용하여 key frame으로부터 current frame의 feature map을 propagation시켜 구했을 때 동일한 위치의 필터를 비교한 것입니다.
notion image
위의 그림을 보면 실제로 feature extractor를 이용해서 얻은 feature map이나, flow field를 이용해서 propagation한 feature map이 상당히 유사한 것을 알 수 있습니다. 이러한 feature의 유사도는 시간적으로 인접한 frame일수록 더 높아지게 됩니다.
하지만 각 프레임마다 독립적으로 object detection이나 semantic segmentation 등의 task를 수행할 경우, 이러한 유사성은 전혀 고려되지 않으며, 각 장면마다 연산량이 많은 feature extraction을 수행하기 때문에 처리 과정이 비효율적입니다. 이 논문에서는 인접 프레임들에서의 정보를 최대한 활용하기 위해 FlowNet을 이용한 optical flow 기반의 feature flow를 제안하고, 이를 이용했을 때 속도 측면에서 상당한 개선이 있음을 보여주고 있습니다.
 

Proposed Method

Deep Feature Flow

  • Deep Feature Flow
전체적으로 어떻게 동작하는지 확인하면 다음 그림과 같습니다. 아래 그림의 (a)는 각 프레임마다 독립적으 로 feature extraction과 task를 수행하는 경우를 나타낸 것이고, (b)는 DFF를 이용하여 key frame의 feature로부터 현재 frame의 feature를 전파시킨 후 task 결과를 얻는 것을 도식화한 것입니다. N_feat은 feature extraction network, N_task는 task network를 나타냅니다.
notion image
전체 영상 중 몇 개의 key frame을 배치한 후, key frame에서는 일반적인 per-frame network를 거쳐 task를 수행합니다. 한편 key frame이 아닌 frame에서는 먼저 flow network F를 통해 flow field를 만들고, 이 flow field와 key frame의 feature map을 활용하여 현재 frame에서의 feature map을 만들어냅니다. 그 후에는 task network를 통해 결과를 얻으면 현재 frame에서의 task 결과가 됩니다. 이 과정을 알고리즘으로 나타내면 다음과 같습니다.
notion image
11번째 줄에 있는 propagation이 feature flow를 나타냅니다. Feature flow는 인접 key frame의 feature f_k, flow field F와 scale field S로 이루어지게 됩니다. F는 FlowNet과 같은 flow estimation algorithm을 통해서 구하며, flow field는 feature map과 동일한 사이즈로 리사이즈됩니다.
현재 프레임 I_i에서의 2d 위치 p를 flow field를 통해 key frame에서의 위치와 대응할 수 있는데, key frame에서의 위치를 p+\delta p라고 하면 그 사이에 해당하는 \delta p 가 flow field에 p를 통과했을 때의 값이 됩니다.
이렇게 현재 프레임의 모든 위치에서 flow field를 이용하여 key frame으로의 mapping이 가능하며, 이를 이용해서 feature warping은 다음과 같은 bilinear interpolation으로 이루어지게 됩니다. (f는 feature map, c는 feature map에서의 channel, G는 bilinear interpolation kernel을 나타냅니다.)
notion image
notion image
즉, 위치 p에서의 값은 키 프레임에서의 피쳐 값에서 p로 옮겨진 값들의 합으로 구해지는데, 그 값들은 optical flow로 보정된 위치와 거리가 가까울수록 높은 weight를 갖도록 설계되어 있는 것입니다.
Flow estimation에서의 error나 물체가 가려짐으로 인해 완전히 대응되지 않는 등, spatial warping이 부정확할 수 있습니다. 이러한 문제를 해결하기 위해 feature map과 동일한 dimension을 갖는 scale field S_{i→k}를 도입합니다. scale field는 두 프레임 사이에 scale function S를 적용함으로써 얻어집니다.
최종적으로 flow network를 통해 얻은 flow field를 이용하여 현재 프레임으로 feature map을 투영시킨 뒤, scale map을 element-wise로 곱함으로써 현재 frame에서의 feature map을 구합니다. Flow function F는 학습 방식이 아닌 방법들도 사용할 수 있지만 (e.g. SIFT), 논문에서는 기존의 비학습 flow function들을 사용하는 것을 Shallow Feature Flow, FlowNet 등의 network를 사용하는 것을 Deep Feature Flow라고 명명하고 있습니다.
Flow function은 본래 이미지의 pixel-level에서의 대응을 나타내기 위해 고안된 것으로, pixel flow 변화보다 더 느리게 변화하는 feature map 수준에서는 flow function의 대응이 정확하지 않을 수 있습니다. 이러한 pixel flow와 feature map flow 간의 속도 차이를 정확하게 반영하기 위해서 flow field와 scale field를 동시에 end-to-end로 학습합니다.
 
  • Inference Complexity Analysis
Key frame 대비 non-key frame의 연산 복잡도 비는 다음과 같습니다.
notion image
일반적으로 feature network와 flow network F는 복잡도가 높고 task network는 낮은 편이기 때문에, O(N_task) << O(N_feat), O(N_task)<<O(F)가 성립합니다. 한편 scale field S는 매우 간단하게 설계되었으며, W 또한 연산량이 많지 않기 때문에 O(W)<< O(F), O(S)<<O(F)가 됩니다. 따라서 위의 식은 다음과 같이 근사가 가능합니다.
notion image
즉, 복잡도는 간단하게 feature network와 flow network의 복잡도의 비가 되며, 이는 FLOPs를 이용하면 정밀한 비교가 가능합니다. 일반적인 implementation에서의 값들은 다음과 같습니다.
notion image
이와 같이 key frame 대비 non-key frame의 복잡도가 낮기 때문에, 실질적으로 속도가 얼마나 개선되는지는 key frame의 sparsity에 달려 있습니다. l개의 frame마다 한개씩 key frame을 배치한다고 할 때, speedup factor는 다음과 같이 나타낼 수 있습니다.
notion image
Key frame을 어떤 주기로 잡느냐에 따라 inference 속도가 결정되지만, 이 주기는 당연하게도 영상의 내용이나 역동성, task 등에 달려 있습니다. 이 연구에서는 단순하게 고정된 간격마다 key frame을 배치하였으며, key frame의 효과적인 배치를 심층적으로 다루는 key frame scheduling은 고려하고 있지 않습니다.
 

Network Architectures

Flow network에 대해서는 당시의 state-of-the-art 였던 FlowNet 중 Simple 버전을 사용하였는데, 이를 조금 더 간소화한 두 개의 네트워크를 추가하여 총 3개의 flow network를 비교하였습니다. 추가 구조 중 FlowNet Half는 convolution kernel의 사이즈를 반으로 줄임으로써 복잡도는 1/4, FlowNet Inception은 Inception 구조를 채택함으로써 복잡도를 1/8로 만들었습니다. 아래는 기본 FlowNet Simple의 구조를, 그 아래 그림은 마지막의 refinement에 해당하는 부분을 나타낸 것입니다.
notion image
notion image
학습은 Flying Chairs dataset을 이용하였으며, FlowNet의 입력은 원래 해상도의 절반으로 하고, output stride를 4로 하였습니다. 따라서 flow field의 크기는 원래 해상도의 1/8이 됩니다. Feature propagation 시 flow field는 bilinear interpolation을 통해 다시 절반의 사이즈로 줄여서 feature map과 동일한 사이즈로 만들어 주었습니다.
Feature network로는 R-50과 R-101을 조금 수정하여 사용하였습니다. Task network로는 semantic segmentation은 feature map에 1x1 convolution을 한 뒤 pixel-level classification을 하였고, object detection에서는 R-FCN을 사용하였습니다. 두 경우 다 task network의 layer 갯수는 1입니다.

Experiment

Setup

Semantic segmentation 실험들은 Cityscapes, object detection 실험들은 ImageNet VID에서 수행되었습니다.
Cityscapes는 도시 장면 이해 및 자율 주행을 위한 데이터셋으로, 50개의 도시에서 17fps로 촬영되었으며 규모는 학습, validation, 평가 셋이 각각 2975, 500, 1525 snippet들로 이루어져 있습니다. 각 snippet는 30 프레임으로 이루어져 있으며, 20번째 프레임은 semantic segmentation을 위한 pixel-level ground-truth labeling이 되어 있습니다. 30개의 semantic category가 있습니다. 이미지는 짧은 변이 feature network에서는 1024, flow network에서는 512가 되도록 resize 했습니다.
ImageNet VID는 비디오에서의 object detection을 위한 데이터셋으로, train, validation, test set이 각각 3862, 555, 937개의 fully-annotated video snipet들로 이루어져 있습니다. 대부분의 snippet들은 25fps 혹은 30fps이며, 30개의 object 카테고리가 있습니다. 여기서는 feature와 flow network에서 각각 짧은변이 600, 300픽셀이 되도록 resize 했습니다. 학습 시에는 ImageNet DET train set 또한 섞어서 (2:1 비율로) 사용하였습니다.
Key-frame duration은 Cityscapes segmentation에서는 5, ImageNet VID detection에서는 10으로 설정하였습니다.

Results

DFF의 baseline과 그 변형들을 비교해 보았습니다. 여기서 SFF는 shallow feature flow로, flow network를 SIFT-Flow로 대체한 경우를 나타냅니다. DFF는 per-frame network N과 feature flow network F를 end-to-end로 한꺼번에 학습시킨 것을 뜻하며, 그 외의 내용들은 아래 표에 적혀진 바와 같습니다.
notion image
다음은 실험 결과를 나타낸 표입니다.
notion image
각 장마다 feature extraction을 하는 경우(Frame)를 제외하면, end-to-end로 학습시킨 DFF의 성능이 가장 좋은 것을 확인할 수 있습니다. 특히 Frame에 비해 3.7~5.0배로 빠른 처리 속도를 보이면서도 성능 하락은 mAP 0.8~1.9% 정도로 크지 않았습니다. N과 F를 따로 학습한 경우 중 특히 F를 고정시켰을 때에는 성능이 좋지 못한 것을 확인할 수 있었습니다.
추가적으로 scale function을 제거하고 실험을 해 보았을 때, 1% 미만의 mAP 감소가 있었습니다. 이는 마지막에 scale field를 이용하는 것이 도움이 되는 것을 보여줍니다.
추가적으로 각 network를 어떻게 조합하는 것이 효과적인지 확인하기 위하여 flow network와 feature network를 조합해가면서 key frame duration length에 따른 결과를 비교했습니다. 아래 그림은 결과의 mAP(y축)와 runtime speed (x축)를 나타낸 것이며, 왼쪽은 detection, 오른쪽은 segmentation 결과에 해당합니다.
Accuracy-speed tradeoff under different implementation choices on ImageNetVID detection
Accuracy-speed tradeoff under different implementation choices on ImageNetVID detection
Accuracy-speed tradeoff under different implementation choices on Cityscapes segmentation
Accuracy-speed tradeoff under different implementation choices on Cityscapes segmentation
전반적으로 DFF는 Frame에 비해 크게 떨어지지 않는 성능을 보여줍니다. 구체적으로 detection에서 R-101을 사용할 때는 4.05fps로 R-101 + FlowNet Inception을 사용할 때의 41.26fps에 비해 10배 정도 차이가 나는데, mAP drop은 73.9%에서 69.5%에 불과합니다. Segmentation에서는 R-50 2.24fps에서 R-50 FlowNet Inception의 17.48fps로 증가할 때, 정확도는 69.7%에서 62.4%로 감소하였습니다.
다만 효과적인 FlowNet과 feature network의 조합은 요구되는 속도와 task의 종류에 따라 달라질 수 있습니다. Flow network에는 가벼운 FlowNet Inception이 대부분의 경우에 제일 효과적이었지만, feature network는 무거운 R-101이 더 좋은 성능을 보였습니다. 하지만 빠른 속도를 위해서라면 결과가 달라지는데, detection에서는 R-101이 여전히 좋은 성능을 보이며, segmentation은 6.35fps정도의 지점에서 R-101과 R-50의 성능이 교차합니다. 이렇게 detection과 segmentation의 결과가 다른 이유는 동영상의 역동성이나 frame rate이 다르기 때문이라고 보여지는데, R-101은 R-50에 비해 더 짧은 key frame 간격에서 효과적인 것으로 생각할 수 있습니다.
Frame에서의 per-frame network N 중 어디까지를 feature network로 하고 어디부터 task network라고 정의할 것인가에 따라서도 성능이 달라집니다. 원래의 task network는 1개로 이루어져 있는데, feature network ResNet에서 Bottleneck에 해당하는 부분들을 task network에 포함시켜 가면서 실험해 보았습니다. 또, 반대로 task network에 포함된 마지막 layer (1x1 conv)까지도 feature network에 포함시켜 N_task를 0 layer로 만들어 실험해보았습니다. 그 결과 정확도에는 큰 차이가 없었으며, runtime은 task network가 가벼울수록 더 빠르기 때문에 layer는 1개만으로도 충분하다는 결과를 얻을 수 있었습니다.
notion image
 

Conclusions

전반적으로 DFF는 약간의 정확도 감소가 있으면서 확연하게 속도가 빠르기 때문에, application에 따라 빠른 속도가 필요한 대신 약간의 성능을 포기할 수 있는 경우 적용할 수 있습니다. 이 논문 이후에 이전 frame에서의 feature를 재사용하여 처리 시간을 단축하면서도 정확도를 높이는 방식에 대한 많은 연구들이 발표되었습니다.
Share article