首页 > 解决方案 > 无法使用 cv2.dnn.readNetFromTensorflow() 导入 tflite_graph.pb,Python

问题描述

我正在尝试使用 OpenCV测试ssd_mobileet_cpu_coco 模型。该模型有一个tflite_graph.pbtflite_graph.pbtxt一堆其他文件,包括一个检查点文件。我对 TensorFlow 比较陌生。我看过人们cv2.dnn.readNetFromTensorflow用来阅读 TensorFlow 模型的教程。但是他们将 a 传递frozen_inference_model.pb给我没有的这个函数。我编写了以下脚本作为测试来尝试加载模型:

import cv2

if __name__ == "__main__":
    
    frozen_graph_path = "tflite_graph.pb"
    model_path = "tflite_graph.pbtxt"
    input_source = "input_video.mp4"
    model = cv2.dnn.readNetFromTensorflow(frozen_graph_path, model_path)

    while (True):

        if (ret):
            frame_height, frame_width, _ = frame.shape
            model.setInput(cv2.dnn.blobFromImage(frame, size=(320, 320), swapRB=True, crop=False))
            output = model.forward()

但我收到以下错误:

cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-r2ue8w6k\opencv\modules\dnn\src\tensorflow\tf_importer.cpp:672: 
error: (-215:Assertion failed) const_layers.insert(std::make_pair(name, li)).second in function 'cv::dnn::dnn4_v20201117::`anonymous-namespace'::addConstNodes'

我搜索了这个GitHub线程,@dkurt 提到这.pbtxt是可选的。此外,@AmanGoyalNayan 在下面的线程中询问了这个问题的确切问题,但仍未得到答复。

所以我尝试了@dkurt 建议的解决方案并得到了这个错误:

cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-r2ue8w6k\opencv\modules\dnn\src\layers\eltwise_layer.cpp:216: 
error: (-215:Assertion failed) inputs[0][j] == inputs[i][j] in function 'cv::dnn::EltwiseLayerImpl::getMemoryShapes'
  1. 是因为我只能通过一个frozen_inference_graph.pb吗?
  2. 如果是这样,我可以tflite_graph.pb使用模型中的其他文件转换为它的冻结版本吗?
  3. 我什至可以tflite_graph.pb直接使用 OpenCV 导入吗?

Opencv = 4.5 windows 10

谢谢!

标签: pythontensorflowopencv

解决方案


推荐阅读