caffe特殊層說明

1.Normalize層

layer {
  name: "conv4_3_norm"
  type: "Normalize"
  bottom: "conv4_3"
  top: "conv4_3_norm"
  norm_param {
    across_spatial: false
    scale_filler {
      type: "constant"
      value: 20
    }
    channel_shared: false
  }
}

 

2.Permute層

layer {
  name: "conv4_3_norm_mbox_loc_perm"
  type: "Permute"
  bottom: "conv4_3_norm_mbox_loc"
  top: "conv4_3_norm_mbox_loc_perm"
  permute_param {
    order: 0
    order: 2
    order: 3
    order: 1
  }
}

     permute是SSD特有的層,功能類似於np.swapaxes,相當於交換caffe_blob中數據的維度。例如,經過conv4_3_norm_mbox_loc_perm層後,caffe裏面blob順序由[batch_size,channels,height,width]變爲[batch_size,height,width,channels]。

3.Flatten層

layer {
  name: "conv9_2_mbox_conf_flat"
  type: "Flatten"
  bottom: "conv9_2_mbox_conf_perm"
  top: "conv9_2_mbox_conf_flat"
  flatten_param {
    axis: 1
  }
}

    將多維數據拉成向量:Flatten層是把一個輸入的大小爲N*C*H*W變成一個簡單的向量,其大小爲 N*(C*H*W)。當Reshape層的param參數爲:{ shape { dim: 0 dim: -1 } } ,那麼輸出和flatten輸出是完全一樣的。所以,flatten相當於是reshape的特例。

4.Concat層

layer {
  name: "mbox_priorbox"
  type: "Concat"
  bottom: "conv4_3_norm_mbox_priorbox"
  bottom: "fc7_mbox_priorbox"
  bottom: "conv6_2_mbox_priorbox"
  bottom: "conv7_2_mbox_priorbox"
  bottom: "conv8_2_mbox_priorbox"
  bottom: "conv9_2_mbox_priorbox"
  top: "mbox_priorbox"
  concat_param {
    axis: 2
  }
}

    按指定維度進行拼接,通過axis指定拼接的維度。caffe中數據通常爲4個維度,即 NCHW,因此默認值1表示channels通道進行拼接。

5.reshape層

layer {
  name: "mbox_conf_reshape"
  type: "Reshape"
  bottom: "mbox_conf"
  top: "mbox_conf_reshape"
  reshape_param {
    shape {
      dim: 0
      dim: -1
      dim: 2    ####12
    }
  }
}

    只改變輸入數據的維度,內容不變。“dim:0”表示維度不變,“dim:2”或“dim:3”表示將原來維度變爲2或3,“dim:-1”表示由系統自動根據之前維度推斷出當前維度。

6.slice層

 

    concat就是合併的操作,那麼slice就是拆分的操作,需要指定的參數是:拆分的通道axis、拆分的位置slice_point

 

 

 

 

 

參考文獻:

  1. https://blog.csdn.net/liu1152239/article/details/81478313
  2.  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章