【发布时间】:2019-06-03 18:20:36
【问题描述】:
我尝试在 opencv dnn 中实现一个 tensorflow 模型。这是我遇到的错误:
OpenCV:无法创建类型为“Shape”的图层“flatten_1/Shape”
我使用 keras 构建模型
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape = (32,32,1), activation = 'relu'))
model.add(Conv2D(32, (3, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())#<== this is the layer that opencv doesnt support
model.add(Dense(units = 128, activation = 'relu'))
model.add(Dropout(0.5))
model.add(Dense(units = num_classes, activation = 'softmax'))
我已经尝试过this:
from tensorflow.python.keras.layers.core import Reshape
model.add(Reshape((-1,)))
但是又报错了
TypeError:添加的层必须是类Layer的实例。找到:tensorflow.python.keras.layers.core.Reshape 对象位于 0x000001D21EF1A630>
从那里我还没有找到任何解决方案。我的问题是在 keras 中是否可以替换 Flatten()。
【问题讨论】:
-
使用的是哪个版本的 OpenCV?
-
我使用的是 OpenCV 3.4.2
-
使用 OpenCV 3.4.2 是否重要?如果没有,请尝试最新版本。
-
实际上,这是因为我需要使用 EmguCV,它是 C# 的 OpenCV 的包装器。 EmguCv 中的 OpenCV 版本现在只有 3.4.2。
-
知道了。所以你可以尝试使用
readNetFromTensorflow: docs.opencv.org/3.4.2/d6/d0f/… 的第二个参数。这是 TensorFlow 图的文本表示,可以轻松修改。在 OpenCV 论坛查看answers.opencv.org/question/183507/… 或其他问题:answers.opencv.org/questions/scope:all/sort:activity-desc/…。
标签: python opencv tensorflow keras