【问题标题】:How to import TensorFlow model with flatten layer in OpenCV?如何在 OpenCV 中导入具有展平层的 TensorFlow 模型?
【发布时间】:2018-01-06 12:06:54
【问题描述】:

我用 Keras 创建了一个 CNN。网的代码是:

model = Sequential()

model.add(Conv2D(32, (3,3), data_format='channels_last', input_shape=(48, 32, 3), name='data'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid', name='result_class'))

然后,使用this script,我将 Keras 创建的 .h5 文件转换为 .pb。

现在我想使用 OpenCV (3.4) 导入模型,但是当我执行以下代码时

Net net;
try {
    net = dnn::readNetFromTensorflow(model_path);
}
catch (cv::Exception& e) {
    cerr << "Exception: " << e.what() << endl;
    if (net.empty()) {
        cerr << "Can't load the model" << endl;
    }
}

我收到此错误:

OpenCV Error: Unspecified error (Unknown layer type Shape in op flatten_1/Shape) in populateNet, file /home/nicola/Scrivania/opencv-3.4.0/opencv-3.4.0/modules/dnn/src/tensorflow/tf_importer.cpp, line 1487
Exception: /home/nicola/Scrivania/opencv-3.4.0/opencv-3.4.0/modules/dnn/src/tensorflow/tf_importer.cpp:1487: error: (-2) Unknown layer type Shape in op flatten_1/Shape in function populateNet
Can't load the model

OpenCV 似乎无法处理 flatten 层,对吗?有没有办法导入我的网络?

感谢您的帮助。

【问题讨论】:

  • 你可以尝试用reshape layer替换flatten。 Flatten 仅针对 Keras。
  • 感谢您的回答。我在 Keras 中更改了网络的代码,而不是展平层,现在我有以下行 model.add(Reshape((-1,))),但我在重塑层上遇到了同样的错误:OpenCV Error: Unspecified error (Unknown layer type Shape in op reshape_1/Shape) in populateNet, file /home/nicola/Scrivania/opencv-3.4.0/opencv-3.4.0/modules/dnn/src/tensorflow/tf_importer.cpp, line 1487 Exception: /home/nicola/Scrivania/opencv-3.4.0/opencv-3.4.0/modules/dnn/src/tensorflow/tf_importer.cpp:1487: error: (-2) Unknown layer type Shape in op reshape_1/Shape in function populateNet

标签: c++ opencv tensorflow keras


【解决方案1】:

是的,目前看来 Opencv 在处理展平层时遇到了问题。 您可以在此处查看更多信息:https://github.com/opencv/opencv_contrib/issues/1241

建议的解决方法是在网络上直接使用tf.reshape。但我也在研究如何在 keras 层上做到这一点。

【讨论】:

    猜你喜欢
    • 2018-04-14
    • 2018-08-30
    • 2020-10-14
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    相关资源
    最近更新 更多