Ncnn: MobileNetSSD_deploy.caffemodel转成bin,param之后,iOS运行时load_param出错。

Created on 26 Oct 2017  ·  11Comments  ·  Source: Tencent/ncnn

MobileNetSSD_deploy.caffemodel的模型转成bin,param之后,运行ncnn的iOS源码,int r0 = net.load_param([paramPath UTF8String]); 这句代码报错,请问是什么原因?

1424 x 1920
find_blob_index_by_name conv1/dw failed
find_blob_index_by_name conv2/dw failed
find_blob_index_by_name conv3/dw failed
find_blob_index_by_name conv4/dw failed
find_blob_index_by_name conv5/dw failed
find_blob_index_by_name conv6/dw failed
find_blob_index_by_name conv7/dw failed
find_blob_index_by_name conv8/dw failed
find_blob_index_by_name conv9/dw failed
find_blob_index_by_name conv10/dw failed
find_blob_index_by_name conv11/dw failed
find_blob_index_by_name conv12/dw failed
find_blob_index_by_name conv13/dw failed
find_blob_index_by_name conv11_conv11/relu_splitncnn_2 failed
Convolution load_param failed 1
layer load_param failed
find_blob_index_by_name conv11_conv11/relu_splitncnn_1 failed
Convolution load_param failed 1
layer load_param failed
layer PriorBox not exists
layer index -1 not exists
custom layer PriorBox not exists
custom layer index -1 not exists

Most helpful comment

prototxt 输入部分需要改写成 Input layer 的形式,类似于如下,然后再 caffe2ncnn

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { shape: { dim: 1 dim: 3 dim: 300 dim: 300 } }
}

All 11 comments

ncnn.framework 需要更新

我用ubuntu执行的结果也会报错:
find_blob_index_by_name data_splitncnn_6 failed
find_blob_index_by_name data_splitncnn_5 failed
find_blob_index_by_name data_splitncnn_4 failed
find_blob_index_by_name data_splitncnn_3 failed
find_blob_index_by_name data_splitncnn_2 failed
find_blob_index_by_name data_splitncnn_1 failed
find_blob_index_by_name data_splitncnn_0 failed

我用caff2ncnn生成的proto里面没有Input 和Split层,所以会出现上述错误吧,怎么修复呢

换了新的SDK之后,不闪退了。
但还是报错

1424 x 1920
find_blob_index_by_name data_splitncnn_6 failed
find_blob_index_by_name data_splitncnn_5 failed
find_blob_index_by_name data_splitncnn_4 failed
find_blob_index_by_name data_splitncnn_3 failed
find_blob_index_by_name data_splitncnn_2 failed
find_blob_index_by_name data_splitncnn_1 failed
find_blob_index_by_name data_splitncnn_0 failed
net load 0 0

最后ex.extract("prob", out); 产出的out.c是0,不太明白什么原因

prototxt 输入部分需要改写成 Input layer 的形式,类似于如下,然后再 caffe2ncnn

layer {
  name: "data"
  type: "Input"
  top: "data"
  input_param { shape: { dim: 1 dim: 3 dim: 300 dim: 300 } }
}

name: "MobileNet-SSD"
input: "data"
input_shape {
dim: 1
dim: 3
dim: 300
dim: 300
}
layer {
name: "conv0"
type: "Convolution"
bottom: "data"
top: "conv0"
param {
lr_mult: 1.0
decay_mult: 1.0
}
param {
lr_mult: 2.0
decay_mult: 0.0
}
convolution_param {
num_output: 32
pad: 1
kernel_size: 3
stride: 2
weight_filler {
type: "msra"
}
bias_filler {
type: "constant"
value: 0.0
}
}
}

比如这个prototxt 中的这一部分,应该改写成什么可以支持。求帮助,谢谢

就是这几行

input: "data"
input_shape {
dim: 1
dim: 3
dim: 300
dim: 300
}

把 input_shape {
dim: 1
dim: 3
dim: 300
dim: 300
}
改成 layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 300 dim: 300 } }
}
是吗?

还有那行 input: "data"
......

改成这种之后,成功运行了。
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 300 dim: 300 } }
}

ex.input("data", in);
ex.extract("data", out);

输出的out.c==3。
const float* prob = out.data + out.cstep * j;
对应的prob[0]都是负数。
ex.input,ex.extract 是不是不应该是data

Was this page helpful?
0 / 5 - 0 ratings

Related issues

makaaay picture makaaay  ·  4Comments

wanzghen0123 picture wanzghen0123  ·  3Comments

baiyecha picture baiyecha  ·  3Comments

Abel119 picture Abel119  ·  4Comments

yizhaoyanbo picture yizhaoyanbo  ·  3Comments