使用OpenCV readNetFromTensorFlow运行Keras DNN模型(UNet):错误:op解码器中未知层类型形状\u stage0\u上采样/形状

2024-05-17 04:35:54 发布

您现在位置:Python中文网/ 问答频道 /正文

Python版本3.7

Keras版本2.3.1

TensorFlow版本1.14.0

我希望使用C++中的OpenCV的Read NETFrenceSoFunm运行UNet Keras模型。根据此问题,我已成功将HDF5文件转换为.pb: How we can convert keras model .h5 file to tensorflow saved model (.pb)

但是,当我尝试运行该命令时(为了便于测试,请先使用python):

net = cv.dnn.readNetFromTensorflow('tensorflow/my_model.pb')

我收到失败的消息:

error: (-2) Unknown layer type Shape in op decoder_stage0_upsampling/Shape in function cv::dnn::experimental_dnn_v2::`anonymous-namespace'::TFImporter::populateNet

使用OpenCV是否有解决方法?或者在这种情况下,使用TysFuns+C++ API是最好的。p>


Tags: in模型版本unetreadmodeltensorflowopencv
1条回答
网友
1楼 · 发布于 2024-05-17 04:35:54

我已经解决了我的问题,并将在这里为任何希望在自己的UNet上使用OpenCV执行推理的人添加我的解决方案

步骤1: 将H5/HDF5文件转换为.pb,如我在上述问题中所述

步骤2: OpenCV必须升级到4.2.0(不确定我的解决方案是否在3.3.1[我的起始OpenCV版本]和4.2.0之间的任何其他版本中受支持)

步骤3: 按照我问题中的代码所述加载网络,这应该是成功的。完成后,加载图像并使用cv2.blobFromImage()构造blob,然后设置输入,最后执行推断:

blob = cv.dnn.blobFromImage(image, 1 / 255.0, (256,256), swapRB=True)
net.setInput(blob)
out = net.forward()

查看您的输出: 您将得到一个(1,1,x,y)形状。使用所需的函数重塑输出(在我的例子中,我只使用np.resize()。绘制输出并查看结果

希望这能帮助那些不想处理TysFooS+C++ API的人,需要一个相对好的工作C++推理设置。p><>编辑:作为一个注释,我应该提到我还没有用C++ OpenCV库来测试这个。我计划在下周左右做这件事。如果这个解决方案在C++中不起作用,我会在这里注意到。p>< >编辑2:在C++

中进行测试和工作

相关问题 更多 >