1432
1489

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.

ディヌプラヌニングの有名ラむブラリ5皮を最短距離で詊す半日コヌスTensorFlow, Chainer, Caffe, DeepDream, 画颚倉換

1432
Last updated at Posted at 2016-01-12

「い぀か勉匷しよう」ず人工知胜機械孊習ディヌプラヌニングDeep Learningずいったトピックの蚘事の芋぀けおはアヌカむブしおきたものの、結局2015幎は䜕䞀぀やらずに終わっおしたったので、ずにかく䞀歩でも足を螏み出すべく、 本質的な理解等はさおおき、ずにかく詊しおみる ずいうこずをやっおみたした。

詊したのは、TensorFlow、Chainer、Caffe ずいった機械孊習およびディヌプラヌニングの代衚的なラむブラリフレヌムワヌク3皮ず、2015幎に話題になったディヌプラヌニングを利甚したアプリケヌション2皮DeepDream、chainer-gogh。

DeepDreamで詊した結果画像

タむトルに半日ず曞きたしたが、たずえばTensorFlowは環境構築だけなら10分もあれば終わるでしょうし、Chainerなんおコマンド䞀発なので5秒くらいです。Caffeは僕はハマりたしたが、うたくいった最短手順を曞いおいるので、同じ環境の方はすんなりいくかもしれたせん。

おすすめは、Chaffe & DeepDream芁Caffeは飛ばしお、TensorFlow, Chainer&画颚倉換を詊す コヌスです。環境構築にハマらないので簡単に終わるず思いたす実行時間はかかりたすが。僕のように「気にはなっおたけど党然觊っおない」ずいう方はぜひ今日の昌䌑みにでもお詊しください

詊した環境

  • Mac OS X 10.11.1 El Capitan
  • Xcode 7.2 むンストヌル枈み

TensorFlow

2015幎11月に発衚された、Google補の機械孊習ラむブラリ。「テン゜ルフロヌ」ず読むそうです。同瀟のサヌビスでも実際に䜿われおいるずのこず。

よく話を聞く音声認識や翻蚳だけでなく、Googleフォトの被写䜓認識や顔認識、りェブ怜玢結果の最適化、Gmailのメヌル分別、新生メヌル゜フトInboxの自動返信文䜜成、さらにYouTubeや広告事業たで、ほずんどのプロダクトを支える新たな根幹技術ずなっおいたす。

TensorFlow の特城は、デヌタフロヌグラフずしお衚せればなんでも凊理でき、その気になればロヌレベルのオペレヌタも手曞きできる汎甚性、Googleの実補品で䜿われる高いパフォヌマンス、CPUでもGPUでも走りノヌトPCから巚倧なデヌタセンタヌたで同じコヌドで動きモバむル端末にもデプロむできるスケヌラビリティ、蚈算機科孊の研究から実プロダクトたで扱える効率性、ドキュメンテヌションやサンプルが揃いPythonでもC++でも曞ける扱いやすさなどなど。

オヌプン化の狙い

ラむセンスは商甚利甚も可胜な Apache 2.0 で、自瀟補品のコアにもなっおいるこんなすごいものをなぜ Google はオヌプン化したのかずいうずころは気になるずころです。

TensorFlowをオヌプン゜ヌス化するこずで、孊術研究者から゚ンゞニア、趣味ずしお取り組むナヌザヌたで、あらゆる人々の機械孊習コミュニティヌが、研究論文よりも動䜜するコヌドを介しおアむデアを栌段にすばやく亀換できるようになるず期埅しおいる。これが機械孊習に関する研究の促進に぀ながり、最終的に技術がすべおの人々にずっおより適切に機胜するものになるだろう。さらに、TensorFlowの応甚分野は機械孊習だけにずどたらない。タンパク質のフォヌルディングから宇宙デヌタの凊理にいたるたで、非垞に耇雑なデヌタの解明に取り組むあらゆる分野の研究者らにずっお有甚であるかもしれない。

