I use pre-trained model from this site: https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet I download v3-large_224_1.0_float.pb model link is (Large dm=1 (float) ). After I run it, I often get this result, [
===== TENSORFLOW RESULTS =======
cello, violoncello (score = 1.00000)
hip, rose hip, rosehip (score = 0.00000)
banjo (score = 0.00000)
steel drum (score = 0.00000)
marimba, xylophone (score = 0.00000)
]1 Then, I change input image, but the result is the same. I do know how to solve this problem.Thank you. My code is as below:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
"""
Compile Tensorflow Models
=========================
This article is an introductory tutorial to deploy tensorflow models with TVM.
For us to begin with, tensorflow python module is required to be installed.
Please refer to https://www.tensorflow.org/install
"""
# tvm, relay
import tvm
from tvm import te
from tvm import relay
# os and numpy
import numpy as np
import os.path
# Tensorflow imports
import tensorflow as tf
try:
tf_compat_v1 = tf.compat.v1
except ImportError:
tf_compat_v1 = tf
# Tensorflow utility functions
import tvm.relay.testing.tf as tf_testing
# Target settings
# Use these commented settings to build for cuda.
#target = 'cuda'
#target_host = 'llvm'
#layout = "NCHW"
#ctx = tvm.gpu(0)
target = 'llvm'
target_host = 'llvm'
layout = None
ctx = tvm.cpu(0)
pwd = os.path.dirname(os.path.realpath(__file__))
img_url=os.path.join(pwd, "../data")
model_path = os.path.join(pwd, 'model/v3-large_224_1.0_float.pb')
map_proto_path = os.path.join(pwd, '../data/imagenet_2012_challenge_label_map_proto.pbtxt')
label_path = os.path.join(pwd, '../data/imagenet_synset_to_human_label_map.txt')
# preprocess one picture
def preprocess(img_path):
jpg = open(img_path, 'rb')
image = tf.image.decode_jpeg(jpg.read(), channels = 3)
image = tf.image.central_crop(image, 0.875)
image = tf.expand_dims(image, 0)
image = tf.image.resize_bilinear(image, [224, 224],
align_corners=False)
image = tf.subtract(image, 0.5)
image = tf.multiply(image, 2.0)
return image
# prepare input data
def prepare_input(num):
x_all = []
for i in range(num):
#load jpg
index = i % 67
img_path = os.path.join(
img_url, 'imagenet_images/val/ILSVRC2012_val_000000%02d.JPEG' % (index+1))
x = preprocess(img_path)
x_all.append(x)
tx = tf.concat(x_all, 0)
with tf.Session() as session:
x = tx.eval()
return x
# set number pictures to predict
BATCH = 1
print("Test mobilenet-v3 model with batch " + str(BATCH))
# prepare input data
x = prepare_input(BATCH)
######################################################################
# Inference on tensorflow
# -----------------------
# Run the corresponding model on tensorflow
def create_graph():
"""Creates a graph from saved GraphDef file and returns a saver."""
# Creates graph from saved graph_def.pb.
with tf_compat_v1.gfile.GFile(model_path, 'rb') as f:
graph_def = tf_compat_v1.GraphDef()
graph_def.ParseFromString(f.read())
graph = tf.import_graph_def(graph_def, name='')
# Call the utility to import the graph definition into default graph.
graph_def = tf_testing.ProcessGraphDefParam(graph_def)
def run_inference_on_image(image):
"""Runs inference on an image.
Parameters
----------
image: String
Image file name.
Returns
-------
Nothing
"""
# Creates graph from saved GraphDef.
create_graph()
with tf_compat_v1.Session() as sess:
softmax_tensor = sess.graph.get_tensor_by_name('MobilenetV3/Predictions/Softmax:0')
predictions = sess.run(softmax_tensor,
{'input:0': image})
predictions = np.squeeze(predictions)
# Creates node ID --> English string lookup.
node_lookup = tf_testing.NodeLookup(label_lookup_path=map_proto_path,
uid_lookup_path=label_path)
# Print top 5 predictions from tensorflow.
top_k = predictions.argsort()[-5:][::-1]
print ("===== TENSORFLOW RESULTS =======")
for node_id in top_k:
human_string = node_lookup.id_to_string(node_id)
score = predictions[node_id]
print('%s (score = %.5f)' % (human_string, score))
run_inference_on_image(x)