Deep Learningの開発環境(Caffeの動作確認)

前回インストールした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に保存されます。
classify_caffenet_result