日記とか、工作記録とか

自分に書けることを何でも書いてゆきます。作った物、買ったもの、コンピュータ系の話題が多くなるかもしれません。

Apache alikeを試してみる(その4:データの作成)

さらにつづきです。

  1. Apache alikeを試してみる(その1:準備と前置き) - 日記と、買い物記録
  2. Apache alikeを試してみる(その2:前提環境構築) - 日記と、買い物記録
  3. Apache alikeを試してみる(その3:alikeのインストール&コンパイル) - 日記と、買い物記録
  4. Apache alikeを試してみる(その4:データの作成) - 日記と、買い物記録
  5. Apache alikeを試してみる(その5:デモWebサーバの起動) - 日記と、買い物記録
  6. Apache alikeを試してみる(おまけ:run_desc_extractor.pyの改良) - 日記と、買い物記録
  7. Apache alikeを試してみる(おまけ2:動作例とサンプル画像) - 日記と、買い物記録

画像データの準備と解析

その1で紹介した参考ページによれば、alike/trunk/demo/ukbenchというディレクトリを用意して、そこにテスト用の画像をダウンロードすることになっています。これでもよいとは思うのですが私は別のディレクトリ名で動作させたかったので、ここにpicディレクトリを作成しました。

$ cd ~/alike/trunk/demo/
$ mkdir pic

この場所に自分で所有している写真を多数放り込みます。サブディレクトリは検索されない様子だったので、JPEGファイルをこのディレクトリ直下に配置しました。サイズは1.7GB、ファイル数は10215です。

参考ページの手順に従うと、その後run_desc_extractor.pyを実行することになるのですが、画像ディレクトリの場所を変更したので、一部書き換える必要があります。vi等でファイルを開いてIMAGES_DIRを変更します。

IMAGES_DIR = 'pic'

その後は参考ページの通り実行です。demoディレクトリから実行します。

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

run_desc_extractor.pyの処理はたぶん10分くらいだったと思います。その後のant pivは30秒程度です。次のant kmeansは相当時間がかかります。参考ページでは400ファイルの画像で、十分から数十分とあったのでかなりかかることを覚悟していたのですが、意外に63分で終了しました(ちゃんとできてるのかな……)。(注1)

$ ant kmeans
:
:
:
     [java] 情報:     Combine input records=0
     [java] 5 04, 2014 10:13:56 午前 org.apache.hadoop.mapred.Counters log
     [java] 情報:     Map output records=7000
     [java] 5 04, 2014 10:13:56 午前 org.apache.hadoop.mapred.Counters log
     [java] 情報:     SPLIT_RAW_BYTES=819
     [java] 5 04, 2014 10:13:56 午前 org.apache.hadoop.mapred.Counters log
     [java] 情報:     Reduce input records=7000

BUILD SUCCESSFUL
Total time: 63 minutes 2 seconds
$ 

さらにant clusterdumpを実行します。実はこのあたりで何をしているのか、まったくわかっていません。最後にBUILD SUCCESSFULとでているので、大丈夫だろうと考えてどんどん進みます。

$ ant clusterdump
:
:
:
alike-compile:
    [javac] /Users/WindVoice/alike/trunk/build.xml:44: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

check-hadoop:

clusterdump:
     [java] 2014-05-04 10:17:19.533 java[67355:1903] Unable to load realm info from SCDynamicStore
     [java] 5 04, 2014 10:17:50 午前 org.slf4j.impl.JCLLoggerAdapter info
     [java] 情報: Command line arguments: {--dictionaryType=[text], --distanceMeasure=[org.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure], --endPhase=[2147483647], --input=[file:/Users/WindVoice/alike/trunk/demo/output-clusters/clusters-5-final], --output=[result-centroids.txt], --outputFormat=[TEXT], --startPhase=[0], --tempDir=[temp]}
     [java] 5 04, 2014 10:17:51 午前 org.slf4j.impl.JCLLoggerAdapter info
     [java] 情報: Wrote 1000 clusters

BUILD SUCCESSFUL
Total time: 40 seconds
$ 

最後にant qvを実行します。

$ ant qv
:
:
:
alike-compile:
    [javac] /Users/WindVoice/alike/trunk/build.xml:44: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

qv:

BUILD SUCCESSFUL
Total time: 51 seconds
$ 

これでいわゆる検索インデックスができたはず(おそらく)です。次回はいよいよ仕上げとなる簡易検索Webサーバの構築です。

(注1)
run_desc_extractor.pyは、デフォルトで400ファイルまでしか画像を処理しないことがわかりました。全ての画像ファイルを処理したい場合には引数にallを渡す必要があります。あるいは、スクリプト内のMAX_IMGSの数を増やすことでも対処できるはずです。

$ python run_desc_extractor.py all

入門 機械学習

入門 機械学習

集合知プログラミング

集合知プログラミング