1. 程式人生 > >caffe,Inception v2 Check failed: top_shape[j] == bottom[i]->shape(j)

caffe,Inception v2 Check failed: top_shape[j] == bottom[i]->shape(j)

del 輸入 class number rules put ogl pro 報錯

使用Caffe 跑 Google 的Inception V2 對輸入圖片的shape有要求,某些shape輸進去可能會報錯。
Inception model中有從conv和pooling層concat的操作,而conv和pooling的output輸出計算方式不完全一樣。解決方案:
1. 按照原來prototxt輸出圖片
2. 把concat層前面stride為2的conv層替換stride為1,再額外加上一個stride為2的pooling層
e.g. 以 Inception v2 為例子InceptionBN
conv_3c_3x3, conv_3c_double_3x3_1
conv_4e_3x3, conv_4e_double_3x3_1
然後再接上 stride 為2 的max pooling 層,這樣幾個分支出來的shape都會保持一致。

layer {
  name: "conv_3c_3x3"
  type: "Convolution"
  bottom: "conv_3c_3x3_reduce"
  top: "conv_3c_3x3"
  convolution_param { 
     num_output: 240
     kernel_size: 3
     stride: 1
     pad: 1
  }
}

layer {
  name: "max_pool_3c_3x3"
  type: "Pooling"
  bottom: "conv_3c_3x3"
  top: "conv_3c_3x3"
  pooling_param {
     pool: MAX
     kernel_size: 3
     stride: 2
     pad: 0
  }
}

這是取巧的做法,雖然保持了加載模型參數一致,但是增加了conv操作(stride變小)和多了一層pooling操作,會增加計算量和消耗顯存。

caffe,Inception v2 Check failed: top_shape[j] == bottom[i]->shape(j)