#TensorFlowで画像認識を使って遊んで見る
TensorFlowの画像認識で遊んでみました。今回は、TensorFlow公式サイトのImage Recognitionに従ったお遊びです。機械学習やコード解説はありません。同じお遊びとしては、記事「初心者がTensorFlowの画像スタイル変換を使ってお手軽に遊んでみた」もあります。
実行環境は下表のとおりです(Jupyter Notebookは使っていません)。
※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ではありません)。
##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. パラメータなし実行
まずはパラメータなしで実行してみます。パラメータなしだと、↓の絵に対して画像認識をかけます。
python classify_image.py
途中に出ている警告「The TensorFlow library wasn't compiled to use SSE instructions」は、「もっと速くなるよ」と教えてくれていてエラーではありませんでした。詳しくはリンク先を参照ください。
結果として見る部分は下記です。
パンダの可能性が約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画像検索で筆者が好きな「三毛猫」の画像を使って試してみました。
下記のようにパラメータとして"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ではリンク先参照。
#お遊び
いくつか試してみました。
##今、話題の議員
カーディガンと出ました。合っているけど違うだろー!!womanやladyかと期待しました。
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"などと出るかと思いきや「スーツ」でした。どうも「男性」などと認識せずに、着ている服を認識するようです。
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)
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)
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) | 違うだろ |
某ネズミマスコット | マスク | どこが? まぁ、学習に困るか・・・ |
雪の結晶 | 蜘蛛の巣 | 惜しい! |
北斎の有名な波の絵 | ドラム | そりゃ難しいね |