21
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-21

#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) 違うだろ
某ネズミマスコット マスク どこが? まぁ、学習に困るか・・・
雪の結晶 蜘蛛の巣 惜しい!
北斎の有名な波の絵 ドラム そりゃ難しいね
21
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?