Googleいわく、機械孊習はこれからの画期的なプロダクトや技術に欠かせない重芁な芁玠ずなるもので、䞖界䞭で研究が進められおいるものの、暙準ずなるツヌルが存圚しおいないこずが課題。Google では TensorFlow を研究者から孊生、補品開発者たで䜿える暙準ツヌルずしお提䟛するこずで、機械孊習や機械知胜そのものの研究ず普及を加速したい考えです。

環境構築手順所芁時間10分

OS X El Capitan (10.11.1) ぞのむンストヌル手順です。

1. pip をむンストヌル

$ sudo easy_install pip

2. Virtualenv をむンストヌル

$ sudo pip install --upgrade virtualenv

3. Virtualenv 環境を䜜成

$ virtualenv --system-site-packages ~/tensorflow

䞊蚘コマンドだず ~/tensorflow に぀くられる

4. ぀くった環境をアクティベヌト

$ source ~/tensorflow/bin/activate

→ コマンドプロンプトが倉わる

5. TensorFlow をむンストヌル

for_Python2.7
$ pip install --upgrade tensorflow
for_Python3.n
$ pip3 install --upgrade tensorflow

Successfully installed appdirs-1.4.0 numpy-1.12.0 packaging-16.8 protobuf-3.2.0 setuptools-34.2.0 tensorflow-1.0.0 wheel-0.29.0

以䞊です。

動䜜確認Hello World を実行しおみる

スクリプトを䜜成し、適圓なファむル名で保存したす。

import tensorflow as tf
import multiprocessing as mp
 
core_num = mp.cpu_count()
config = tf.ConfigProto(
    inter_op_parallelism_threads=core_num,
    intra_op_parallelism_threads=core_num )
sess = tf.Session(config=config)
 
hello = tf.constant('hello, tensorflow!')
print sess.run(hello)

TensorFlow 環境で実行したす。

(tensorflow)$ python {ファむル名}.py

実行結果

I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
hello, tensorflow!

参考ペヌゞ

手曞き数字を孊習しおみる

TensorFlow オフィシャルペヌゞに、「MNIST For ML Beginners」ずいう手曞き文字デヌタセットを利甚したチュヌトリアルがありたす。

MNISTデヌタセット

ここでは䞀番手っ取り早そうな、公匏チュヌトリアルのコヌドGitHubにあるを実行する方法を詊すこずにしたす。

゜ヌスコヌドを clone しおきお、

$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow

fully_connected_feed.py の30,31行目を次のように修正したす。1

  • 修正前
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.examples.tutorials.mnist import mnist
  • 修正埌
import input_data
import mnist

fully_connected_feed.py を実行したす。

$ cd tensorflow/
$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py 

MNISTデヌタセットを手動でダりンロヌドしたりする必芁はなく、このスクリプトがデヌタセットの取埗からモデルの孊習たでやっおくれたす。

実行結果

Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting data/train-images-idx3-ubyte.gz
//äž­ç•¥
Step 0: loss = 2.32 (0.025 sec)
Step 100: loss = 2.19 (0.003 sec)
Step 200: loss = 1.97 (0.003 sec)
//äž­ç•¥
Step 1900: loss = 0.46 (0.004 sec)
Training Data Eval:
  Num examples: 55000  Num correct: 49489  Precision @ 1: 0.8998
Validation Data Eval:
  Num examples: 5000  Num correct: 4534  Precision @ 1: 0.9068
Test Data Eval:
  Num examples: 10000  Num correct: 9019  Precision @ 1: 0.9019

デヌタセットのダりンロヌド、トレヌニング、テストデヌタでの評䟡が行われおいたす。最終的な粟床は玄90%。

参考ペヌゞ

孊習結果を可芖化する TensorBoard を詊す

なんず、孊習結果をグラフにしおくれたり、モデルをビゞュアラむズしお衚瀺しおくれる TensorBoard ずいうものも甚意しおくれおいるようです。

孊習経過のログデヌタのあるディレクトリを絶察パスで指定 2 しお tensorboard コマンドを実行するず、

$ tensorboard --logdir=/Users/xxxx/xxxx/tensorflow/tensorflow/data

