人工知能はじめました。ポンダッドです。

深層学習(ディープラーニング)という技術が起爆剤となり、近年人工知能が急激に発達した。ということまでは分かったのですが、そんな先端技術一般人に使うことが出来るんだろうか。そんなことも感じました。

深層学習というとものすごく高性能なPCを何日も(場合によっては何ヶ月も)学習させる印象があったのですが、どうも学習済みのモデルを利用するだけならばそれ程時間は掛からないようです。

まずは深層学習ライブラリと学習済みモデルを使って画像認識を試してみました。上手くいくでしょうか。

まずはコーヒーでも人工知能に見せてみます。

1
2
3
$ python3 inception_v3.py
Using TensorFlow backend.
Predicted: [[('n07920052', 'espresso', 0.98510909), ('n07930864', 'cup', 0.0013969219), ('n07892512', 'red_wine', 0.00096048781), ('n02948072', 'candle', 0.00083798409), ('n07836838', 'chocolate_sauce', 0.00072286226)]]

スクリプト実行後2、3秒で「エスプレッソ98.5%」と識別されました。コーヒーでなくエスプレッソという事まできちんと判別しているところが憎いですね。

続いて鳥の写真を見せてみます。

1
2
3
$ python3 inception_v3.py
Using TensorFlow backend.
Predicted: [[('n01855672', 'goose', 0.83909774), ('n01514859', 'hen', 0.016504474), ('n02012849', 'crane', 0.0066337022), ('n02009912', 'American_egret', 0.006152702), ('n01796340', 'ptarmigan', 0.0043814657)]]

「ガチョウ83.9%」と識別されました。アヒルじゃなくてガチョウだよ。って言われてるような気がします。ものすごい識別力ですね。

サミュエル・L・ジャクソン(のフィギュア)の写真を見せてみます。

1
2
3
$ python3 inception_v3.py
Using TensorFlow backend.
Predicted: [[('n04350905', 'suit', 0.48878527), ('n02883205', 'bow_tie', 0.029732836), ('n04591157', 'Windsor_tie', 0.026764978), ('n03630383', 'lab_coat', 0.016221585), ('n10148035', 'groom', 0.014818682)]]

「スーツ48.8%、蝶ネクタイ2.9%」が写っていると識別されました。

InceptionV3

InceptionV3とはGoogleが開発した人間の認識率を超えた高精度の学習モデルです。

はじめての深層学習(ディープラーニング)プログラミング - Amazon.co.jpによると、エラー率3.4%と、人間の画像識別力を上回っているそうです。(ちなみに人間のエラー率は5%ほど)

元になる画像が約1400万枚、ラベルとなるカテゴリは2万2千程あるそうで、画像をダウンロードするだけでも5日間位掛かるとのこと。

GPUを強化した深層学習用PCでも学習するのに1ヶ月位掛かるそうです。いやすごいですね。

この学習済みモデルは、Googleが機械学習ライブラリTensorflowで利用出来る様に一般公開されています。

Image Recognition - Tensorflow

Keras

深層学習用のライブラリはいくつか存在しますが、私は一番使いや易そうに感じたKerasを使ってみることにしました。

Keras Documentation

Kerasは、Pythonで書かれた、TensorFlowまたはTheano上で実行可能な高水準のニューラルネットワークライブラリです。 Kerasは、迅速な実験を可能にすることに重点を置いて開発されました。 可能な限り遅れなくアイデアから結果に進められることは、良い研究をする上で重要です。

Keras Documentation

メイン開発者のFrançois CholletさんはGoogle所属の様ですね。

機械学習の演習をする際、同じGoogleのScikit Learnを使ったので、APIの記述の仕方など共通するところが多く利用がし易そうに感じました。

Mac環境であれば、pipを使って簡単にインストールする事が出来ます。

やってみよう

開発者のFrançoisさんが様々なチュートリアルやサンプルコードを公開しています。

上述の様に日本語版ドキュメンテーションも公開されたので、試さない手はありません。画像認識のサンプルもいくつかありますが、今回は一番性能の良さそうなInceptionV3を利用してみます。

1
2
3
4
5
$ git clone https://github.com/fchollet/deep-learning-models.git
Cloning into 'deep-learning-models'...
remote: Counting objects: 47, done.
remote: Total 47 (delta 0), reused 0 (delta 0), pack-reused 47
Unpacking objects: 100% (47/47), done.

まずはFrançoisさんのレポジトリをクローンします。inception_v3.pyの319行めにある画像パスを任意のものに置き換えて、同じ階層に画像を設置します。ここではゾウさんの写真(elephant.jpg)を設置しました。

1
2
3
4
$ cd deep-learning-models
$ python3 inception_v3.py
Using TensorFlow backend.
Predicted: [[('n02504013', 'Indian_elephant', 0.87686646), ('n01871265', 'tusker', 0.044712357), ('n02504458', 'African_elephant', 0.02874627), ('n02398521', 'hippopotamus', 0.0072720782), ('n02092339', 'Weimaraner', 0.0020943223)]]

「インド象87.6%」と識別されました。

まとめ

APIを利用するのとは違い、自分の所有するMac上で人工知能が動いているって思うとなんかワクワクしますね。

深層学習のアルゴリズムを学習しはじめたところなのですが、実際にどんな仕組みで機械が学習しているか少しづつ解き明かしてみたいと思います。

チュートリアル自体は簡単に試せますので興味のある方は是非。

参考書籍

Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう - Amazon.co.jp

はじめての深層学習(ディープラーニング)プログラミング - Amazon.co.jp