Caffe : Tutorial : 層カタログ (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 04/02/2017
* 本ページは、Caffe の本家サイトの Tutorial – Layers を翻訳した上で適宜、補足説明したものです:
http://caffe.berkeleyvision.org/tutorial/layers.html
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
Caffe モデルを作成するためには protocol buffer 定義ファイル (prototxt) でモデル・アーキテクチャを定義する必要があります。
Caffe 層とそれらのパラメータは caffe.proto にあるプロジェクトのための protocol buffer で定義されています。
データ層
データはデータ層経由で Caffe に入ります : それらは net の bottom にあります。データは、効率的なデータベース (LevelDB または LMDB)、メモリから直接、あるいは、効率性が重要でないとき、 HDF5 のディスク上のファイルからあるいは共通の画像フォーマットから入って来るることができます。
一般的な入力前処理 (平均値除去、スケーリング、ランダム・クロッピング、そしてミラーリング) は、層の幾つかで TransformationParameters を指定することにより利用可能です。TransformationParameter が利用可能でない時には、bias、scale、そして crop 層が入力を変形するために有用です。
層 :
- Image Data – 生画像を読む。
- Database – LEVELDB または LMDB からデータを読む。
- HDF5 Input – HDF5 データを読む、任意の次元のデータを許可します。
- HDF5 Output – データを HDF5 として書く。
- Input – 典型的にはデプロイされるネットワークのために使用されます。
- Window Data – window データファイルを読む。
- Memory Data – メモリから直接データを読む。
- Dummy Data – 静的なデータとデバッギングのため。
Python 層はカスタム・データ層を作成するためには有用であることに注意しましょう。
ビジョン層 (Vision Layers)
ビジョン層は通常は入力として画像を取りそして出力として他の画像を生成します、但し他の型と次元のデータを取ることができます。現実世界での典型的な「画像」はグレイスケール画像として一つのカラーチャネル (c=1) を、あるいはRGB (red, green, blue) 画像として3つのカラーチャネル (c=3) を 持ちます。しかしこのコンテキストでは、画像の際立った特性はその空間的な構造です : 通常は画像は幾つかの自明でない高さ h>1 と幅 w>1 を持ちます。特に、ビジョン層の多くは、入力のある領域に特定の演算を適用して該当する出力の領域を生成することにより動作します。対照的に、他の層は (数少ない例外はありますが) 入力の空間的な構造は無視して、それを次元 chw で効率的に “一つの大きなベクトル” として扱います。
層 :
- Convolution Layer – 入力画像を学習可能なフィルタのセットで畳み込み、それぞれは出力画像で一つの特徴マップを生成します。
- Pooling Layer – max, average, または stochastic pooling.
- Spatial Pyramid Pooling (SPP)
- Crop – cropping 変形を実行する.
- Deconvolution Layer – transposed convolution.
- Im2Col – 名残りとしての (= relic) ヘルパー層、もう殆ど使用されません。
Recurrent 層
層 :
Common 層
層 :
- Inner Product – 完全結合層。
- Dropout
- Embed – one-hot の埋め込みを学習するため。
Normalization 層
- Local Response Normalization (LRN) – 局所入力領域 (local input regions) に渡って正規化することにより「側方抑制 (lateral inhibition)」の類のものを実行します。
- Mean Variance Normalization (MVN) – コントラスト正規化 / インスタンス正規化を実行します。
- Batch Normalization – ミニバッチに渡る正規化を実行します。
Activation / Neuron 層
一般的に、activation / Neuron 層は element-wise 演算であり、一つの bottom blob を取って同じサイズの一つの top blob を生成します。下の層では、入力と出力サイズは無視します、それらは同じですので。
- Input
- n * c * h * w
- Output
- n * c * h * w
層 :
- ReLU / Rectified-Linear と Leaky-ReLU – ReLU と Leaky-ReLU rectification.
- PReLU – parametric ReLU.
- ELU – exponential linear rectification.
- Sigmoid
- TanH
- Absolute Value (訳注: リンク切れ)
- Power – f(x) = (shift + scale * x) ^ power.
- Exp – f(x) = base ^ (shift + scale * x).
- Log – f(x) = log(x).
- BNLL – f(x) = log(1 + exp(x)).
- Threshold – ユーザ定義しきい値で階段関数を実行する。
- Bias – blob に bias が加算されこれは学習されるか固定されます。
- Scale – 学習されるか加算されるかの総計 (=amount) で blob をスケールします。
Utility 層
層 :
- Flatten
- Reshape
- Batch Reindex
- Split
- Concat
- Slicing
- Eltwise – 2つの blob 間の積 (product) または総和 (sum) のような element-wise 演算。
- Filter / Mask – 最後の blob を使用して出力をマスクまたは選択する。
- Parameter – 層間で共有されるパラメータを有効にする。
- Reduction – 総和 (sum) または平均 (mean) のような演算を使用して入力 blob をスカラー blob に次元削減します。
- Silence – 訓練中、top-level blob の表示を回避する。
- ArgMax
- Softmax
- Python – カスタム Python 層を可能にする。
Loss 層
損失は、出力をターゲットと比較してコストを最初化するように割り当てることで学習を駆動します。損失自身は forward パスで計算されて損失に関する勾配は backward パスで計算されます。
層 :
- Multinomial Logistic Loss
- Infogain Loss – MultinomialLogisticLossLayer の一般化。
- Softmax with Loss – その入力の softmax の多項ロジスティック損失を計算する。概念的には多項ロジスティック損失層が続く softmax 層と同じですが、より数値的に安定な勾配を提供します。
- Sum-of-Squares / Euclidean – その2つの入力の差の二乗の合計を計算します、$\frac{ 1 }{ 2N } \sum_{ i = 1 }^{ N } \| x_i^1 – x_i^2 \|^2$。
- Hinge / Margin (訳注: リンク切れ) – The hinge loss layer computes a one-vs-all hinge (L1) or squared hinge loss (L2).
- Sigmoid Cross-Entropy Loss – 交差エントロピー (ロジスティック) 損失を計算します、しばしば確率として解釈されるターゲットを予測するために使用されます。
- Accuracy / Top-k layer – scores the output as an accuracy with respect to target – it is not actually a loss and has no backward step.
- Contrastive Loss
以上