人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

3日で作る高速特定物体認識システム (1) 物体認識とは

情報処理学会の学会誌『情報処理』の2008年9月号(Vol.49, No.9)に「3日で作る高速特定物体認識システム」という特集記事があります。OpenCVを用いた面白そうなプロジェクトなのでレポートにまとめてみようと思います。3日でできるかはわからないけど。

残念ながらこの記事はPDFを無料でダウンロードすることができません(CiNiiでオープンアクセス可能になったみたいです)。なので会員以外で元記事が読みたい人は図書館でコピーする必要があるかも・・・また、2009年9月号の人工知能学会誌にも物体認識の解説「セマンティックギャップを超えて―画像・映像の内容理解に向けてー」があります。こちらも非常に参考になりますが同様にPDFが手に入りません・・・。他にもいくつかわかりやすい総説論文へのリンクを参考文献にあげておきます。

物体認識とは

物体認識(object recognition)は、画像に写っているものが何であるかを言い当てる処理で、特定物体認識と一般物体認識に分類されています。特定物体認識は、ある特定の物体と同一の物体が画像中に存在するかを言い当てる(identification)処理で、一般物体認識は、椅子、自動車、虎など一般的な物体のカテゴリを言い当てる(classification)処理です。特定物体認識はコンピュータの進歩で比較的容易になってきており商用利用もされているそうですが、本当に難しいのは一般物体認識で、近年の研究はこちらが中心でブームだそうです。

一般物体認識の難しさはセマンティックギャップと言われています。たとえば、同じ自動車というカテゴリでもいろんな形・色・種類の自動車がありますからね。人間はどんな色・形でもなぜか自動車とずばり言い当てられますが、コンピュータには自動車の本質的な意味がわからないため難しいわけです。というか人工知能の困難さは機械が意味(言葉でも画像でも音声でも)を理解できないことからきていると思います。近年はWeb上のタグ付き大量画像データと機械学習の手法を駆使して意味を自動学習させようとする研究が多い印象を受けています。

今回は表題の記事を参考に実装が比較的容易な特定物体認識を作ってみます。

物体認識システムの構成

各論に入る前にシステムの全体像を示しときます。


f:id:aidiary:20091018162206p:plain
※http://www.m.cs.osakafu-u.ac.jp/IPSJ_3days/から引用

特定物体認識では、認識させたい物体をWebカメラなどで撮影して局所特徴量を抽出し、物体モデルデータベースにあらかじめ登録しておきます。検索は、クエリとして認識させたい画像を写して局所特徴量を抽出し、物体モデルデータベース中の各物体の局所特徴量との間で類似度を計算します。その中から類似度がもっとも高いものを認識結果として返すというのが全体の流れです。

表題の記事では、下の順でプロジェクトを進めようって感じです。

(1) 低速特定物体認識システムの構築(1日目)

局所特徴量の代表であるSIFT(Scale-invariant feature transform)特徴量を画像から抽出するモジュールを作成し、物体データベースモデルの検索にもっとも単純な線形探索で最近傍(類似度がもっとも近い点)を探す。線形探索は遅すぎて実用的ではないが、とりあえず動くシステムを作る。

(2) 近似最近傍探索を用いた高速化(2日目)

線形探索は遅すぎるので、物体モデルデータベースの局所特徴量をkd-treeやLocality Sensitive Hashing(LSH)でインデキシングして最近傍探索を高速化する。

(3) ユーザインタフェースの構築(3日目)

物体モデルデータベースの作成や認識結果の表示を行うインタフェースを作成する。

3日で進めるのはけっこうハードです・・・

局所特徴量

特定物体認識システムでは、データベースに登録されたのと同一の物体のみ認識させることができます。面白いのはまったく同じ画像じゃなくても認識できることですかね。物体を撮影する向き、サイズが多少変わっていたり、一部が隠れていてもきちんと認識できます。これは、画像から抽出した多数の局所特徴量を使うことで可能となります。画像の局所特徴量によるモデル化は、この分野を大きく発展させたブレークスルーだそうです。下は局所特徴量の代表であるSIFTの例です。

f:id:aidiary:20091018170018j:plain
f:id:aidiary:20091018171736j:plain

上は元のレナさん画像です。下はサイズを80%に縮小し(スケール)、90度回転させ、明度を落とし(照明)、周囲を隠蔽(オクルージョン)した画像です。個々の黄色い点がキーポイント(Interest point、特徴点など呼び方はいろいろ)で、各キーポイントがそれぞれ128次元のSIFT特徴量を持ちます。この画像だと大体1000個くらいのキーポイントが得られます。比べてみるとわかるように画像が多少変化していてもキーポイントの位置は大体同じでSIFT特徴量の値も近い(後で出力します)ことがわかります。SIFTは画像のスケール変化、照明変化、平行移動、回転、隠蔽(オクルージョン)に対して頑健といわれる理由です。つまり、左のレナさんの局所特徴量を物体モデルデータベースに登録しておけば、多少変化してしまった右のレナさんも似た局所特徴量を持つためちゃんと認識できるってわけですね。

類似画像検索システムを作ろう(2009/10/3)では、カラーヒストグラムという特徴量を使いましたが、これは大域(global)特徴量といって画像全体から1つの特徴量を得ます。一方、局所(local)特徴量は画像全体からではなく、画像の局所から多数(上の例では約1000個)の特徴量を得ています。これはけっこうすごい考え方の転換だと思います。

今日は疲れたのでここまで。3日で作る高速特定物体認識システム (2) SIFT特徴量の抽出(2009/10/24)につづきます。

参考文献