はじめに
CNNの前処理としてOpenCVでBINGを使ってみた
R-CNNとしてSelective search を使ってみた
これまで、BINGやSelective Searchを使ってR-CNNを行ってきました。
が、折角CNN(畳み込み処理)を行うならその時にオブジェクトっぽい箇所を見つけてよと思った方はいないでしょうか。安心してください、それできますよ!
ということで、今回はCNNで位置推定を行います。(※Sklearn-theanoのGitHubではLocalizing - 位置推定と記載されているので以下こちらの表現を使うことにします)
Sklearn-theanoって何?
Sklearn-theanoはディープラーニングのフレームワークであるTheanoを抽象化することでディープラーニングを容易にするライブラリです.似たようなものだと、Kerasがあります。こちらは流行っていてかなり良い感じですが、今回は敢えて無名?のSklearn-theanoを使ってみます。
Sklearn-theanoならこんなことができちゃうよ
前述のようにSklearn-theanoは位置推定だけではなく画像の分類や推定なども簡単にできます。
また、OverFeat, AlexNet, VGGNet, GoogLeNet などの有名所のライブラリを簡単に試すことができます。
色んな学習済みモデルを使って実践的な問題を解いてみたい。
そんなあなた、Sklearn-theanoを使ってみてはいかがでしょうか?
早速使ってみよう
https://github.com/sklearn-theano/sklearn-theano
上記のリポジトリをクローンして、コマンドの python setup.py install でインストールします。また、こちらのパッケージが必要なので、インストールしていない場合は先にインストールしておきましょう。
・numpy
・scipy
・theano
・scikit-learn
・pillow
結果
今回はSampleにあるplot_single_localization.pyを使ってみました。
最後のフレームでナマケモノの位置が推定されています。
かなりざっくり説明すると、最初に黄色の四角い領域内でオブジェクトらしい点を推定していき、集まった点郡を最終的なオブジェクトとして検出します。
検出の詳しい過程はこちらのページを参照してください。
さて、気になる処理時間ですがおよそ310sec.... 約5分!!!!
長い。。。公式にも352.80 secondsと書いてあるので間違いなさそうです。
まとめ
今回は、Sklearn-theanoというマイナーなライブラリを使って、CNNで位置推定を行いました。ある程度の時間がかかっても問題ないという場合は使ってみるのも良いかもしれません。が、スピードが求められる場合は言うまでもなく厳しいと思います。
どなたかリアルタイムに耐えうる一般物体検出方法をご存知な方、一報ください