как прогнозировать файлы .meta и checkpoint в тензорном потоке?

Я учусь о мобильных сетях и я новичок в tensorflow. После обучения с помощью модели ssd-mobilenet я получил файл контрольной точки, файл .meta, файл graph.pbtxt и т. Д. Когда я пытаюсь предсказать с этими файлами, я не могу получить результат, например box_pred, classs_scores …

Затем я обнаружил, что демо-код прогноза использовал .pb-файл для загрузки графика и использовал «get_tensor_by_name» для получения вывода, но у меня нет .pb-файла. Итак, как я могу предсказать изображение с .meta и ckpt-файлами?

BTW, здесь предсказывают основной код демонов:

import numpy as np import os import six.moves.urllib as urllib import sys import tarfile import tensorflow as tf import zipfile import time from collections import defaultdict from io import StringIO from matplotlib import pyplot as plt from PIL import Image #%matplotlib inline # This is needed since the notebook is stored in the object_detection folder. sys.path.append("..") from utils import label_map_util from utils import visualization_utils as vis_util # What model to download. MODEL_NAME = 'ssd_mobilenet_v1_coco_11_06_2017' MODEL_FILE = MODEL_NAME + '.tar.gz' DOWNLOAD_BASE = 'http://download.tensorflow.org/models/object_detection/' # Path to frozen detection graph. This is the actual model that is used for the object detection. PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb' # List of the strings that is used to add correct label for each box. PATH_TO_LABELS = os.path.join('data', 'mscoco_label_map.pbtxt') NUM_CLASSES = 90 #Load a (frozen) Tensorflow model into memory. 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='') #load label map 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) #detection # 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 = '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}) 

2 Solutions collect form web for “как прогнозировать файлы .meta и checkpoint в тензорном потоке?”

Вы должны загрузить график, используя tf.train.import_meta_graph() а затем получить тензоры, используя get_tensor_by_name() . Можешь попробовать:

 model_path = "model.ckpt" detection_graph = tf.Graph() with tf.Session(graph=detection_graph) as sess: # Load the graph with the trained states loader = tf.train.import_meta_graph(model_path+'.meta') loader.restore(sess, model_path) # Get the tensors by their variable name image_tensor = detection_graph.get_tensor_by_name('image_tensor:0') boxes = detection_graph.get_tensor_by_name('detection_boxes:0') scores = detection_graph.get_tensor_by_name('detection_scores:0') ... # Make predictions _boxes, _scores = sess.run([boxes, scores], feed_dict={image_tensor: image_np_expanded}) 

Ну, мне удалось загрузить график, используя следующий код:

 with tf.Session(config=tf.ConfigProto(allow_soft_placement=True)) as sess: #with tf.device("/cpu:0"): new_saver = tf.train.import_meta_graph('./model.ckpt-1281.meta') new_saver.restore(sess, './model.ckpt-1281') detection_graph = tf.get_default_graph() for image_path in TEST_IMAGE_PATHS: image = Image.open(image_path) image_np = load_image_into_numpy_array(image) image_np_expanded = np.expand_dims(image_np, axis=0) image_tensor = detection_graph.get_tensor_by_name('image_tensor:0') boxes = detection_graph.get_tensor_by_name('detection_boxes:0') 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}) print scores, boxes 

Но я получил эту эрро:

 KeyError:"The name 'image_tensor:0' refers to a Tensor which does not exist. The operation, 'image_tensor', does not exist in the graph." 

Затем я проверяю имя тензора в графике и файле graph.pbtxt, нет таких имен, как «image_tensor», «detect_boxes», «detect_scores» или даже «softmax». Итак, как можно предсказать вывод графика?

Python - лучший язык программирования в мире.