Deep Feature Flow for Video Recognition
Problem
- CNN을 이용한 image recognition 분야의 발전은 video domain으로의 확장으로 이어지게 되었다. 특히 빠르고 정확한 video recognition은 autonomous driving이나 video surveillance 분야에서 매우 중요한 가치를 지니고 있다.
- 하지만 image recogntion 네트워크를 모든 video 프레임에 각각 적용하기에는 너무 많은 계산량이 필요로 한다.
Essence
- 최근의 CNN들은 대부분의 레이어들의 convolutional로 구성되어있고 이것들의 대부분의 계산을 차지한다.
- 입력된 이미지와 Intermediate convolutional feature map은 같은 규모의 크기를 가지며, 익히 알려진대로 연속된 video frame에서는 이미지 content의 변화가 천천히 이루어지므로 이에 따라 middle부터 high level semantic feature 간의 correspondence가 유지된다.
- 따라서 인접 프레임으로부터 spatial warping을 통해 더 적은 연산으로 feature를 propagate할 수 있다.
- 논문에서는 deep feature flow를 제안하고, flow field를 이용하여 key frame으로부터 다른 frame으로의 deep feature map을 propagate하는 방법을 제안한다.
- Propagation된 feature는 원래의 feature와 비슷하게 동작한다.
- Flow estimation와 feature propagation에 필요한 시간은 feature를 직접 계산하는 것보다 훨신 빠르고, 모든 부분들이 end-to-end로 학습된다.
Detail
Deep Feature Flow Inference
- 기존의 CNN
\mathcal{N}
의 구조를 두 부분으로 나누어 intemediate feature map\mathbf{f}
를 생성하는 feature network\mathcal{N}_{feat}
과 특정한 task를 수행하는 task network\mathcal{N}_{task}
로 구분하였다. - 연속된 video frame들은 매우 비슷하기 때문에 feature map 또한 비슷하게 생성된다. 따라서 계산량을 줄이기 위해 feature network는 key frame에 대해서만 수행하고 non-key frame에 대해서는 key frame의 feature map으로부터 propagation한 feature map을 사용하고자 하였다.
- Deep convoluional layer의 feature map은 이미지에서 지역적인 semantic concept을 encode하므로 image warping과 같은 방식으로 spatial correspondence를 이용하여 feature map을 propagation이 가능해진다.
- Flow estimation
\mathcal{F}(\mathbf{I}_k, \mathbf{I}_i)
으로부터 계산된 flow field를\mathbf{M}_{i \rightarrow k}
이라고 하자. - 이미지
\mathbf{I}_i
의 한 위치\mathbf{p}
의 대응되는 이미지\mathbf{I}_k
의 위치는\mathbf{p} + \delta \mathbf{p}, \delta \mathbf{p} = \mathbf{M}_{i \rightarrow k}(\mathbf{p})
이다. - 이 대응되는 위치를 이용하여 feature warping은 bilinear interpolation을 통해 이루어진다.
- Flow estimation은 error를 포함하고 있기 때문에, flow의 amplitude를 feature map와 같은 크기와 채널크기를 가지는 scale field
\mathbf{S}_{i \rightarrow k}
를 이용하여 변화시켜준다. - 여기서 scale field는 두 프레임을 입력으로 하는 scale function
\mathcal{S}
을 통해 계산된다. - 정리하자면 feature propagation은 bilinear interpolation을 먼저 적용한 뒤, 그 결과에 scale field를 element-wise하게 곱하는 것으로 계산된다. 수식으로 표현하면 다음과 같다.
\mathbf{f}_i = \mathcal{W}(\mathbf{f}_k, \mathbf{M}_{i \rightarrow k}, \mathbf{S}_{i \rightarrow k})
- Flow estimation을 기존의 SIFT-Flow와 같은 low-level 방법을 이용할 수도 있는데, 이 때에는 flow function의 학습은 하지 않고 scale function은 모두 1로 사용하면 된다.
Deep Feature Flow Training
- 기존의 flow function은 low level 이미지 픽셀 수준에 적당한 방법이기 때문에 여기서는 CNN을 이용하여 flow field를 별도로 estimation하게 하고 jointly하게 end-to-end로 학습하도록 하였다.
-
프레임 차이가 9개 이내의 프레임 쌍을 샘플링하여, feature network가
\mathbf{I}_k
에 대해 feature map을 생성하고, flow network가 flow field와 scale field를 estimation한 뒤, feature map\mathbf{f}_k
를 propagation하여\mathbf{f}_i
를 생성하였다. 다음 task network를\mathbf{f}_i
에 적용한 뒤 그 결과를 loss로 하여 학습을 진행하였다. -
Flow network는 feature network보다 매우 빠르도록 구성하였고, Flying Charis dataset으로 미리 pretrain한 뒤 사용하였다.
- 마지막 레이어는 flow를 estimation 할 뿐 아니라 채널을 하나 늘려 scale function으로 사용하도록 하였다.