Mugichoko's blog

Mugichoko’s blog

プログラミングを中心としたメモ書き.

Caffe 1.0 (CPU) on Windows 10

目標

Deep Learningがやりたい!そこでCaffe(カフェ)をインストールして,サンプルプログラムを実行することで動作確認を行い,経験談をまとめた.

追記 この記事を基にしたGPU版のインストール方法についてはこちらをご参照のこと.

経緯

今回,将来的にモバイル上で動作させることも考えてCPU版(CUDAを使わない)Caffeを使うことにした.尚,Caffe2も既にリリースされているが,諸事情によりバージョン1.0を用いる.

インストール方法はネット上で多々紹介されているが,バージョンの違いか環境の違いか,なかなかその通りにやっても上手くいかないものばかりだった.ファイル内のパスを書き換えることで動作するものがほとんどだったので,今回はその辺りを経験談としてまとめる.

開発環境

  • Windows 10 Home (64-bit)
  • Visual Studio 2015
  • Python 3.5 (Anaconda)
    • Anacondaで使うPythonのバージョンを変更したい場合
      • conda create -n py35 python=3.5 anacondaで環境を作成した上でactivate py35で環境を切り替えられる(参考
      • 私の場合,上記でPython 3.6を3.5にしたのだが,Caffeのインストールの際のコマンド実行中にどうしても3.6を参照してしまった...
      • そこで,conda install python=3.5で3.6を3.5に置き換えた
  • Caffe 1.0

インストール方法

  1. Shellを使う(.shファイルを実行する)ためにWindowsを開発者モードに変更
  2. CMakeをコマンドプロンプトから実行できるようにする
  3. 公式のインストール方法を参考に以下のコマンドを実行
    • git clone https://github.com/BVLC/caffe.git
      • このコマンドでcaffeフォルダができる
      • ここをCAFFE_ROOTとして環境変数に追加
    • cd %CAFFE_ROOT%
    • git checkout windows
  4. CAFFE_ROOT\scripts\build_win.cmdファイルをCPUで実行する仕様に変更
    • 70行目辺りから始まる箇所
    • CPU_ONLY=1
      • CPU実行に関する項目はこれだけ
      • 以下は自分の環境に合わせて変更した
    • WITH_NINJA=0
    • PYTHON_VERSION=3
  5. scripts\build_win.cmdを実行
    • プログラムがビルドされるのでしばらくかかる
  6. ANACONDA_ROOT\Lib\site-packagesCAFFE_ROOT\python\caffeフォルダをコピペ
    • 参考: https://goo.gl/Q2B2qk
    • ANACONDA_ROOTはAnacondaがインストールされているパス
      • 例えば,C:\Users\USER_NAME\Anaconda3
  7. Pythonにてimport caffeが実行できればインストール完了

MNISTの例

実行方法

  1. THE MNIST DATABASEをダウンロードし解凍
    • 4つともダウンロード
    • 解凍すると,拡張子がない同名のファイルが4つ得られることになる
  2. 解凍したデータをCAFE_ROOT\data\mnistに配置
  3. CAFFE_ROOT\examples\mnist\create_mnist.shの17~20行目を編集
    • $BUILD/Release/convert_mnist_data.exe $DATA/train-images.idx3-ubyte \
    • $DATA/train-labels.idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
    • $BUILD/Release/convert_mnist_data.exe $DATA/t10k-images.idx3-ubyte \
    • $DATA/t10k-labels.idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}
  4. CAFFE_ROOTにてexamples\mnist\create_mnist.shを実行
    • CAFE_ROOT\examples\mnistに以下のフォルダが作成される
      • mnist_test_lmdb
      • mnist_train_lmdb
  5. CAFFE_ROOT\examples\mnist\train_lenet.shを編集
    • ./build/tools/Release/caffe.exe train --solver=examples/mnist/lenet_solver.prototxt $@
    • 終了した途端にプロンプトが閉じられ,結果を確認できないので,以下も追記
      • echo 'Press enter to exit'
      • read a
  6. CAFFE_ROOT\examples\mnist\lenet_solver.prototxtでCPUを使うように編集
    • solver_mode: CPU
    • これでGPUは使われない
  7. examples\mnist\train_lenet.shを実行
    • 学習が始まり,終了するまでに十数分かかった
  8. 結果がプロンプトに出力される

実行結果

コマンドプロンプトに出力された結果の内,最後の10行を以下に示す.この結果から,最終的な学習結果を用いたテストデータの認識精度が99.13%だったことが分かる.

I1030 20:29:47.046490 10780 solver.cpp:447] Snapshotting to binary proto file examples/mnist/lenet_iter_10000.caffemodel
I1030 20:29:47.075568 10780 sgd_solver.cpp:273] Snapshotting solver state to binary proto file examples/mnist/lenet_iter_10000.solverstate
I1030 20:29:47.106652 10780 solver.cpp:310] Iteration 10000, loss = 0.0022281
I1030 20:29:47.106652 10780 solver.cpp:330] Iteration 10000, Testing net (#0)
I1030 20:29:50.633074  8808 data_layer.cpp:73] Restarting data prefetching from start.
I1030 20:29:50.776796 10780 solver.cpp:397]     Test net output #0: accuracy = 0.9913
I1030 20:29:50.776796 10780 solver.cpp:397]     Test net output #1: loss = 0.0276414 (* 1 = 0.0276414 loss)
I1030 20:29:50.776796 10780 solver.cpp:315] Optimization Done.
I1030 20:29:50.777798 10780 caffe.cpp:260] Optimization Done.
Press enter to exit

無事に動作したので,目標達成だ!