TensorFlowのInception-v3で画像を分類してみた(Python API編)

tensorflow
TensorFlowのチュートリアルの画像認識(Python API編)に従って、Inception-v3による画像の分類にチャレンジしてみました。

スポンサーリンク

Inception-v3

『インセプション』と言うと、今年のアカデミー主演男優賞を受賞したレオナルド・ディカプリオの昔の映画を思い出してしまいますが、Inception-v3は、映画の名前ではなく、GoogleのImageNet画像認識モデルの名前です。

(2016/4/24追記)

Googleフォトでは、22のレイヤーで構成されるニューラルネットワークを採用したマシンラーニングモデル「Inception」(同名の映画から命名)を使用している。

と言う記事を見つけました。映画『インセプション』を思い出したのは、偶然ではなかったようです。

チュートリアルの画像認識

TensorFlowのチュートリアルの画像認識(Python API編)(https://www.tensorflow.org/versions/r0.7/tutorials/image_recognition/index.html)を実行してみます。

GitHubからTensorFlowをcloneします。

$ cd ~
$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow

以下の「cuDNN v4に対応したTensorFlow 0.7.1をインストールしてみた」の記事でインストールしたTensorFlow(GPU版)の仮想環境をアクティブにします。

cuDNN v4に対応したTensorFlow 0.7.1をインストールしてみた
CUDA 7.5とcuDNN v4に対応したGoogleのTensorFlow 0.7.1(GPU版)をUbuntu 14.04にインストールしてみました。
$ souce ~/tensorflow-gpu/bin/activate

Python APIで画像を分類します。

(tensorflow-gpu)$ cd ~/tensorflow/tensorflow/models/image/imagenet
(tensorflow-gpu)$ python classify_image.py

classify_image.pyを実行すると、Inception-v3等がダウンロードされ、画像認識が始まります。
Python APIで使用されるパンダ画像の分類結果は、チュートリアルでは、

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.88493)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00878)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00317)
custard apple (score = 0.00149)
earthstar (score = 0.00127)

となっていますが、少し異なるスコアが出力されました。

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89233)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00859)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00264)
custard apple (score = 0.00141)
earthstar (score = 0.00107)

なお、チュートリアル(C++ API編)で使用されるグレース・ホッパー提督の画像の分類結果は、丸め誤差の範囲で等しかったので、正しく動作していると思います。

チュートリアル以外の画像認識

指定した画像を認識させる場合、以下のコマンドを実行します。

(tensorflow-gpu)$ python classify_image.py --image_file <path/to/image>

オプションの使い方は、--image_fileオプションで認識させる画像を指定します。

機械学習プロフェッショナルシリーズの『深層学習』(岡谷貴之・著)の109ページにおいて、top-1が間違っていた3つの画像をダウンロードし、画像認識させてみました。

167282325

acoustic guitar

(tensorflow-gpu)$ python classify_image.py --image_file 167282325_1c717adec6_z.jpg
…
acoustic guitar (score = 0.49127)
pick, plectrum, plectron (score = 0.45965)
electric guitar (score = 0.01938)
banjo (score = 0.00783)
cello, violoncello (score = 0.00098)
482312645

Japanese spaniel

(tensorflow-gpu)$ python classify_image.py --image_file 482312645_7e46f06cd5_z.jpg
…
Japanese spaniel (score = 0.79339)
Blenheim spaniel (score = 0.09461)
Pekinese, Pekingese, Peke (score = 0.01110)
papillon (score = 0.00725)
Shih-Tzu (score = 0.00255)
5527607622

crane

(tensorflow-gpu)$ python classify_image.py --image_file 5527607622_d55a91e565_z.jpg
…
crane (score = 0.47043)
tow truck, tow car, wrecker (score = 0.27028)
fire engine, fire truck (score = 0.02134)
harvester, reaper (score = 0.01890)
trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi (score = 0.01018)

サンプル数が少ないのですが、3つの画像をtop-1で正しく分類できていました。

GoogleのInception-v3、恐るべし!

なお、3つの画像は、クリエイティブ・コモンズ・ライセンスに従い利用しています。
“https://www.flickr.com/photos/gi/167282325”
“https://www.flickr.com/photos/lostintexas/482312645”
“https://www.flickr.com/photos/didbygraham/5527607622”