C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（１）　概要編

今回はさわりだけ。

# WindowsにCeffeをインストールする
もうこんなお話はそこらじゅうに書かれているので省略。
ソース元として、「公式のブランチ」と「Microsoft製」があるが、好きな方を使えばいいと思う。

なお、C++プログラマ向けなので、Pythonも使わないし、Matlabも使わない。（だからインストールもしない）
GPUは使います。

なお、以下はくれぐれも注意するように。

- GPUの「Compute Capability」の設定

![image2.png](https://qiita-image-store.s3.amazonaws.com/0/130771/d2078673-adcb-8a7a-85e3-7fdfe87963c7.png)

- ワーニングがエラーになる件

![image1.png](https://qiita-image-store.s3.amazonaws.com/0/130771/5188d775-9e9d-10de-d2e5-d8cd9b790435.png)

# 実行モジュール
ソリューションを全部ビルドすると、以下の実行モジュールが「caffe\Build」の下の下の下に出来上がる。

| 実行モジュール名 | 処理内容 | 重要度 |
|:--|:--|:--:|
| caffe.exe              | 学習する | ★ |
| classification.exe     | 評価する | ★ |
| compute_image_mean.exe | 平均画像を作る | ★ |
| convert_imageset.exe   | 画像データベースを作る | ★ |
| convert_cifer_data.exe | CIFER10用データ変換 | |
| convert_mnist_data.exe | MNIST用データ変換 | |
| convert_mnist_siamese_data.exe | Siamese用データ変換 | |
| extract_features.exe | 特徴抽出（可視化用） | |
| test_all.exe | モジュールのテスト用 | |
| upgrade_net_proto_binary.exe | データ変換用（学習データ） | |
| upgrade_net_proto_text.exe | データ変換用（設定ファイル） | |
| upgrade_solver_proto_text.exe | データ変換用（solver） | |

これらのソースは、

```
caffe\tools
```
の下にある。
（classificationだけは、caffe\examples\cpp_classificationにある）

全部C++なので、とてもうれしい。
Caffe本体のソースが見たければ、

```
caffe\src\caffe
```
から掘っていけばいい。

あんまり役には立たないが、公式の[リファレンス](http://caffe.berkeleyvision.org/doxygen/annotated.html)もある。

# 実行
これもあちらこちらのサイトに書いてあるから省略するが、基本的な流れは以下の通り。

1. 学習用データを集めて、リストを作る
2. 「convert_imageset.exe」で画像データベースを作成する
3. 「compute_image_mean.exe」で平均画像を作成する
4. 学習ネットワークを考える（どっかから持ってくる）
5. 「caffe.exe」で学習する
6. 「classification.exe」で評価する

# ログファイル
実行結果は、環境変数「Temp」の下にできる。
例えば、「%Temp% = c:\Users\hoge\AppData\Local\Temp」といった感じ。

またログファイル名は、「実行ファイル名.ホスト名.ユーザ名.log.重要度レベル.日付-時間.プロセス番号」となる。
実行ファイル名は「caffe」とか「classification」とかになる。
重要度レベルは「FATAL」「ERROR」「WARNING」「INFO」のどれかになる。
日付・時間は、例えば「20160101-135610」と「年月日-時分秒」の形式で作られる。
（例）caffe.HOSTNAME.username.log.WARNING.20160101-135610.12345

# 実行時の注意事項

- GPUのメモリが足らなくてエラーになる場合は、バッチの数を減らすか、画像サイズを小さくする（または、GPUを使わない）
- 学習データの読み込みが遅いので、いくつも評価したいときは、「classification.exe」内でループを回したほうがいい
- 学習用の画像の数とネットワークの階層の深さのバランスが合っていないと、思ったような認識率にならない
- 最終的には、学習用の画像の質がものをいう

# 参考サイト
[http://qiita.com/SousukeShimoyama/items/88f538735bbcf434816b](http://qiita.com/SousukeShimoyama/items/88f538735bbcf434816b)
[http://tadaoyamaoka.hatenablog.com/entry/2016/06/19/225038](http://tadaoyamaoka.hatenablog.com/entry/2016/06/19/225038)
[http://ouranos.sakura.ne.jp/wordpress/2016/05/28/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-caffe-for-windows-%E3%81%9D%E3%81%AE1-%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/](http://ouranos.sakura.ne.jp/wordpress/2016/05/28/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-caffe-for-windows-%E3%81%9D%E3%81%AE1-%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/)
[http://t.doujin-constant.net/post/141667191784/caffe%E3%81%AEvisual-studio%E3%83%93%E3%83%AB%E3%83%89](http://t.doujin-constant.net/post/141667191784/caffe%E3%81%AEvisual-studio%E3%83%93%E3%83%AB%E3%83%89)

# 関連記事
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（２）](http://qiita.com/mine820/items/9ea5812fc25a70419f31)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（３）](http://qiita.com/mine820/items/f4395a3ac734085e5ed1)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（４）](http://qiita.com/mine820/items/41347cd99278d0dc6715)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（５）](http://qiita.com/mine820/items/e8857fee3fa0b4ada170)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（６）](http://qiita.com/mine820/items/01a275d1065d299702fc)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（７）](http://qiita.com/mine820/items/1e100330d163f9959c65)
[C++プログラマがWindows上でCaffeを使ってDeep Learningするお話（８）](http://qiita.com/mine820/items/30fcc4e5f794c42b4bd7)