画像認識
TensorFlow

初心者がTensorFlowの画像認識を使ってお手軽に遊んでみた

TensorFlowで画像認識を使って遊んで見る

TensorFlowの画像認識で遊んでみました。今回は、TensorFlow公式サイトのImage Recognitionに従ったお遊びです。機械学習やコード解説はありません。同じお遊びとしては、記事「初心者がTensorFlowの画像スタイル変換を使ってお手軽に遊んでみた」もあります。
実行環境は下表のとおりです(Jupyter Notebookは使っていません)。
TensorFlowEnvironment.JPG
※TensorFlow1.5とPython3.6でも動作しました(2018/2/28確認)

手順

1. Githubからclassify_image.py ダウンロード

Githubからclassify_image.pyをダウンロードします。TensorFlowの1.1以前のバージョンだと、TensorFlowインストールで自動で含まれるという情報も見ました(未確認)。筆者の環境は、TensorFlow1.1なのでGithubからダウンロードしました。

2. Anaconda Navigatorからターミナル起動

Anaconda Navigatorで仮想環境TensorFlow12からターミナルを開きます("12"と名付けていますがTensorFlow1.2ではありません)。
30.TensorFlow_Install01.JPG

3. 画像認識実行

3.1. 仮想環境有効化

まずは、ターミナルでtensorflow12の仮想環境を有効化します。

activate tensorflow12

3.2. パス変更

classify_image.pyを置いたディレクトリにパスを変更します。

cd C:\Users\yohei.fukuhara\AppData\Local\Continuum\Anaconda3\envs\tensorflow12\Lib\site-packages\tensorflow\models\image\imagenet

3.3. パラメータなし実行

まずはパラメータなしで実行してみます。パラメータなしだと、↓の絵に対して画像認識をかけます。
Panda

python classify_image.py

途中に出ている警告「The TensorFlow library wasn't compiled to use SSE instructions」は、「もっと速くなるよ」と教えてくれていてエラーではありませんでした。詳しくはリンク先を参照ください。
10.classify_imange_command.JPG

結果として見る部分は下記です。
パンダの可能性が約90%と推定しています。2番目の可能性としてindriとありますが、猿の一種らしいです(そんなのまで推定するのか)。

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89632)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00766)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00266)
custard apple (score = 0.00138)
earthstar (score = 0.00104)

画像認識の学習データとして、ImageNetの画像を使っているらしいです。ImageNetのExploreには色々な画像があって面白いです。

3.4. 手持ちの画像を認識

では、Google画像検索で筆者が好きな「三毛猫」の画像を使って試してみました。
20.source01_cat.jpg

下記のようにパラメータとして"image_file"に画像を指定します。画像ファイル"cat.jpg"は"classify_image.py"と同じディレクトリに置いています。

python classify_image.py --image_file="cat.jpg"

結果は、下記のように"Egyptian cat"の可能性が58%と出てきました。ちょっと自信がないようです。

Egyptian cat (score = 0.57563)
tiger cat (score = 0.14126)
tabby, tabby cat (score = 0.09771)
Siamese cat, Siamese (score = 0.00449)
Ibizan hound, Ibizan Podenco (score = 0.00317)

同じ猫ではあるのですが、少し違いますね。"Egyptian Cat"は↓らしい。ちなみに三毛猫は英語でCalico catらしいです。ImageNetではリンク先参照。
Egiptian Cat

お遊び

いくつか試してみました。

今、話題の議員

カーディガンと出ました。合っているけど違うだろー!!womanやladyかと期待しました。

30.source01_lady.jpg

cardigan (score = 0.91125)
hoopskirt, crinoline (score = 0.00667)
pajama, pyjama, pj's, jammies (score = 0.00640)
wool, woolen, woollen (score = 0.00629)
poncho (score = 0.00608)

もっとわかりやすい顔

顔立ちがはっきりしているプーチン閣下なら"man"などと出るかと思いきや「スーツ」でした。どうも「男性」などと認識せずに、着ている服を認識するようです。
30.source02_putin.jpg

suit, suit of clothes (score = 0.51698)
Windsor tie (score = 0.40225)
groom, bridegroom (score = 0.00333)
oboe, hautboy, hautbois (score = 0.00252)
bolo tie, bolo, bola tie, bola (score = 0.00240)

動物編

とても愛くるしいユキヒョウ。すごい、当たってる:hugging:
30.source03_snowleopard.jpg

snow leopard, ounce, Panthera uncia (score = 0.94937)
leopard, Panthera pardus (score = 0.02441)
jaguar, panther, Panthera onca, Felis onca (score = 0.00104)
Egyptian cat (score = 0.00095)
cheetah, chetah, Acinonyx jubatus (score = 0.00076)

無機物編

我が息子がこよなく愛する電車。正解!
train

electric locomotive (score = 0.57527)
passenger car, coach, carriage (score = 0.15877)
streetcar, tram, tramcar, trolley, trolley car (score = 0.04113)
freight car (score = 0.00830)
steam locomotive (score = 0.00735)

その他

他にも何個か試しました。以下は、当たらなかったやつです。

使った画像 画像認識結果 コメント
ひまわり ヒナギク(daisy) 似ているけど・・・
泡(bubble) 違うだろ
某ネズミマスコット マスク どこが? まぁ、学習に困るか・・・
雪の結晶 蜘蛛の巣 惜しい!
北斎の有名な波の絵 ドラム そりゃ難しいね