重新训练MobileNet SSD V1 COCO后,Tensorflow的pb和pbtxt文件无法与OpenCV一起使用

时间:2019-03-14 08:53:03

标签: python opencv tensorflow object-detection object-detection-api

我已按照this教程按照所述使用Tensorflow GPU重新训练MobileNet SSD V1,并在使用GPU (以下有关配置的更多信息)进行训练后得到了0.5的损失,得到了{{1} }。

这是我用于训练的命令:

model.ckpt

这是冻结命令(生成pb文件):

python ../models/research/object_detection/legacy/train.py --logtostderr --train_dir=./data/ --pipeline_config_path=./ssd_mobilenet_v1_pets.config

这是我使用冻结的python ../models/research/object_detection/export_inference_graph.py --input_type image_tensor --pipeline_config_path ./ssd_mobilenet_v1_pets.config --trained_checkpoint_prefix ./data/model.ckpt-1407 --output_directory ./data/pb时遇到的错误:

pbtxt

这是我使用的Traceback (most recent call last): File "Object_detection_image.py", line 29, in <module> cvOut = cvNet.forward() cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\dnn\src\dnn.cpp:565: error: (-215:Assertion failed) inputs.size() == requiredOutputs in function 'cv::dnn::experimental_dnn_34_v7::DataLayer::getMemoryShapes' 文件:

Object_detection_image.py

这是import cv2 as cv import os import time import logging logger = logging.getLogger() fh = logging.FileHandler('xyz.log') fh.setLevel(logging.DEBUG) logger.addHandler(fh) cvNet = cv.dnn.readNetFromTensorflow('frozen_inference_graph.pb', 'object_detection.pbtxt') dir_x = "C:\\Users\\Omen\\Desktop\\LP_dataset\\anno" for filename in os.listdir(dir_x): print(filename) if not (filename.endswith(".png") or filename.endswith(".jpg")): continue print('daz') img = cv.imread(os.path.join(dir_x,filename)) img = cv.resize(img, (300,300)) #cv.imshow('i',img) #cv.waitKey(0) img = cv.cvtColor(img,cv.COLOR_BGR2GRAY) img = cv.cvtColor(img,cv.COLOR_GRAY2RGB) rows = img.shape[0] cols = img.shape[1] #cvNet.setInput(cv.dnn.blobFromImage(img, size=(cols,rows), swapRB=True, crop=False)) cvNet.setInput(cv.dnn.blobFromImage(img, size=(300, 300), crop=False)) t0 = time.time() cvOut = cvNet.forward() print(time.time() - t0) for detection in cvOut[0,0,:,:]: score = float(detection[2]) #print(score) if score > 0.80: left = detection[3] * cols top = detection[4] * rows right = detection[5] * cols bottom = detection[6] * rows cv.rectangle(img, (int(left), int(top)), (int(right), int(bottom)), (23, 230, 210), thickness=2) cv.imshow('img', img) cv.waitKey(0) 文件(我也尝试了导出的pbtxt并从pb生成了pbtxt但没有用)

pbtxt

配置:

您正在使用的模型的顶级目录是什么:object_detetion

我是否已编写自定义代码:否

OS平台和发行版:win10

TensorFlow安装于:二进制

TensorFlow GPU版本:1.13.0

CUDA / cuDNN版本:10

GPU型号:1050 GTX

我可以提供您要求的任何文件,请帮助我。 在tensorflow的github中,他们告诉我在Stackoverflow中问...

更新

我的问题得到了解决,这是cvOut的内容:

item {
  id: 1
  name: 'licenseplate'
}

1 个答案:

答案 0 :(得分:2)

该错误是由于传递给函数2的错误输入.pbtxt文件引起的,因为tf_text_graph_ssd.py必须按照描述here生成readNetFromTensorflow

.pbtxt

对于其他模型,例如faster r-cnnmask r-cnn,也有相应的脚本。

PS:我刚刚发现有一个非常好的官方教程here.