gpt4 book ai didi

python - 将 Tensorflow 卡住推理图加载到 OpenCV DNN 时出错

转载 作者:行者123 更新时间:2023-12-02 16:04:14 27 4
gpt4 key购买 nike

我已经使用 Tensorflow API 训练了一个对象检测模型,下面是基于 Roboflow 的这个 Google Colaboratory notebook 的示例。
https://colab.research.google.com/drive/1wTMIrJhYsQdq_u7ROOkf0Lu_fsX5Mu8a
到目前为止一切顺利,我已经成功地将我的训练模型提取为推理图,再次遵循同一个笔记本:

import re
import numpy as np

output_directory = './fine_tuned_model'

lst = os.listdir(model_dir)
lst = [l for l in lst if 'model.ckpt-' in l and '.meta' in l]
steps=np.array([int(re.findall('\d+', l)[0]) for l in lst])
last_model = lst[steps.argmax()].replace('.meta', '')

last_model_path = os.path.join(model_dir, last_model)
print(last_model_path)
!python /content/models/research/object_detection/export_inference_graph.py \
--input_type=image_tensor \
--pipeline_config_path={pipeline_fname} \
--output_directory={output_directory} \
--trained_checkpoint_prefix={last_model_path}
这给了我一个 frozen_inference_graph.pb我可以用来在 OpenCV DNN 中制作对象检测程序的文件。同样遵循此示例 https://stackoverflow.com/a/57055266/9914815我准备了一个模型和管道配置的 .pbtxt 文件作为 cv2.dnn.readNetFromTensorflow 的第二个参数。功能。这是足以重现我遇到的错误的代码:
model = cv2.dnn.readNetFromTensorflow('models/trained/frozen_inference_graph.pb', 
'models/trained/output.pbtxt')
当我使用预训练的 SSD MobileNet V2 COCO 模型时,此代码成功运行, ssd_mobilenet_v2_coco_2018_03_29.pbtxt但是使用我训练好的 .pbtxt 文件,它会抛出这个错误:
C:\Users\Satria\Desktop\ExploreOpencvDnn-master>python trainedmodel_video.py -i test1.mp4 -o test1result.mp4
Traceback (most recent call last):
File "trainedmodel_video.py", line 48, in <module> 'models/trained/output.pbtxt') cv2.error:
OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\dnn\src\tensorflow\tf_importer.cpp:544:error:
(-2:Unspecified error) Input layer not found: FeatureExtractor/MobilenetV2/Conv/weights in function
'cv::dnn::dnn4_v20190621::`anonymous-namespace'::TFImporter::connect'
它说找不到输入层。为什么会发生这种情况?
还要注意错误消息指出了一个目录:
C:\projects\opencv-python\opencv\modules\dnn\src\tensorflow\tf_importer.cpp
这太奇怪了,因为我 不要在我的电脑里有那个目录。
我尝试对我的和示例 SSD mobilenet 模型的 pbtxt 和配置文件进行差异检查,但我找不到在任何地方使用的该特定目录的任何实例,甚至它们内部也没有目录路径。
这是由使用 Google Colab 训练引起的吗?
有没有什么正确的方法可以在 OpenCV DNN 中使用 Colab 训练的 Tensorflow 模型?
提前致谢!

最佳答案

在我自己生成的 pbtxt 文件中添加额外的输入节点后解决
有人建议我使用的 OpenCV 版本 4.11 已过时。
我更新到 4.30,仍然无法正常工作,但是它现在让我可以使用 FusedBatchNormV3,这在 future 非常重要。
现在,在仔细查看示例中的 diffcheck 和生成的 pbtxt 后,
在示例 .pbtxt 文件中 ssd_mobilenet_v2_coco_2018_03_29.pbtxt , 第 30 行以后

node {  
name: "Preprocessor/mul"
op: "Mul"
input: "image_tensor"
input: "Preprocessor/mul/x"
}
node {
name: "Preprocessor/sub"
op: "Sub"
input: "Preprocessor/mul"
input: "Preprocessor/sub/y"
}
node {
name: "FeatureExtractor/MobilenetV2/Conv/Conv2D"
op: "Conv2D"
input: "Preprocessor/sub"
input: "FeatureExtractor/MobilenetV2/Conv/weights"
它有一个额外的输入节点,它使用 Preprocessor ,不仅 FeatureExtractor/MobilenetV2/Conv/Conv2D同时在生成的 pbtxt 上它只有这个
node {
name: "FeatureExtractor/MobilenetV2/Conv/Conv2D"
op: "Conv2D"
input: "FeatureExtractor/MobilenetV2/Conv/weights"
我将示例 .pbtxt 的 Input 节点复制到我自己生成的 .pbtxt 中,并且成功了!!!

关于python - 将 Tensorflow 卡住推理图加载到 OpenCV DNN 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62751221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com