インターンシップブログ@India Part5~TensorFlowを使ってみた~

インターンシップブログ@India Part5~TensorFlowを使ってみた~

こんにちは!インドインターン中の小畑です。今日は、先日Googleが公開した機械学習オープンソース、TensorFlowを使ってみたのでレポートしたいと思います!

TensorFlowとは、2015年11月10日にGoogleが公開した機械学習用ライブラリオープンソースです。実際に、googleの検索エンジン、音声認識、画像処理等に用いられていて、Googleはこれからのスタンダードツールになると確信しているようです。オープンソースにすることで、世界中の研究者や一般人がどんどんDeepLeaningの研究を進めることで、同時にGoogleの利益につながるということです。Get Startedで簡単に始められます。

インストール等は、公式のHow to Installや日本語のページもたくさんできてきてるので、チェックしてみてください!かなり簡単に使えます。

参考:
TensorFlowで Hello Worldを動かしてみた&その解説 (CPU)
TensorFlow (GPU版) を Ubuntu にインストールしてみた

ということで、公式のTutorialをじっくり読みながら、インド人インターン生と勉強しています。写真は、DeepLeaningが初めての彼らにNeural Networkの基礎を教えながら、ディスカッションしている様子です。やはりインドの人は数学が好きみたいです。毎週彼らとDeepLeaning勉強会を開いてます。

IMG_5291

そして、最近二つほど簡単なアプリを作ってみたので、報告します。

ガネーシャ識別機

試験的に各100枚のガネーシャ&象の画像データを使って機械学習してみました。ガネーシャというのは、象に似てるインドの神様です。Deep MNIST for ExpertのCNNを使って学習してます。画像の入出力はOpenCVを使用。象を入れたら象、ガネーシャを入れたらガネーシャ、他を入れたらどっちでもない。というものを作ります。(くだらない)

まず、automaterを使ってgoogle画像検索から適当に画像を拾いました。象の生写真とガネーシャの絵を使ってます。前処理なしです。

Screen Shot 2015-11-25 at 10.25.03 AM

Screen Shot 2015-11-25 at 10.23.31 AM

TensorFlow Tutorial にあるDeep MNIST For ExpertのConvolutional neural networkで学習させました。そして、TensorFlowの特徴、グラフ化、図式化を使ってみました。上が正答率、下がコストファンクションです。画像が少ないのと、特徴量の違いが明確なため学習が早いです。

Screen Shot 2015-11-24 at 6.06.20 PM

これから、この学習済みデータを使った識別機を使ってみたいと思います。画像データですが、OpenCVを使って読み込み、リサイズして使用しています。実際にテストしてみます。

まずはこのデータ。ganesha_mono。白黒でいけるのか。

ganesha-19

Screen Shot 2015-11-27 at 9.43.08 AM

成功です。ちなみに、can’t determine~は直せるらしいのですが、問題なく使えるっぽいので無視してます。次はこれ。さすがにきついかなーと思いましたが、、、

images1

Screen Shot 2015-11-27 at 9.43.58 AM

できています。次は、インドで買った自分のTシャツを。

IMG_5286

Screen Shot 2015-11-27 at 9.44.48 AM

できました!ラストはこれ。

images2

Screen Shot 2015-11-27 at 9.45.34 AM

これは失敗。象に装飾をつけるとガネーシャと判断するみたいです。。。笑 画像データも少ないし、色彩とかがメインファクターなのかな???とりあえず、テストとしてはそこそこな気がします。これから、いろんなデータ等で確かめていきますが、基本は普通のDeepLeaningと一緒だと思うので、これからいろいろ勉強していきます。次は、インドの神識別機(10種類以上)を作ります。笑

マンゴーテスト

当初は、インドには何種類ものマンゴーがあると聞いていたので、マンゴー識別機を作りたかったのですが、旬じゃないからマンゴーないよ!とのことだったので、、、オレンジでやってみました。まずは、二つの種類のオレンジを30個ほど買ってきました。

IMG_5336

orangeと

orange-0 copy

mosambi

mosambi-0 copy

とても似ているので難しそうでした。まず、それぞれたくさん写真をとりました。

Screen Shot 2015-11-26 at 5.16.26 PM

ラベル付けして、mosambi or orange判定。そこまでスコアが上がらず、testdata(学習に使っていない新しいデータ)によるacuracy0.7程度。失敗です。ちなみに、特徴量の違いがなさすぎて学習中にエラーを吐いたので、学習率を操作したりしました。そこで、もう少し画像を増やし、100枚くらいに増やしたところ、

こんな感じで、頑張りながらも最終的にaccuracy0.98程度を叩き出していました。ガネーシャの学習過程と比べると、明らかに頑張ってる感じがします。Step数も200から300に増やしてます。

Screen Shot 2015-11-26 at 4.57.12 PM

そしてtestdata ではaccuracy100%でした!!!(testdataは少ないですが。)この学習データで識別機を作ってみたところ、、、(もちろん投げているみかん画像は学習に使っていないやつです。)

orange


Orange

Screen Shot 2015-11-26 at 5.21.51 PM

mosambi

Mosambi

Screen Shot 2015-11-26 at 5.22.02 PM

成功!!!同じ環境、同じ照明だとかなりの確率で識別できるモデルが完成しました!一般的に数千枚のdatasetが必要と言われているのに、このデータ量でまあまあな結果が出て、DeepLeaningすごいなあと初心者ながらに感激しました。これからオレンジの種類を増やしていくに当たって、たくさんの課題が見えそうです。課題が見えた時に、tensorflowのvisualizeをもっと勉強してDeepLeaningの中身を解析していくことになりそうです。

ということで、拙いですがTensorFlowのレポートでした。機械学習初心者の僕も数日でできたので、みなさん気軽に使ってみてはいかがでしょうか。

(最終更新:2017-05-11)