作成者 :(株)クラスキャット セールスインフォメーション
作成日 : 01/25/2019
ClassCat® TF/ONNX Hub とは
「ClassCat® TF/ONNX Hub」はクラスキャットが提供する実用性の高い機械学習モデルのレポジトリです。各モデルは TensorFlow 固有フォーマットと ONNX フォーマットの両者で提供されます。 [ClassCat® ONNX Hub 詳細]
- ONNX (Open Neural Network Exchange) は深層学習モデルのためのオープンなフォーマットで、異なるオープンソースの深層学習フレームワーク間の相互作用を可能にします。
「ClassCat TF/ONNX Hub」で提供されるモデルについてはクラスキャットが検証の上で仕様を公開致しますので、ユーザ企業は希望するモデルを自由に選択することができます。更にユーザ企業のデータセットによる再調整も含めて実運用するために必要なトータルサポートを提供致します。
今回は動画におけるオプティカルフロー推定モデルとして FlowNet を紹介致します。題材は Flying Chairs と呼ばれる少し風変わりなデータセットを使用しています。
オプティカルフロー推定モデルの紹介
オプティカルフローとは
オプティカルフロー とは、(OpenCV の Python チュートリアル : Video 解析 : Optical Flow によれば、) オブジェクトまたはカメラの移動により引き起こされた 2 つの連続するフレーム間の画像オブジェクトの見かけ上の動きのパターンです。それは 2D ベクトル場で、そこでは各ベクトルは変位ベクトルで最初のフレームから 2 番目のフレームへの点群の移動を示します。
OpenCV では疎なオプティカルフローとして Lucas-Kanade 法と、Gunner Farneback のアルゴリズムをベースとする密なオプティカルフローの実装が提供されています。
FlowNet
深層学習の ConvNet (CNN) はコンピュータビジョンの物体認識や物体検出タスクにおいては成果を出し続けていますが、オプティカルフロー推定についての研究は多くはありません。
その中でドイツのフライブルク大学のコンピュータビジョン・グループを中心にオプティカルフロー推定のための FlowNet が提案されています。基本モデルには FlowNetS (Simple) と FlowNetC (Correlation) があり、FlowNet 2.0 では品質と速度の向上が図られています :
- FlowNet: Learning Optical Flow with Convolutional Networks
Philipp Fischer, Alexey Dosovitskiy, Eddy Ilg, Philip Häusser, Caner Hazırbaş, Vladimir Golkov, Patrick van der Smagt, Daniel Cremers, Thomas Brox
(Submitted on 26 Apr 2015 (v1), last revised 4 May 2015 (this version, v2)) - FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks
Eddy Ilg, Nikolaus Mayer, Tonmoy Saikia, Margret Keuper, Alexey Dosovitskiy, Thomas Brox
(Submitted on 6 Dec 2016)
◆ FlowNet (2.0) については現在では数多くの実装が公開されています :
オプティカルフロー推定モデル
FlowNet を考案したフライブルク大学のコンピュータビジョン・グループが、利用した データセット も併せて公開してくれています。ここではその中の一つである Flying Chairs というデータセットを利用します。
扱うデータの基本要素はワンペアの画像です。左側の画像から右側の画像に移行する際にオブジェクトが移動しています :
![]() |
![]() |
そしてモデルを適用すると、オプティカルフロー推定が得られます。
左側の画像は順方向の流れで、右側の画像は逆方向の流れです :
![]() |
![]() |
別の組み合わせを見てみましょう :
![]() |
![]() |
![]() |
![]() |
更にもう一組 :
![]() |
![]() |
![]() |
![]() |
◆ 次に別のデータセット上で確認してみます。
Flying Chairs 2 を利用します。類似のコンテンツですが、データセットとしては完全に別物です :
![]() |
![]() |
![]() |
![]() |
概ね上手くいっているようです。もう一組確認してみましょう :
![]() |
![]() |
![]() |
![]() |
以上