前回インストールしたCaffeの動作確認を兼ねて、今回は、CNNのCaffenetを用いて一般物体認識をしてみます。Caffenetは、ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVR2012)の分類タスクで優勝したAlexNetを、normalization層とpooling層の順番を変えるなどの変更を加えたものです。なお、AlexNetを代表とするCNNの概要については、次回以降の記事にて紹介する予定です。
まず、ImageNet2012の訓練データで学習済みのCaffenetのモデルbvlc_reference_caffenet.caffemodelを、次のスクリプトを実行してダウンロードします。
>cd /usr/local/caffe >sudo python scripts/download_model_binary.py models/bvlc_reference_caffenet
該モデルは、Caffeのインストール先の/usr/local/models/bvlc_reference_caffenetに保存されます。
次に、スクリプトdata/ilsvrc12/get_ilsvrc_aux.shを実行し、Caffeで設定されているImgeNet2012の訓練、テストおよびバリデーションに用いられる画像ファイル名の一覧、ラベル一覧などをダウンロードします。これらのファイルは、/usr/local/data/ilsvrc12に保存されます。
>sudo /usr/local/data/ilsvrc12/get_ilsvrc_aux.sh >ls /usr/local/data/ilsvrc12/ -1 det_synset_words.txt get_ilsvrc_aux.sh imagenet.bet.pickle imagenet_mean.binaryproto synsets.txt synset_words.txt test.txt train.txt val.txt
ImageNet2012の分類タスクは、1,000種類のクラスがあります。クラスの名前は、/usr/local/caffe/data/ilsvrc12/synset_words.txtに下記のように記載されています。
n01440764 tench, Tinca tinca n01443537 goldfish, Carassius auratus n01484850 great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias n01491361 tiger shark, Galeocerdo cuvieri n01494475 hammerhead, hammerhead shark n01496331 electric ray, crampfish, numbfish, torpedo n01498041 stingray n01514668 cock n01514859 hen n01518878 ostrich, Struthio camelus ....
ここで、1列目の「nxxxxxxxx」は、WordNetで定義されている同義語集合synsetのidです。そして、2列目が、各synsetに属する同義語です。
次に、ホームディレクトリに~/Works/DeepNetというフォルダを作り、下記からダウンロードできるclassify_caffenet.pyというpythonスクリプトを作成します。
http://revast-blog.com/download/index.php?fname=classify_caffenet.py
今回は、Irishi terrier(アイリッシュ・テリア)を分類してみます。まず、アイリッシュ・テリアの画像を、Wikipediaからダウンロードし、~/Works/DeepNet/images/irish_terrer.jpgとして保存します。そして、pythonスクリプトcalssify_caffenet.pyを実行します。
> python classify_caffenet.py images/irish_terrer.jpg label score synset_id 0 Irish terrier 6.657821e-01 n02093991 1 standard poodle 1.216341e-01 n02113799 2 Airedale 8.359165e-02 n02096051 3 Lakeland terrier 4.101080e-02 n02095570 4 wire-haired fox terrier 1.805066e-02 n02095314 5 Brabancon griffon 1.581621e-02 n02112706 ...
上記のように、アイリッシュ・テリアがスコア0.67で予測できています。ちなみに、スコアが0.12と2番目に高いクラスは、standard poodleでした。また、3位以降は、Airedale、Lakeland terrier、wire-haired fox terrierと、いずれもテリアでした。また、上記のスクリプトを実行すると、下記のように分類対象の画像と、クラス毎のスコアを示す画像がファイルclassify_caffenet_result.pngに保存されます。