FlowNet

Dosovitskiy 2015 · 論文

一行要約 — オプティカルフロー推定のための初のエンドツーエンドCNNであり、相関層と、この分野で標準となった合成学習データセットFlying Chairsを導入した。

問題

2015年までにCNNは認識タスクを一変させていたが、オプティカルフローはその成功例には含まれていなかった:Horn-Schunck系譜の変分手法(DeepFlow、EpicFlow)は依然として支配的であり、1フレームあたり数秒から数分を要していた。フローは以前のCNN応用とは根本的に異なる——ピクセルごとの局所化だけでなく、2つの画像間の特徴をマッチングする必要がある。これを学習する上で2つの障害があった:密な2フレーム対応を表現できるアーキテクチャが何であるかが誰にも分からなかったこと、そしてCNN規模の密な正解フローを持つデータセットが存在しなかったこと(実シーンの真の対応関係を得ることはほぼ不可能である;最大のものであるSintelでも学習用ペアはわずか1,041個しかなかった)。FlowNetはこの両方に取り組んだ。

手法とアーキテクチャ

2つのエンコーダ・デコーダアーキテクチャがあり、それぞれ9つの畳み込み層を持つ(6層でstride 2、各層の後にReLU、全結合層はなく入力サイズは任意;フィルタは7×77\times7から5×55\times53×33\times3へと縮小し、チャネル数はstride-2の層ごとにおおよそ2倍になる):

c(x1,x2)=o[k,k]×[k,k]f1(x1+o),f2(x2+o)c(\mathbf{x}_1,\mathbf{x}_2)=\sum_{\mathbf{o}\in[-k,k]\times[-k,k]}\langle \mathbf{f}_1(\mathbf{x}_1+\mathbf{o}),\,\mathbf{f}_2(\mathbf{x}_2+\mathbf{o})\rangle

パッチサイズK:=2k+1K:=2k+1に対して——構造的には畳み込みの1ステップだが、データとデータを畳み込むため学習可能な重みを持たない。すべてのw2h2w^2 h^2パッチペアを比較することは実行不可能なので、変位はddに制限され(近傍D:=2d+1D:=2d+1)、stride s1,s2s_1,s_2が用いられ、相対変位はチャネルとして組織化され、w×h×D2w\times h\times D^2の出力を与える。選ばれたパラメータ:k=0k{=}0d=20d{=}20s1=1s_1{=}1s2=2s_2{=}2

洗練:「逆畳み込み(upconvolutional)」層(unpooling+畳み込み)が粗い特徴を拡張する;各ステップで、逆畳み込みされた特徴は対応する縮小部分の特徴マップとアップサンプリングされたより粗いフロー予測と連結され、解像度を4回倍にして4分の1解像度に達し、その後バイリニアアップサンプリングによって全解像度になる。オプションの変分洗練(‘+v’)は、マッチングを用いない変分ソルバーの粗から細への20回の反復と、全解像度での5回の反復を実行し、境界を尊重する平滑化α=exp(λb(x,y)κ)\alpha=\exp(-\lambda b(x,y)^{\kappa})を用いる。

学習:損失は終点誤差(EPE——予測フローと正解フローのユークリッド距離、ピクセルにわたって平均);Adam(β1=0.9\beta_1{=}0.9β2=0.999\beta_2{=}0.999)、バッチサイズ8、学習率10410^{-4}、30万反復後に10万反復ごとに半減(FlowNetCorrは勾配の爆発を避けるため10610^{-6}からのウォームアップが必要)。データは専用に構築されたFlying Chairsセット:809種類の椅子(各62視点)を964枚のFlickr背景の上でアフィン変換的に動かしたもので、変位統計はSintelに合わせられている——正確な密なフローを持つ22,872枚の画像ペア。積極的なオンライン拡張(並進±20%、回転±17°、スケーリング0.9〜2.0、ノイズ、明度/コントラスト/ガンマ/色)は依然として重要である。

実験結果

SLAMにおける意義

FlowNetは深層オプティカルフローという分野全体を立ち上げ、その子孫(RAFTとそのバリアント)は今日、DROID-SLAMのような学習型視覚オドメトリおよびSLAMシステム内部の密な対応エンジンとして機能している。その2つの中核的な成果物は10年後の今も基盤として残っている:相関層(PWC-Net、RAFT、そして本質的にその後のすべてのフローネットワークで再利用される)と、合成データのレシピ——正確な正解値を持つレンダリングデータで学習し、Sintel/KITTIで評価する——は、FlyingThings3D、AutoFlow、Kubricがすべて従っている。

関連ノート