JubatusとOpenCVで一般物体認識
はじめに
先日の Jubatus Casual Talks で、OpenCVを使った一般物体認識の概要と、注意しなければならないポイントについて発表させていただきました。
詳しくは上記のスライドを御覧ください。
一般物体認識とは
要するに、画像を与えた時にそこに何が写っているのかを推定することです。
ゾウの写真ならゾウ、自転車の写真なら自転車だとコンピュータに判断させるのが目的です。
ところが、これがなかなか難しい問題であまりうまくいっていません。
Googleの画像検索は一見この問題を解決しているように見えますが、画像検索の場合はその画像の周辺にあるテキスト情報が利用できるのでちょっと違います。
たとえば、写真のすぐ下に「ウサギかわいい」って書いてあったらたぶんウサギの写真だろうと判断できます。
このような情報が与えられず、画像のみから対象を判断するのが一般物体認識です。
どう難しいか
人間は一般物体認識を簡単に行うことができますが、機械でやるのは非常に困難です。
たとえば、自転車は見る向きによって形状がまったく違いますし、ロードレーサーとママチャリでは形状もかなり異なります。
また、椅子なども一口に椅子といっても様々な形や色のものがあり、一概に「こういう形状のものが椅子である」とは定義できません。
折りたたみ椅子とマッサージチェアは同じ椅子ですが、視覚的な共通点はほとんどありません。
どう解決するか
先日ブログに書いたDeep Learningが最近流行りつつありますが、今まで(そして今後しばらく)の主流は Bag of Features (BoF) という手法です。
これは、文書分類で成功した Bag of Words の応用です。
Bag of Words というのは、文書を分類するとき(わかりやすい例だと迷惑メールフィルタ)、どの単語がどれくらい含まれているかだけを考慮し、各単語の係り受け構造は無視する方法です。
一見上手くいかなさそうですが、下手に文法を解析するより単語の頻度だけを利用したほうが精度が良くなるのです。
一般物体認識の場合は、画像をバラバラな特徴群にして、それらを入力にして機械学習することで結果を得ます。
画像をバラバラにするといっても、単純に画像を分割しただけでは精度が出ないので、そこは非常にうまくやる手法が色々提案されています。