Intro
이전 포스트에서는 최초의 DL 기반 Optical Flow 알고리즘인 FlowNet을 다루었습니다. FlowNet은 여러 중요한 Contribution을 가짐에도 불구하고 가장 중요한 성능 측면에서 기존의 Handcrafted 방식인 EpicFlow에 열세를 보였습니다. FlowNet2.0은 기존의 FlowNet에서 성능을 향상하기 위해 만들어진 네트워크입니다.
이번 포스트에서는 FlowNet2.0이 성능을 향상 시키기 위해 기존 대비 어떤 차별점을 두었는지를 중점으로 살펴보겠습니다.
Dataset
FlowNet2.0은 기존에 사용했던 Flying Chairs dataset으로 pretraining을 진행했습니다. 그런 다음 새로 추가한 FlyingThings3D(Things3D) dataset으로 추가적인 학습을 했습니다.
이와 관련해 논문에서 학습의 순서가 굉장히 중요하다고 표현되어 있습니다. The order of presenting training data with different properties matters. 이렇게 논문은 말하고 있으며, 결과적으로는 Chairs로 pretrain을 한 후 좀 더 Real 한 Things3D를 이용해 fine-tuning을 진행하는 방법을 제안합니다.
FlowNet 대비 더 많은 학습을 진행했으며, 추가적으로 Small Displacement 성능을 끌어올리기 위해 ChairsSDHom dataset을 이용한 학습 역시 진행했습니다. 이와 관련된 내용은 아래에서 자세히 다루겠습니다.
Network Architecture
이전 포스트에서 FlowNet2.0은 FlowNet의 모든 것을 계승한다고 언급했습니다. 이러한 이유는 네트워크 구조에서 알 수 있습니다. FlowNet2.0은 FlowNet에서 제안한 FlowNetS와 FlowNetC를 쌓아서 조합해 성능을 향상했습니다. 다양한 조합의 예시들이 논문에서 소개되었고, 결과적으로 FlowNetC + FlowNetS + FlowNetS 의 조합이 가장 성능이 뛰어났습니다.
네트워크를 Stacking 해서 더 좋은 성능을 보이는 기법은 꽤나 자주 볼 수 있습니다. 하지만 FlowNet2.0은 단순히 여기서 그치지 않고 2.0만의 무언가를 추가했습니다. 바로 Small Displacement에 대응하기 위한 FlowNet-SD를 추가한 것입니다. 이는 뒤에서 좀 더 자세히 다루겠습니다.
최종적으로 FlowNet2.0은 FlowNet2-CSS-ft-sd와 FlowNet2-SD, 두 모델에서 flow, flow magnitude, brightness error를 획득합니다. 각각의 네트워크는 Large Displacement와 Small Displacement에 대응하고, Fusion layer에서는 두 가지 결과를 모두 반영해 최종 Flow Map을 생성합니다.
FlowNet-SD
기존 FlowNet은 Optical Flow 알고리즘임에도 불구하고 Large Displacement에 상당히 강하다는 장점이 있었습니다. 반대로 Small Displacement에서는 이상할 만큼 취약한 모습을 보여 실제 Real World Problem에서 적용이 어려웠습니다. 이 부분에 대해서 나름의 추측을 해보자면 크게 두 가지 이유가 있다고 생각합니다.
첫 번째, Dataset이 너무 Large Displacement에 편향되었습니다. DL은 dataset에 전적으로 그 결과가 달렸다해도 과언이 아닙니다. 하지만 FlowNet은 Real World의 데이터가 아닌 합성 데이터를 사용했기 때문에 편향된 데이터가 생성되었을 수 있습니다. 이는 FlowNet-SD로 어느 정도 이 문제를 해결했다는 점에서 그럴듯해 보입니다.
두 번째는 CNN 구조가 가지는 한계입니다. CNN 구조는 계산량이 어마어마할 수밖에 없습니다. 이를 줄이고자 Pooling layer를 필연적으로 사용하게 됩니다. 이때 많은 양의 정보가 손실될 뿐 아니라, Resolution이 떨어집니다. 이는 자연스럽게 Coarse-to-Fine 기법과 유사한 효과를 주며, Error Propagation 문제를 동일하게 갖게 됩니다. 또한, 큰 움직임이 작은 픽셀로 표현되니 작은 움직임은 아예 무시되는 효과가 있을 거라고 생각합니다.
아무튼 이런 개인적인 의견은 차치하고 FlowNet-SD는 우선 기존의 FlowNetS에서 Stride 등을 줄여 Feature Map을 생성할 때 좀 더 작은 변화에 민감하도록 했습니다. 또한, Small Displacement에 대응하고자 움직임이 작은 ChairsSDHom dataset을 만들어 학습시켰습니다. 이는 UCF101의 Displacement Histogram을 따릅니다.
Result
Reference