画像認識におけるDeepLearningはCaffeがデファクトスタンダードとなりつつありますが、現状では公式にLinux環境しかサポートされていません。本格的にDeepLearningに取り組むならLinux環境を用意するのが良いでしょうが、Windows環境で使う手もあります。Windows環境しかない方にはお手軽にDeepLearningを試すことができ、Windowsメインで開発される方にとってはDeepLearningをWindowsアプリに組み込むこともできます。
本記事では非公式で公開されているWindows版Caffeの使用方法を解説します。数回に分けて解説を行う予定で、今回は環境構築について書きます。
Caffe公式ページでも紹介されていますが、シンガポール国立大学の方がWindows版CaffeをGitHubに公開しています。
https://github.com/niuzhiheng/caffe
大体のことはREADMEに書いてますが、環境構築手順を以下にまとめます。
#準備するもの
必須
- Windows 64-bitマシン
- Visual Studio 2012
- CUDA toolkit 6.5
- その他依存関係(ここからダウンロード)
推奨
- GPU
※GPUはなくても動作しますが、CPUモードだとWindows版Caffeのバグで学習がうまくいかない場合があるみたいです。
#インストール手順
###1. Visual Studio 2012のインストール
64bit版のVisual Studio 2012インストーラーを入手し、インストールします。
###2. CUDA toolkit 6.5のインストール
ここから64bit版のCUDA toolkit 6.5をダウンロードし、インストールします。
最新版のCUDA toolkit 7.0がリリースされていますが、Caffeはバージョンの整合性に厳しいので6.5を入れておいた方が無難でしょう。
(7.0での動作は未確認です)
###3. プロジェクトのダウンロード
上記のGitHubのページのDownload Zipボタンを押してプロジェクトをダウンロードし、任意のフォルダに解凍します。ここで展開先のフォルダ名を"caffe"にすると何故かビルドできないのでご注意ください。
###4. 依存関係のダウンロード
準備項目にも記載しましたが、ここからダウンロードして、プロジェクトのルートディレクトリに解凍します。
解凍したフォルダと同名のフォルダがルートディレクトリにも存在していますが、そのまま統合します。
###5. ビルド
./build/MSVC
にあるソリューションファイルMainBuilder.slnを開き、プロジェクトを立ち上げます。ターゲットのプラットフォームをx64に指定します。
./tools
に様々なツールに相当するcppファイルがありますが、ビルドしたいツールのcppファイル名をMainCaller.cpp内でインクルードします。
デフォルトでは学習を行うtrain_net.cppが指定されていますので、このままビルドすれば学習機能を持ったツールが作成されます。
ビルドが成功したら./bin
にMainCaller.exeが吐かれています。
MainCaller.cppをデフォルトのままでビルドすれば、MainCaller.exeは学習ツールとして動作します。
非常に面倒ですが、他のツールもMainCaller.cpp内のインクルードを変えて逐一ビルドする必要があります。全て、MainCaller.exeの名前で吐かれるので、実行ファイルの名前をツールごとに変えておきましょう。(train_net.exe等)
#MNISTサンプルで学習してみる
MNISTという手書き文字のデータセットが用意されてますので、手書き文字識別器の学習を行ってみましょう。詳しいことは次回の記事で解説しようと思いますので、ここでは機械的な手順に留めておきます。
前述のビルドで、MainCaller.cppにtrain_net.cppを指定してビルドを行った前提で以下の手順を踏みます。
- コマンドライン上で
./examples/mnist
にカレントディレクトリを移します。 - get_mnist_leveldb.batを実行し、データセットをダウンロード・解凍します。mnist-train-leveldb、mnist-test-leveldbというフォルダが作成されていればデータセットの用意は完了です。
- GPUがない場合は、lenet_solver.prototxtを開き、solver_modeの項目をGPU→CPUに変更します。これでCPUモードで学習が行われます。
- train_lenet.batを実行し、学習を開始します。Iteration 100, loss = ~ のように学習経過が表示されていきます。
- 学習が完了したら識別モデルファイルlenet_iter_10000が出力されます。
環境構築の解説は以上になります。
次回はサンプルデータセットを用いたチュートリアルを解説します。