opencv3.4.0,我的代码是示例代码tf_inception.cpp:

dnn::Net net = readNetFromTensorflow(modelFile);
//! [Prepare blob]
Mat img = imread(imageFile);
cv::Mat img_gray;
std::cout<<"after read img"<<std::endl;
cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);

Mat inputBlob = blobFromImage(img_gray, 1.0f, Size(39, 39), Scalar(), true, false);   
inputBlob -= 117.0;

std::cout<<"blobFromImage"<<std::endl;
//! [Set input blob]
net.setInput(inputBlob, inBlobName);     
std::cout<<"setInput"<<std::endl;

cv::TickMeter tm;
tm.start();
Mat result = net.forward(outBlobName);           
std::cout<<"forward"<<std::endl;

运行dnn并得到错误:OpenCV错误:断言失败(type2 == 6 &&(sz2.height == 1 || sz2.height == 4))在arithm_op,文件/home/zero/Program/opencv-3.4 . 0 / modules / core / src / arithm.cpp,第662行终止在抛出'cv :: Exception'的实例后调用what():/ home /zero / Programming / openscv-3.4.0 / modules / core / src / arithm.cpp:662:错误:(-215)type2 == 6 &&(sz2.height == 1 || sz2.height == 4)函数arithm_op

我打印日志,我看到type2的值为5.我不知道发生了什么 . 我的模型定义是:使用tf.variable_scope(范围,'opencv_v1',[images,num_classes]):

image_gray = images[:,:,:,0:1]
images_input = tf.placeholder_with_default(image_gray, shape=[None, 39, 39, 1], name='InputPlaceholder')

net = slim.conv2d(images_input, 16, [4, 4], padding='VALID', scope='conv1')
end_points['conv1'] = net

net = slim.max_pool2d(net, [2, 2], 2, scope='pool1')
end_points['pool1'] = net

net = slim.conv2d(net, 32, [3, 3], padding='VALID', scope='conv2')
# net = net[:,1:-1,1:-1,:]
# net = slim.conv2d(net, 32, [3, 3], padding='SAME', scope='conv2')
end_points['conv2'] = net

net = slim.max_pool2d(net, [2, 2], 2, scope='pool2')
end_points['pool2'] = net

print('net')
print(net)

net = slim.conv2d(net, 10, [8, 8], padding='VALID', scope='conv3')
end_points['conv2'] = net

net = tf.reshape(net,[-1, 10])
# net = tf.concat([net], 1)

# zero = tf.zeros([1, num_classes], name="zero")
zero = tf.zeros([1, 1], name="zero")
# output = tf.identity(net, name="Output")
output = tf.add(net, zero, name="Output")
end_points['Output'] = output

pb文件层名称列表是:opencv_v1 / InputPlaceholder opencv_v1 / conv1 / weights opencv_v1 / conv1 / biases opencv_v1 / conv1 / convolution opencv_v1 / conv1 / BiasAdd opencv_v1 / conv1 / Relu opencv_v1 / pool1 / MaxPool opencv_v1 / conv2 / weights opencv_v1 / conv2 /偏差opencv_v1 / conv2 / convolution opencv_v1 / conv2 / BiasAdd opencv_v1 / conv2 / Relu opencv_v1 / pool2 / MaxPool opencv_v1 / conv3 / weights opencv_v1 / conv3 / biases opencv_v1 / conv3 / convolution opencv_v1 / conv3 / biasAdd opencv_v1 / conv3 / Relu opencv_v1 / Reshape / shape opencv_v1 / reshape opencv_v1 / zero opencv_v1 / Output

它在最后一层崩溃了 .