我真的试图运行模式,我在TensorFlow目标检测API做了我自己的数据集,但运行脚本的时候,我得到这样的错误:FailedPreconditionError运行时,TF目标检测API和自己的模型
python object_detection/detect_test.py
Traceback (most recent call last):
File "object_detection/detect_test.py", line 81, in <module>
feed_dict={image_tensor: image_np_expanded})
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 789, in run
run_metadata_ptr)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 997, in _run
feed_dict_string, options, run_metadata)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1132, in _do_run
target_list, options, run_metadata)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 1152, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value SecondStageBoxPredictor/ClassPredictor/biases
[[Node: SecondStageBoxPredictor/ClassPredictor/biases/read = Identity[T=DT_FLOAT, _class=["loc:@SecondStageBoxPredictor/ClassPredictor/biases"], _device="/job:localhost/replica:0/task:0/cpu:0"](SecondStageBoxPredictor/ClassPredictor/biases)]]
Caused by op u'SecondStageBoxPredictor/ClassPredictor/biases/read', defined at:
File "object_detection/detect_test.py", line 40, in <module>
tf.import_graph_def(od_graph_def, name='')
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/importer.py", line 311, in import_graph_def
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2506, in create_op
original_op=self._default_original_op, op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1269, in __init__
self._traceback = _extract_stack()
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value SecondStageBoxPredictor/ClassPredictor/biases
[[Node: SecondStageBoxPredictor/ClassPredictor/biases/read = Identity[T=DT_FLOAT, _class=["loc:@SecondStageBoxPredictor/ClassPredictor/biases"], _device="/job:localhost/replica:0/task:0/cpu:0"](SecondStageBoxPredictor/ClassPredictor/biases)]]
这有点奇怪,因为我遵循their tutorial的模型用法,错误可能是说某些变量没有初始化。
这里是我的代码:
detect_test.py
import numpy as np
import os
import six.moves.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile
from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image
from utils import label_map_util
from utils import visualization_utils as vis_util
# Path to frozen detection graph. This is the actual model that is used for the object detection.
PATH_TO_CKPT = '/home/jun/PycharmProjects/tf_workspace/models/output_inference_graph_151.pb'
# List of the strings that is used to add correct label for each box.
PATH_TO_LABELS = '/home/jun/PycharmProjects/tf_workspace/models/object_detection/data/pascal_label_map_new.pbtxt'
NUM_CLASSES = 3
detection_graph = tf.Graph()
with detection_graph.as_default():
od_graph_def = tf.GraphDef()
with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
serialized_graph = fid.read()
od_graph_def.ParseFromString(serialized_graph)
tf.import_graph_def(od_graph_def, name='')
label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)
category_index = label_map_util.create_category_index(categories)
def load_image_into_numpy_array(image):
(im_width, im_height) = image.size
return np.array(image.getdata()).reshape(
(im_height, im_width, 3)).astype(np.uint8)
# For the sake of simplicity we will use only 2 images:
# image1.jpg
# image2.jpg
# If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
PATH_TO_TEST_IMAGES_DIR = 'object_detection/test_images'
TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, 3) ]
# Size, in inches, of the output images.
IMAGE_SIZE = (12, 8)
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:
for image_path in TEST_IMAGE_PATHS:
image = Image.open(image_path)
# the array based representation of the image will be used later in order to prepare the
# result image with boxes and labels on it.
image_np = load_image_into_numpy_array(image)
# Expand dimensions since the model expects images to have shape: [1, None, None, 3]
image_np_expanded = np.expand_dims(image_np, axis=0)
image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
# Each box represents a part of the image where a particular object was detected.
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
# Each score represent how level of confidence for each of the objects.
# Score is shown on the result image, together with the class label.
scores = detection_graph.get_tensor_by_name('detection_scores:0')
classes = detection_graph.get_tensor_by_name('detection_classes:0')
num_detections = detection_graph.get_tensor_by_name('num_detections:0')
# Actual detection.
(boxes, scores, classes, num_detections) = sess.run(
[boxes, scores, classes, num_detections],
feed_dict={image_tensor: image_np_expanded})
# Visualization of the results of a detection.
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
category_index,
use_normalized_coordinates=True,
line_thickness=8)
plt.figure(figsize=IMAGE_SIZE)
plt.imshow(image_np)
我会在这种情况下,任何帮助,所以感激!提前致谢!
谢谢回答身体,我心底测试它,并且你的答案corect是否可行 – Michael
我确实做到了如u说,但得到同样的错误,不幸的是 – Michael
@迈克尔你有没有得到这个工作,有一个类似的错误,但只在云上https://stackoverflow.com/questions/46800018/tensorflow-object-detection-api-fails-when-running-on-cloud-machine-learning-eng – bw4sz