Paper link : Link (본 포스트에 사용된 모든 이미지는 해당 논문에서 발췌하였습니다)
➡️ Abstract
- 본 논문은 Optical flow를 위한 가볍고 효과적인 CNN 기반의 PWC-Net 모델을 제안함
- 모델을 구성하는 모듈 (각 모듈에 대한 description은 아래 Approach에서 함)
- Pyramidal processing
- Warping
- Cost volume
- 모델의 전체적인 흐름
- 학습 가능한 pyramid 모듈을 사용해서 두 번째 입력 이미지의 CNN feature를 현재 optical flow를 고려하여 warping한다
- warping된 feature와 첫 번째 입력 이미지의 feature을 사용한 cost volume을 통해 Optical flow를 추정한다
- 이전에 뛰어난 성능을 보였던 FlowNet2 모델 보다 약 17배 적은 사이즈를 가짐
- MPI Sintel final pass와 KITTI 2015 benchmarks 데이터에서 기존에 제안된 모든 방법론들 보다 뛰어난 성능 확보
- 코드 경로 : https://github.com/NVlabs/PWC-Net
➡️ Introduction
Optical flow estimation은 computer vision 분야의 핵심 문제로 자리잡았고, 많은 연구와 응용 사례가 생기고 있지만, 많은 계산양으로 인해 실시간성의 한계를 갖고 있다. 비록 성능적으로 SOTA는 아니지만, U-Net 구조를 사용한 FlowNetC와 FlowNetS라는 실시간성을 확보한 모델이 등장하기도 했다. 이후에는 FlowNetC와 FlowNetS를 쌓아서 만든 FlowNet2가 성능적으로 SOTA를 달성했으나, 과도하게 큰 모델 사이즈(640MB)와 Overfitting이라는 한계점이 여전히 남아있었다. FlowNet2와는 반대로, 새롭게 등장한 SpyNet은 고전적 optimal flow estimation 방식인 pyramid와 warping을 deep learning에 접목시킴으로써 모델 사이즈는 작게 줄일 수 있었지만 좋은 성능은 확보하지 못했다(Trade-off between model size and accuracy).
본 논문의 저자는 SpyNet을 통해 고전적인 방법론과 CNN 구조의 결합에 대한 가능성을 확인했고, SpyNet의 낮은 성능의 문제를 해결해서 모델의 사이즈도 작고 성능도 좋은 모델 개발을 위한 연구를 진행했다. 저자는 다음과 같은 두 가지 관점을 제시했다. 첫 번째는 전통적인 Optical flow 방식 자체의 한계를 지적했는데, raw image를 전처리하는 과정에서 변하는 조명이나 그림자에 영향을 받지 않는 feature만을 추출한다고 주장한다. 또한 두 번째로는 cost volume을 통해 raw image나 feature보다 더 descrimiative 한 정보를 뽑을 수 있다고 주장한다. 다만, 과도한 계산량이 요구되는 전체 cost volume 계산 대신 pyramid level과 warping을 통한 partial cost volume 방식을 제안한다.
논문에서 제시하는 PWC-Net은 위와 같은 단순하지만 잘 짜인 원리들을 고수하여 모델의 사이즈를 줄이면서도 좋은 성능을 확보할 수 있었다고 한다. 논문을 작성하던 시기에 MPI Sintel final pass와 KITTI 2015 benchmarks 데이터셋에 대해 제시된 다른 방법론들 중에 가장 좋은 성능을 확보했다고 하고, 모델의 사이즈는 FlowNet2 보다 17배가 작았다고 한다. 또한 SpyNet과 FlowNet2보다 학습시키기가 편하고, (1024 x 436) 크기의 이미지를 35 fps의 실시간 데이터를 처리할 수 있다고 한다.
➡️ Previous Work
✔️ Variational approach
Optical flow 분석을 위한 과거의 접근법의 변화 과정을 설명한다.
- Horn & Schunk : Energy function을 통해 밝기 불변성과 공간적 평활도를 결합하여 Optical flow 분야를 개척함
- Black & Anandan : 밝기의 불일치성과 공간적 비연속성과 같은 outlier를 고려하는 강건한 방법론 제시
- Brox & Sun : 기 제시된 방법론들의 과도한 계산량의 문제를 해결하기 위해서 warping 기반의 coarse-to-fine 방법론 제시 및 고도화
- 다만, 여전히 실시간으로 작동하기에는 계산량이 많았음
- Brox & Malik : coarse-to-fine 방법론은 coarse 단계에서 아주 작거나 빠른 물체를 탐지하지 못한다는 단점이 존재했는데, 이를 해결하기 위해서 feature matching 방법론 제시
- 이후 후처리 방식인 EpicFlow와 CNN 기반의 두 interpolation 방법론으로 고도화
- 이후 DCFlow, FlowField-sCNN, MRFlow와 같은 다양한 CNN 기반의 고도화된 방법론이 등장했으나, 그 어떠한 모델도 실시간성을 확보하지 못했음
✔️ Recent work on learning optical flow
CNN 기반의 모델들을 vision 과제에서 성공적으로 적용시킨 사례들에 영감을 받아서, 저자 Dosovitskiy는 U-Net denoising autoencoder를 기반으로 optical flow를 추정하는 두 CNN 모델 FlowNetsS와 FlowNetC를 개발한다. 두 모델은 FlyingChairs 데이터로 사전학습되었고 Sintel 데이터의 빠른 움직임을 갖는 물체들에 대해서 성공적으로 작동했다. 하지만 모델 원본 산출물의 배경 부분에 큰 문제가 있었고 몇몇 개선할 부분이 있었다.
저자 Mayer는 FlowNet의 구조를 disparity와 scene flow 추정에 차용했다. Ilg는 기본 FlowNet를 여러 겹 쌓아서 FlowNet2라는 거대 모델을 만들었는데, 이는 Sintel benchmark에서 SOTA를 달성하기도 했다. 저자 Ranjan & Black은 SpyNet이라는 소형 공간 pyramid 네트워크를 개발했는데, Sintel benchmark에서 SOTA까지는 아니지만 FlowNetC와 비슷한 성능을 확보했다.
다음과 같은 비지도 학습 방식의 연구도 진행되었다. Memisevic and Hinton은 이미지의 변형을 탐지하기 위한 비지도학습방법을 제시했고, Long은 CNN 기반의 frame 보간법을 연구했다. Yu는 모델의 loss term에 data constancy term과 spatial smoothness term을 추가한 학습을 연구했다.
✔️ Cost volume
Cost volume은 현재 프레임의 픽셀과 일치하는 다음 프레임의 픽셀을 매칭하는데 필요한 비용을 저장하는 것이다. 해당 비용을 계산하는 것은 optical flow의 특수한 케이스 중 하나로, stereo matching을 위한 일반적인 과정이다. 최근의 연구들은 전체 Cost volume을 한 scale에서 계산하는 방법을 주로 사용하는데, 이러한 방식은 과도한 계산량과 메모리 사용량을 요구한다. 본 논문에서는 여러 pyramid levels를 통해 부분적인 Cost volume을 계산함으로써 효율적인 모델을 개발했다.
✔️ Datasets
다른 vision task들과 다르게 Optical flow 분야의 ground truth를 갖는 현실 데이터를 얻기는 매우 힘들다. 따라서 이전의 연구들에서는 "Yosemite"와 같은 임의로 만들어낸 데이터를 사용하곤 했는데, 실제 현실 데이터에는 잘 적용되지 못했다.
KITTI와 Sintel 데이터셋은 Optical flow 분야에서 현재 가장 어렵고 널리 알려져 있다. KITTI는 정적인 데이터와 큰 움직임을 갖거나 심한 조명 변화를 갖는 동적인 데이터를 포함하여 어려운 데이터이며, Sintel은 open source 영화 그래픽 데이터인데 final 버전에서는 강한 기후변화효과와 모션 블러, 카메라 노이즈를 포함하여 어려운 데이터이다. 본 논문에서 제시하는 모델은 위 두 데이터셋에 대해 제시된 다양한 방법론들보다 뛰어난 성능을 확보했다.
✔️ CNN models for dense prediction tasks in vision
Denosing autoencoder(보통 Encoder와 Decoder 사이에 Skip connection과 동반되어 시용되는 구조)는 Computer vision분야에서 dense prediction을 할 때 주로 사용된다. 최근의 연구들에서는 Dilated convolution 레이어가 contextual 정보 활용과 semetic segmentation를 위한 세부사항을 개선하는데 더 낫다는 점이 확인되었다.
따라서 본 논문에서 제시하는 모델 또한 optical flow를 위한 contextual 정보 통합과 더 나은 성능 확보를 위해 dilated convolution을 활용한다.
➡️ Approach
위 Figure3에서는 PWC-Net의 주요 모듈을 위주로 요약한 구조를 보여주며, 본문에서는 전통적인 coarese-to-fine 접근법과 비교한 몇 가지 차이점에 대해서 개괄적으로 설명한다. 이후에는 각 모듈들에 대해 자세히 설명한다.
( 개인적으로, 아래의 내용을 이해하는데 논문의 Figure3 보다 링크의 이미지가 더 직관적이고 편했다. )
- 원본 이미지는 그림자와 조명의 변화에 따라 변동성이 있으므로 이를 고려할 수 있도록, 고정된 pyramid를 대신해서 학습가능한 feature pyramid로 대체했다
- 큰 모션을 추정할 수 있도록 하기 위해, 고정된 warping 방식을 사용하는 대신 warping layer를 사용했다
- 원본 이미지보다 optical flow 정보를 더 잘 드러내는 cost volume을 사용하기 위해 이를 계산하는 CNN layer를 사용했다
- warping과 cost volume은 학습가능한 파라미터를 사용하지 않음으로써 모델의 사이즈를 줄였다
- median filtering, bilateral filtering과 같은 전통적인 방식에서 사용한 후처리방식을 대체하기 위해서, context layer를 사용했다
✔️ Feature pyramid extractor
두 입력 이미지 \( \mathbf{I}_1\)과 \( \mathbf{I}_2\)이 주어졌을 때, 각 이미지의 feature 추출을 위해 \(L\) 개의 층을 갖는 pyramid를 사용한다. 이때 pyramid의 가장 최하층값은 원본 입력 이미지와 동일하다. \((i.e., \mathbf{c}_t^0=\mathbf{I}_t)\)
\(l\) 번째 pyramid 층의 feature 표현 \( \mathbf{c}_t^l\)을 만들기 위해서, \(l-1\) 번째 층의 feature 표현 \( \mathbf{c}_t^{l-1}\)을 convolutional filter layers를 통해 크기를 반으로 downsample한다. 첫 번째부터 여섯 번째 층까지의 feature channel 수는 각각 [16, 32, 64, 96, 128, 196]을 사용했다.
✔️ Warping layer
\({l}\)번째 층에서 두 번째 이미지의 feature를 첫 번째 이미지 쪽으로 warping 하게 되는데, 이때 \({l+1}\) 번째 층에서 가져온 optical flow를 2배로 키운 upsampled flow를 사용한다.
${ \mathbf{c}_w^l }( \mathbf{x} )= { \mathbf{c}_2^l}( \mathbf{x} + { \mathbf{up}_2}( \mathbf{w}^{l+1} )( \mathbf{x}) ), \tag{1}$
\(\mathbf{x}\)는 이미지의 픽셀 인덱스이고 \(\mathbf{up}_2(\mathbf{w}^{l+1})\)가 upsampled flow인데, 이는 pyramid의 최고 층에서는 그다음 층이 존재하지 않기 때문에 0으로 설정한다. 그리고 warping 연산과 CNN feature 및 flow 계산을 수행할 때 backpropagation을 가능하게 하기 위해서 bi-linear 보간법을 사용했다. 위와 같은 warping 방식은 물체의 모든 포인트의 움직임이 일정하지 않은 비병진 움직임에서도 기하학적인 왜곡을 보상해 줄 수 있으며, 이미지 패치를 올바른 크기로 설정할 수 있는 효과가 있다.
✔️ Cost volume layer
Cost volume은 현재 프레임의 픽셀과 일치하는 다음 프레임의 픽셀을 서로 매칭하는데 드는 "비용"을 계산한 정보이다. 이때의 "비용"을 본 논문에서는 첫 번째 이미지 feature와 warping 된 두 번째 이미지의 feature 사이의 correlation으로 정의한다.
$ \mathbf{c v}^l\left(\mathrm{x}_1, \mathrm{x}_2\right)=\frac{1}{N}\left(\mathbf{c}_1^l\left(\mathrm{x}_1\right)\right)^{\top} \mathbf{c}_w^l\left(\mathrm{x}_2\right), \tag{2} $
\({\top}\)는 전치 연산이며, \({N}\)은 column vector \({\mathbf{c}_1^l\left(\mathrm{x}_1\right)}\)의 길이이다. \({L}\) 번째 층 pyramid에서 제한적인 \({d}\) 픽셀 범위로 부분적인 cost volume를 계산하게 된다\(\left({i.e., \left|\mathrm{x}_1-\mathrm{x}_2\right|_{\infty} \leq d}\right) \). 최상층에서 한 픽셀의 움직임은 full resolution 이미지에서 \(2^{L-1}\) 픽셀의 움직임과 동일하기 때문에 \({d}\) 값은 작게 설정한다. 3D cost volume의 차원은 \(d^2 \times{H}^l \times{W}^l\)인데, \({H}^l\) 과 \({W}^l\)는 각각 \(l\) 번째 pyramid 층의 높이와 너비를 의미한다.
✔️ Optical flow estimator
여러 층의 CNN으로 구성된 Optical flow estimator은 cost volume, 첫 번째 이미지의 feature, upsampled 된 다음 층의 optical flow, 현재 층의 flow \({\mathbf{w}^l}\)를 입력으로 받는다. convolution layer의 채널 수는 모든 pyramid 층에서 동일하게 [128, 128, 96, 64, 32]을 사용한다. 단, 각 층의 estimator들은 parameter는 공유하지 않고 각자의 값을 가지며, \({l}_0\)층에 도달할 때까지 모든 층에서 반복된다. 또한 이 estimator 구조는 DenseNet connection을 함께 사용함으로써 성능을 강화될 수 있는데, 이 경우에는 이전 layer의 입력과 출력값을 현재 layer의 입력값으로 사용하게 된다. 따라서 전통적인 방식보다 더 직접적인 연결을 가짐으로써 이미지 분류 성능을 향상하는데 도움을 준다. 본 논문의 저자는 이 아이디어를 구현하여 테스트했다.
✔️ Context network
전통적인 flow 방법론은 주로 후처리 과정을 통해서 contextual 정보를 사용했다. 이 점에 착안해서 본 논문에서는 context-network를 사용하여, 각 pyramid 층에 맞도록 모델의 인지 범위(receptive filed) 크기를 효율적으로 늘릴 수 있게 구현했다. context-network는 이전 층과 현재 층에서 추정된 flow를 입력으로 받고, refined flow를 출력한다.
Context-network는 feed-forward CNN이며 dilated convolution을 기반으로 고안되었다. 총 7개의 convolution layer로 구성되어 있고, 각 layer는 \(3\times3\)의 spatial 한 kernel을 갖는다. 또한 각 layer들은 서로 다른 dilation 상수 \({k}\)를 갖는데, 이는 입력 unit이 layer 내에서 filter 되는 과정에서 수평 혹은 수직으로 \({k}\) 개만큼 떨어진 unit들만을 고려한다는 의미이다. 이러한 구조는 큰 수의 dialation 상수를 가짐으로써 더욱 넓은 인지 범위를 가지게 되지만 계산량 자체는 크게 늘어나지 않는다는 효과가 있다. 본 논문에서는 최하층부터 최상층까지 [1, 2, 4, 8, 16, 1, 1]의 dilation 상수 값을 사용했다.
✔️ Training loss
Pyramid의 각 층의 pyramid extractor와 optical flow estimator들을 아울러, 모델 전체에서 학습할 수 있는 모든 parameter의 집합을 \({\Theta}\)로 정의한다. (단, warping과 cost volume 계산에는 학습 가능한 parameter가 없음에 주의). 또한 pyramid \({l}\) 층에서 추정한 flow를 \({\mathbf{w}_{\Theta}^l}\)로, 일치하는 supervision signal을 \({\mathbf{w}_{\mathbf{GT}}^l}\)로 표기한다. 본 논문에서는 FlowNet에서 제안된 multi-scale training loss를 사용한다.
$ \mathcal{L}(\Theta)=\sum_{l=l_0}^L \alpha_l \sum_{\mathrm{x}}\left|\mathbf{w}_{\Theta}^l(\mathrm{x})-\mathbf{w}_{\mathrm{GT}}^l(\mathrm{x})\right|_2+\gamma|\Theta|_2, \tag{3} $
\({|\cdot|}_2\)은 벡터의 \(\mathbf{L}2\)norm을 계산하는 것이고, 두번째 항은 모델의 parameter에 대한 regularization term을 의미한다. Fine-tuning을 위해서는 다음과 같이 robust한 training loss를 사용한다.
$ \mathcal{L}(\Theta)=\sum_{l=l_0}^L \alpha_l \sum_{\mathbf{x}}\left(\left|\mathbf{w}_{\Theta}^l(\mathrm{x})-\mathbf{w}_{\mathbf{G T}}^l(\mathbf{x})\right|+\epsilon\right)^q+\gamma|\Theta|_2 \tag{4} $
\({|\cdot|}\)은 \(\mathbf{L}1\)norm을 계산하는 것이고, \({q < 1}\)의 제약을 통해 outlier에 대해 더 적은 페널티를 부여하는 효과를 준다. (\(\epsilon\)은 아주 작은 상수)