2017-10-13 7 views
1

zf netのprototxtファイルの手順を再現することに興味があります。私が確信している部分はソフトマックス層です。そしてそれは(W 1,2,9 *のH)寸法に整形さPyfaster RCNN ZFネットワークモデルのSoftmax入力寸法

layer { 
    name: "rpn_cls_score" 
    type: "Convolution" 
    bottom: "rpn/output" 
    top: "rpn_cls_score" 
    convolution_param { 
    num_output: 18 # 2(bg/fg) * 9(anchors) 
    kernel_size: 1 pad: 0 stride: 1 
    weight_filler { type: "gaussian" std: 0.01 } 
    bias_filler { type: "constant" value: 0 } 
    } 
} 

ここで:最後

layer { 
    bottom: "rpn_cls_score" 
    top: "rpn_cls_score_reshape" 
    name: "rpn_cls_score_reshape" 
    type: "Reshape" 
    reshape_param { shape { dim: 0 dim: 2 dim: -1 dim: 0 } } 
} 

rpn_cls_scoreは、ここでの寸法(1,18、H、W)を使用して作成されそれはsoftmaxに渡されます:

layer { 
    name: "rpn_cls_prob" 
    type: "Softmax" 
    bottom: "rpn_cls_score_reshape" 
    top: "rpn_cls_prob" 
} 

私の質問はこれです。 caffeのオンラインドキュメントによると、softmaxは1次元の入力を受け取りますが、rpn_cls_score_reshapeは寸法(1,2,9 * h、w)を持ちます。 softmaxはすべてのインデックスを合計しますか?または、C + +コードが示すように、残りのインデックスに対してのみ正準軸と合計を選択しますか?この場合、rpn_cls_score_reshapeは2つの配列(1、channel = 1,9 * h、w)と(1、channel = 2,9 * h、w)の2つの配列に分割され、各要素で9 * h * w要素の指数を合計してsoftmaxを実行し、元の次元(1,2,9 * h、w)の配列に再アセンブリしてrpn_cls_probとして返します。そうでない場合、softmaxは複数の次元を持つ入力配列をどのように扱いますか? SofmaxParameterとして

おかげ..

答えて

0

caffe.protoに記載されて、それは1にデフォルトで設定されたパラメータの軸を持っています

// The axis along which to perform the softmax -- may be negative to index 
// from the end (e.g., -1 for the last axis). 
// Any other axes will be evaluated as independent softmaxes. 
optional int32 axis = 2 [default = 1]; 

ので、C++の実装のためのご理解が正しいか、とのためにsoftmaxがND入力をN> 1で処理する方法についての質問は、各軸が別々に評価されることです。
フォアグラウンドボックスのみに興味がある場合は、rpn_cls_score BLOBを分割して後半部分のみを使用することができます(つまり、ネットワーク設定をnum_output: 9 # instead of 18に設定した後、またはトレーニング使用時にSliceレイヤーを使用して2番目半分のみ)。あなたがいつものように訓練し、訓練の後にnum_outputを変更する場合には、それに応じてカフェモデルを変更するように注意してください。