Mac OSX 10.11でDeepLearningフレームワークCaffeのサンプルを動かすまで

[最終更新] 2016年8月25日

本記事はDeepLearningをわけわからんでも、とりあえずプログラム動かすべく、代表的なフレームワークの一つであるCaffeを、Mac上で動かすまでの記事です。つまり、Caffeをインストールしてサンプルを動かすまで、です。

スポンサーリンク

わけわからんけどDeepLearningしてみたい

話題過ぎるDeepLearningが面白そうなので、ちょっと手を出してみました。まだまだ、なにがなにやらわかっていませんが…大学時代もっと真面目に勉強しておけばよかった…。っていうか、こういうこと研究室でやりたかった…。

環境は以下。

  • Mac mini Late 2012
  • OSX 10.11 El Capitan

学習にあたり、次の書籍「初めてのディープラーニング」を参考にしました。書籍にあるのはLinuxのやり方で、かつそのままでは動かないとのレビューがAmazonにありますが、まぁインストール情報はネット上にもありますし、情報も厳選されており、よい書籍ではないかと思います。

インストール

Homebrew + Anaconda Pythonのインストール

インストールでまず参考にすべきは公式ページ「Caffe」です。公式では、Macのパッケージ管理システムとしてHomebrewを、またPythonとしてAnaconda Pythonを利用することを強く推奨しています。Homebrewは「Homebrew — OS X 用パッケージマネージャー」にあるとおりコマンド一発でインストールできます。Anaconda Pythonとは「Why Anaconda? | Continuum」によると、データサイエンス向けのPythonプラットフォーム、まぁ要は各種ライブラリを一揃いの揃えてくれているのだろうと思います。これのインストールはpyenv経由でやるのが良いらしく方法は「HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ – Qiita」が参考になります。

依存関係の解決

公式ページに則って、依存するソフトウェアをHomebrewでインストールしていきます。

brew install -vd snappy leveldb gflags glog szip lmdb
# need the homebrew science source for OpenCV and hdf5
brew tap homebrew/science
brew install hdf5 opencv

この際、公式ページにはAnaconda Pythonを使っているなら、opencvのformulaを次のように書き換えないといけんかも、とあるのですが、しなくてもいけました。

-DPYTHON_LIBRARY=#{py_prefix}/lib/libpython2.7.dylib
-DPYTHON_INCLUDE_DIR=#{py_prefix}/include/python2.7

というか、brew edit opencv で見てみると、変数名が違うだけで、同じことが書かれていました。まぁ、問題なかったということで。

で、残りの依存関係を解決すべく、次のコマンドを実行。

brew install --build-from-source --with-python -vd protobuf
brew install --build-from-source -vd boost boost-python

ここで、自分はエラーが出ました。エラーメッセージで、unset PYTHONPATHしたらいける的な文言があったので、そんなことしていいのかと思いつつ、unset PYTHONPATHで変数をリセットした後、再度コマンドを実行したら、無事インストールできました。

必要なソフトがインストールできたら、本体のCaffeをダウンロードします。

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

 

コンパイル

ダウンロードしたら、次の課題はコンパイルです。コンパイルも、まず参考にすべきは公式ページ「Caffe | Installation」。さて、今のところMacはあまりグラフィックに恵まれず、私の使っているMac miniもオンボード、GPUなんて使いませんので、設定ファイルでGPUを使わないように書き換えます。

cp Makefile.config.example Makefile.config
# 設定ファイルの書き換え。emacsでもviでもなんでも
emacs Makefile.config
# 次の箇所のコメントを外す
CPU_ONLY := 1
# 次の箇所を書き換え
CUSTOM_CXX := clang++

コンパイラをclang++に変更するのは、「CaffeをOS X 10.10 にインストールした // ichyo.jp」を参考にしました。正直元のままでどう問題になるのかわかっておりません。。。できたら、makeです。

make all
make test
make runtest

エラーなくできたらOKです。ちなみにcmakeでのやり方も公式ページにはありますが(あるだけで非公式のようですが)、私の環境ではエラーが起きました。cblas.hがないとかなんとか。

サンプルプログラムを実行

これだけではうまくいったかどうかわからないので、サンプルプログラムを実行してみます。data/mnist下で以下のコマンドを実行し、画像データをダウンロードします。MNISTは、手書き数字画像のデータベースです。

cd data/mnist
./get_mnist.sh

次に、ゲットした画像をCaffeで使うための画像形式level dbの形式に変換します。

# caffe直下に戻る
cd ../..
./examples/mnist/create_mnist.sh

そして設定ファイルexamples/mnist/lenet_solver.prototxt を編集して、CPUのみを使うように変更します。

#solver_mode: GPU
solver_mode: CPU

最後に、テストプログラムを実行します。

./examples/mnist/train_lenet.sh

すると、たらたらと次のような実行結果が流れます。

I0602 22:16:23.639482 1988476928 solver.cpp:337] Iteration 2500, Testing net (#0)
I0602 22:16:26.743888 1988476928 solver.cpp:404]     Test net output #0: accuracy = 0.9851
I0602 22:16:26.743932 1988476928 solver.cpp:404]     Test net output #1: loss = 0.0473842 (* 1 = 0.0473842 loss)

Iteration 2500は、2500回目の学習、accuracyは正解率で、これが段々上昇していけばいい感じです。また、lossは損失関数の値で、これが減少していけばいい感じ、とのことです。学習率が高過ぎると、過学習でいつまでたっても収束しないなんてことになりうるので、ここらへんの値を見ながらチューニングしていくことになるようです。

さて、実行したサンプルプログラムは10000回学習した時点で終了します。試行回数や学習率などの基本的な設定も、example/mnist/lenet_solver.prototxtで変更できます。ここで、実行したシェルスクリプトの中身を見ると、以下のようになっています。

./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

設定ファイルを引数に取っているわけです。で、この設定ファイルの中身で、さらにネットワークパラメータを指定しています。今回の場合はexamples/mnist/lenet_train_test.prototxtです。

以上より、たいへんざっくりですが、DeepLearningフレームワーク、CaffeのサンプルプログラムをMacで動かすことができました。

関連コンテンツ

関連記事

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。