INFORMATION
テクノロジ

OSSの類似画像検索プロジェクト Apache alike のご紹介

関口宏司 著

はじめに

OSSの類似画像検索プロジェクト Apache alike (アパッチ アライク)を、付属のデモを動かしながら紹介します。

Apache alike とは?

Apache alike はテキスト検索エンジンである Apache Lucene を画像検索に応用した OSS のプロジェクトです。alikeは昨年12月に筆者がApacheに提案して承認され、現在は Apache Labs のもと開発が進められており、Apache License 2.0 で公開されています。

Apache alike は下表のOSSを適宜利用して作成されています。

OpenCV画像から特徴量を抽出する
Apache Mahout特徴点をクラスタリングする
Apache Lucene類似画像を検索する

alike での類似画像検索の主要な部分は上記の既存OSSを利用しているため、alike 自身は非常にコンパクトな構造になっています。下図にalikeのアーキテクチャを示します。

Apache alike architecture

Apache alike architecture

Apache alikeのデモ

下記のリンクをクリックすると、類似画像検索を体験できます。リンクをクリックして表示された画面の一番上の画像が「検索元」の画像で、2番目以降の画像が検索元と似ていると判断された類似画像一覧です。Luceneにより「似ている順」に表示されています。

本デモはukbenchで提供されている画像を用いています。ukbenchは同じオブジェクトやシーンを視点を変えて撮影した4枚1組の画像セットを提供しています。したがって、表示された画像の上位4枚に同じオブジェクトやシーンがあれば、100%の精度で検索できているということになります。

デモの最初の画像の下にあるボタンをクリックすると、「検索元」画像をランダムに選択して類似画像検索をすることもできます。

alikeには同様のデモを実行する環境が付属しています。以下では実際にデモを動かす手順を紹介します。

Apache alike 付属のデモを動かす

まずはalikeの実行に必要なソフトウェアをインストールします。alikeのREADME.txtに詳しく書かれていますが、ここではその概要を示します。

まずは一番肝心な(!)OpenCVとPythonをインストールします。もし筆者と同じMac OS X 10.6.8 (Snow Leopard)のマシン環境であれば、以下のようにインストールしてください。

$ sudo port -d selfupdate
$ sudo port -d sync
$ sudo port -f activate ncurses @5.9_1
$ sudo port install python27
$ sudo port select --set python python27
$ sudo port install py27-numpy
$ sudo port install opencv +python27
WindowsやLinuxなど他の環境の場合はGoogleなどで検索しながら適切な方法を探してみてください。たとえば、Ubuntu Desktop (32bit) 12.04.1 (LTS)にOpenCV 2.4.3をインストールする場合は、こちらのブログで紹介されている手順がよいようです。

次にJavaとApache Ant、そしてApache Ivyをインストールします。AntはZIPファイルをダウンロードして展開したディレクトリの下のbinディレクトリにPATHを通すこと、Ivyはダウンロードして展開した中に含まれるivy-X.X.X.jarというようなJARファイルを、Antを展開してできたlibというディレクトリの下にコピーするようにすればOKです。

あとはalikeを次のようにSubversionを使って入手してビルドすれば、MahoutやLuceneはIvyがダウンロードしてくれます。

$ svn export http://svn.apache.org/repos/asf/labs/alike
$ cd alike
$ ant

以上でalikeの実行に必要なソフトウェアはすべてそろいました。次はデモを実行してみます。方法はこちらもREADME.txtに詳しく書かれていますが、ここではその概要を示します。

まず、類似画像検索で使用するテスト画像を入手します。ここではukbenchを次のように用意します(注:本記事執筆時、ukbenchのリンク先が消失しています。現在確認中ですが、デモのPythonプログラムを適宜書き換えることで他の画像でテストすることは簡単にできます)。

$ cd demo
$ mkdir ukbench
$ cd ukbench
$ wget http://www.vis.uky.edu/~stewe/ukbench/ukbench.zip
$ unzip ukbench.zip

そして次のようにdemoディレクトリに戻り、descディレクトリを作成します。そしてOpenCVを呼び出すPythonのプログラムを実行して画像の特徴量を抽出し、descディレクトリに出力します。なおukbenchでは10,200枚の画像が配布されていますが、デモで実行するには大きすぎるので、デモではそのうちの400枚を使用しています。

$ cd ..
$ ant clean
$ mkdir desc
$ export PYTHONPATH=../src/python; python run_desc_extractor.py

次にAntを通じて抽出した特徴量のクラスタリングとベクトル量子化を行います。以下のkmeansというAntターゲットはk平均法によるMahoutを使ったクラスタリングを行っている部分ですが、画像が400枚と少ないため、十〜数十分で終了します。より大きな画像セットを用いる場合、複数ノードを使った本格的なHadoopクラスタ上で実行するのがよいでしょう。その方法についてはREADME.txtに書かれていますので適宜参照してください。

$ ant piv
$ ant kmeans
$ ant clusterdump
$ ant qv
上記の最後のqvターゲットを実行すると、solr-demo-data.xmlというファイルができます。そうです。alikeはLuceneを使っているとはいいつつも、一般ユーザにとってはよりなじみ深いApache Solrが使えるとうれしいですね。そしてalikeのデモではSolrにPOSTできるXMLファイルを生成してくれるようになっています。

そこで次にSolrを準備し、インデックスに登録します。

$ wget http://ftp.kddilabs.jp/infosystems/apache/lucene/solr/4.0.0/apache-solr-4.0.0.tgz
$ tar xvzf apache-solr-4.0.0.tgz
$ cd apache-solr-4.0.0/example
$ java -Dsolr.solr.home=../../solrhome -jar start.jar
# 別のコンソールから
$ ./post.sh solr-demo-data.xml

そして次のように簡易アプリケーションサーバを起動して、ブラウザから http://localhost:8080/ にアクセスすると先に示したデモと同様の動作をさせることができます。

$ python demoserver.py

まとめ

以上Apache alikeによる類似画像検索について、実際のデモを動作させることを通じて簡単に紹介しました。類似画像検索はまだまだ研究が進められる分野であり、alike単体としてもクラスタ数やMahout実行時のノード数やLuceneの各種パラメータ(IDF、ノルム、coordなど)による調整で検索精度や速度性能を向上させられる余地があります。今後の動向にぜひご注目ください!


トレーニングコース

ロンウイットのトレーニングは、Lucene/Solrの経験豊富なコミッターの
監修のもと開発されたハンズオン(実習)形式のコースです。

セミナー

ロンウイットのApache Software Foundationコミッターが、情報検索の基礎、自然言語処理、そして、ユーザにとっての効果についてご説明させていただきます。