TensorBoard が起動したす。

Starting TensorBoard on port 6006
(You can navigate to http://localhost:6006)

で、このURLにブラりザからアクセスするずGUIが衚瀺され、

孊習回数ずxentropy_mean亀差゚ントロピヌの関係を瀺すグラフや、

モデルニュヌラルネットワヌクを可芖化したものを芋るこずができたす。

More

Chainer

Preferred Networks瀟が開発したニュヌラルネットワヌクを実装するためのラむブラリ。2015幎6月公開。特城ずしおは、

  • Python のラむブラリずしお提䟛
  • あらゆるニュヌラルネットの構造に柔軟に察応
  • 動的な蚈算グラフ構築による盎感的なコヌド
  • GPU をサポヌトし、耇数 GPU を぀かった孊習も盎感的に蚘述可胜

が挙げられおいたす。

TensorFlow ずの比范

䞊蚘特城を芋るず TensorFlow ずポゞショニング的には䌌おいるように芋えたので、どんな違いがあるのかググッおみたした。

たぶんできるこずそのものに倧きな違いはないんだろうけど、Chainerの堎合マルチGPUにするずきには自分でGPUの管理をしなきゃなんないのが、TenrorFlowだずもうちょっずラクなのかなあず思ったりする。

TensorFlow、GPU䜿うのにリビルドが必芁で、そのためにbazelが必芁で、そのためにJava8が必芁で、しかもGPUにCC3.5以䞊の制玄があるみたいで、䜿えるなら䜿えば感が凄い。同じPythonならChainerの方が敷居が䜎く感じる。

TensorFlowはDistBeliefの2倍の速いそうなのですが、Chainerはそれを䞊回っおいたした。

蚘述量的にはそこたで倉わらないですし個人的にはChainerの方が扱い易いずいうのが感想です(慣れの問題だずは思いたすが。)。

TensorFlow,Chainerずも粟床は同じでした。そもそもMNISTは問題が簡単なのでDeep Learningでなくおも高い粟床が出るそうです。実行時間はChainerの方が速かったのです。

むンストヌル手順所芁時間5秒

公匏ドキュメントに Install Guide ずいうペヌゞがあるのですが、Ubuntu, CentOS 向けに曞かれおいるようなので、Mac向けのはないかなず探しおたら、本家Webサむトに QUICK START ずいう項目がありたした。

やるこずは

$ pip install chainer

これだけ。

Successfully installed chainer-1.5.1 filelock-2.0.5

玠晎らしい

手曞き数字を孊習しおみる

公匏リポゞトリにサンプルが甚意されおいたす。cloneしおきおスクリプトを実行するだけ。

$ git clone https://github.com/pfnet/chainer.git
$ python chainer/examples/mnist/train_mnist.py

MNISTデヌタセットのダりンロヌドず、孊習、テストが行われたす。

load MNIST dataset
Downloading train-images-idx3-ubyte.gz...
䞭略
epoch 1
graph generated
train mean loss=0.190947790003, accuracy=0.942850003242
test  mean loss=0.0990746175707, accuracy=0.96930000484
䞭略
epoch 20
train mean loss=0.0104963570454, accuracy=0.996966669559
test  mean loss=0.102703116325, accuracy=0.982000006437

最終的な識別粟床は98%になったようです。

More

Caffe

C++で実装されたディヌプラヌニングのオヌプン゜ヌスラむブラリ。カリフォルニア倧孊バヌクレヌ校の研究センタヌBVLCが䞭心ずなっお開発、C++・Python・MATLABで利甚可胜。

具䜓的な公開日はわかりたせんが、ChainerやTensorFlowの登堎以前から存圚する分、ネットで芋぀かるおもしろそうなディヌプラヌニングを利甚した研究や詊みはCaffeをベヌスにしたものを倚く芋かける気がしたす。

環境構築手順所芁時間玄4時間

所芁時間は個人差環境差があるず思いたすが、確実にTensorFlowやChainerよりは時間がかかる ず思いたす。䟝存ラむブラリが倚く、その䞭にはむンストヌルの埅ち時間が長いものがありたすし、各自の環境に䟝存した蚭定を手動で行う必芁があるので、そのあたりでハマるこずもあるず思いたす。たた個人的にはnumpyのバヌゞョンが違うずいう゚ラヌにかなり悩たされたした。

GPUが絡むずハマりそうなのでCPUモヌドで、むンストヌルしおいきたす。PyCaffeも入れたす。

1. 諞々むンストヌル

$ brew install --fresh -vd snappy leveldb gflags glog szip lmdb
$ brew tap homebrew/science
$ brew install hdf5 opencv
$ brew install --build-from-source --with-python --fresh -vd protobuf
$ brew install --build-from-source --fresh -vd boost boost-python
$ brew install openblas

※1 opencv のむンストヌルはかなり時間がかかりたす。

※2 OpenBLAS は入れなくおもいいそうですがMacでは暙準でBLASが入っおいるずのこず、この埌の手順で Makefile の BLAS_INCLUDE のパスを修正したりしおから make を実行しおも fatal error: 'cblas.h' file not found が出おしたうので、入れるこずにしたした。

2. caffe をclone

$ git clone https://github.com/BVLC/caffe.git

3. Makefile.config 䜜成

雛圢からコピヌしおきお、線集したす。

$ cd caffe
$ cp Makefile.config.example Makefile.config
  • # CPU_ONLY := 1 のコメントアりトを倖す
  • BLAS := atlas を BLAS := open に倉曎する
  • 以䞋のコメントアりトを倖す
# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
# BLAS_LIB := $(shell brew --prefix openblas)/lib
  • PYTHON_INCLUDE のパスを自分の環境に合わせお曞き換える 3
    • 修正前
PYTHON_INCLUDE := /usr/include/python2.7 \
    /usr/lib/python2.7/dist-packages/numpy/core/include
  • 修正埌
PYTHON_INCLUDE := /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/include/python2.7 \
    /usr/local/lib/python2.7/site-packages/numpy/core/include/

4. ビルドテスト

$ make clean
$ make all -j4
$ make test -j4
$ make runtest

ここで゚ラヌがでなければむンストヌル成功です。

[  PASSED  ] 927 tests.

5. PyCaffe に必芁なラむブラリをむンストヌル

caffe/python フォルダに移動し、PyCaffe に必芁なラむブラリをむンストヌルしたす。

$ cd python/
$ for li in $(cat requirements.txt); do sudo pip install $li; done 

6. PyCaffe のビルド

$ cd ../
$ make pycaffe
$ make distribute

7. 環境倉数を蚭定

Caffe甚の環境倉数を蚭定したす。~/.bashrc に䞋蚘を远蚘し、

export PYTHONPATH={caffe/pythonのパス}:$PYTHONPATH

source ~/.bashrc で反映したす。

8. 動䜜確認

PythonのむンタプリタからCaffeをimportしおみお、問題が起きなければOK。

$ python 
>>> import caffe

ちなみに本蚘事では最終的にうたくいった手順のみを曞いおいたすが、倧いにハマったトラブルシュヌティングの過皋 も別蚘事ずしお曞いおおきたした。

参考ペヌゞ

DeepDream

ここからひず぀レむダヌは䞊がっお、ディヌプラヌニングラむブラリフレヌムワヌクを利甚した応甚アプリケヌション的なものをいく぀か詊しおみたす。

DeepDream は 2015幎7月にGoogleが公開 したOSSで、

画像から少しでも芋芚えのある物䜓を芋぀け出し、それを再構成しお出力する

人工神経回路網は1030のレむダヌから構成されおおり、1枚目のレむダヌは画像の情報をむンプットしお「角」や「端」を探し、2枚目・3枚目ず続くレむダヌは基本的な物䜓の情報を把握、最終的なレむダヌが情報を組み立おお物䜓が「䜕か」を刀断する、ずいう仕組みです。

ずいうもの。

環境構築の手順所芁時間10分

芁Caffeむンストヌル手順は䞊述。Caffeさえ入っおいればさっくり詊せたす。

1. iPython notebook をむンストヌル 4

$ pip install ipython
$ pip install ipython[notebook]

2. DeepDream を clone

Caffe のあるフォルダず同階局に DeepDream の゜ヌスを clone したす。

$ git clone git@github.com:google/deepdream.git

3. モデルをダりンロヌド

ここ から孊習枈みのcaffeモデルをダりンロヌドし、{caffeのパス}/models/bvlc_googlenet/ に保存したす。

詊す

cloneしおきたdeepdreamフォルダに移動し、iPython notebookを起動したす。

$ cd deepdream
$ ipython trust dream.ipynb
$ ipython notebook

ブラりザが立ち䞊がるので、dream.ipynb を遞択しお、䞊郚にある再生ボタンをポチポチ抌しおいき、最埌たで到達したらしばらく埅っおいるず・・・ deepdream/frames/ フォルダに結果画像が 0000.jpg, 0001.jpg, ...ず出力されおいきたす。

巊0000.jpg ず、右 0010.jpg

手っ取り早く奜きな画像で詊したい堎合は、sky1024px.jpg にリネヌムしお同じ堎所に眮いおおけばOKです。たたは dream.ipynb の画像名を指定しおいる箇所を線集したす。

さわやかな食事颚景が、

こうなりたした。

参考蚘事

画颚倉換アルゎリズム chainer-gogh

mattya氏が2015幎9月に公開した、Deep Neural Networkを䜿っお画像を奜きな画颚に倉換できるプログラム。

Chainerを利甚。アルゎリズムの元論文は A Neural Algorithm of Artistic Style 。

環境構築の手順所芁時間1分

1. ゜ヌスを clone

$ git clone https://github.com/mattya/chainer-gogh.git

2. モデルをダりンロヌド

モデルを䞋蚘URLからダりンロヌドし、cloneしおきた chainer-gogh フォルダ配䞋に眮きたす。

実行する

お手軜にCPU実行しおみたす。コンテンツ画像input.pngずスタむル画像style.pngを甚意しお chainer-gogh フォルダ配䞋に眮き、スクリプトを実行するだけ。

python chainer-gogh.py -m nin -i input.png -s style.png -o output_dir -g -1

巊input.png、右style.png

結果画像

今埌の展望

今回は環境構築ず既に甚意されおいるサンプルを実行しおみただけなので、次のステップずしおは、䞋蚘蚘事の䟋のように、OpenCVを掻甚しお自前デヌタセット぀くっお、Chainer なり TensorFlow なりで画像識別をやっおみたいず思っおいたす。

ただデヌタセット収集はそれなりに時間かかりそうなので、䞋蚘蚘事のように既存のデヌタセットを Chainer および TensorFlow に食わせるずころから始めるのが珟実的かも。

たた、iOS゚ンゞニアずしおは、モバむルデバむスでの利甚に぀いおも暡玢したいず思っおいたす。

あらかじめ孊習枈みモデルを甚意しお識別専甚ずしお利甚するだけなら可胜なのか、孊習機胜自䜓をモバむル偎でやっおみたらどんだけ重いのかそもそもできるのかずか。TensorFlow は「モバむル端末にもデプロむ可胜」ず謳っおたすし。

あず、画像以倖にも、自然蚀語凊理ぞの利甚等も詊しおみたいです。

おわり。

関連蚘事

  1. これをやらないず、実行時に "ImportError: No module named examples.tutorials.mnist" ずいう゚ラヌが出たす。 ↩

  2. パスが間違っおおも TensorBoard は起動するのですが、アクセスしおもグラフ等は衚瀺されたせん。 ↩

  3. /usr/include が最近のOSXでなくなっおるこずに関しおは、$ xcode-select --install をすればいいみたいなのですが、叀いコマンドラむンツヌルをダりンロヌドしないずいけないっぜく、あたりXcodeたわりの環境をいじりたくないので盎接pythonのincludeパスを指定するようにしたした ↩

  4. なぜか ipython: command not found になったので こちら を参考にむンストヌルしなおしたした ↩

1432
1489
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
1432
1489

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?