Caffeをはじめようを読んでの個人的なまとめメモです。
今回はCaffe及び深層学習(Deep Learning)についての概要と、Caffeの依存するライブラリについて。
Caffeとは
深層学習(Deep Learning)
-
深層学習の適用例
- Google
- 広告の出し方
- 音声認識
- Flickr
- 投稿画像への自動タグ付け
- Paypal
- 詐欺検知システム
- Google
-
入力するデータは多いほうが良い学習ができるが、その分マシンリソースが必要となる。
-
ネットワークをDeep(深層)にすると何が良いのか?
- 幾層にも重なったネットワークで、ノイズ(音声であれば、音の高低、話すスピードなどの個人差、録音環境の違いなど)を取り除くことにより、本当に必要な情報を抽出できる。
-
ただし層の数が多すぎると
過学習
に陥ることがある。-
過学習
とは、モデルが教師データに対して最適化されてしまって、未知の入力に対してパフォーマンスが出ない状態。
-
学習したい内容によって、ニューラルネットワークの 層の数
, ユニットの数
, 隣接層のユニットの繋がり方
等が異なる。
画像分野における深層学習
- 畳み込み層とプーリング層を含むニューラルネットワークは
畳み込みニューラルネットワーク(CNN)
という。 - CNNは画像処理分野では、当たり前のように採用される手法。
Caffeの紹介
- CaffeにはPythonとMATLABのインターフェイスが用意されている。
- CUDA(NVIDIAのGPUを使用するためのSDK)に対応している。
- GPUを利用して高速に演算できる(CPUだけで処理することも可能。その場合は処理速度は遅くなる)。
依存関係にあるライブラリ
- CUDA
- NVIDIAのGPUを使用するためのSDK
- BLAS
- 線形代数演算を行うためのライブラリ
- Caffeでは
ATLAS
,OPENBLAS
,MKL
の三種類のBLASライブラリに依存する。- ATLAS: 自動で最適化されたBLASライブラリを生成するオープンソースライブラリ。
- OpenBLAS: 手動でX86などに最適化されたライブラリ。
- MKL: Intel製CPUに最適化されたIntel製ライブラリ。
- MKLは有償ライセンスが必要
- OpenCV(> 2.4)
- 画像の入出力周りや、画像の一部を切り抜く際に使われる。
- Boost
- C++用の便利な汎用ライブラリ。
- glog
- ログAPIを提供するライブラリ。
- gflags
- コマンドラインオプション等を処理するライブラリ。
- protobuf (Google Protocol Buffer)
- データを効率的にシリアライズするライブラリ。MessagePackのようなもの?
-
.proto
形式のファイルにデータ構造を定義すると、各データをメンバ変数として扱えるクラスを自動生成する。
- LevelDB
- 高速な
Key-Value Store
のローカルデータベースを提供する。Caffe内部では学習データと評価データの保存に使われる。
- 高速な
- snappy
- データの圧縮・解凍機能を提供するライブラリ。LevelDBへの保存、取り出し時に使われる。
- LMDB
- LevelDBの問題を解決するために導入されたローカルデータベースライブラリ。
- HDF5
- 大量の数値データを保存するのに適したファイルフォーマットとファイル操作を提供するライブラリ。