https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_resnet_v2.py
如何正确推断此模型?我有兴趣进行此设置,以便用户可以对他逐个输入命令行的各个图像进行推断。为了使其快速,必须加载模型ONCE,并且输入图像必须是热插拔的,因为用户将它们输入命令行。
如果您使用与此模型的评估代码类似的结构,则可以执行非热插拔推理:https://github.com/tensorflow/models/blob/master/research/slim/eval_image_classifier.py
您可以稍微修改上述文件以打印您的logits并进行推断。但是,此解决方案每次都会重建图表,这非常慢。
我尝试构建图形并将feed_dict传入fifo_queue_Dequeue:0 tensor,表示批量输入。但是,会话将挂起并且永远不会计算。我相信这是因为图表被“冻结” - 张量不能接受新的输入。但现在我对如何获得我想要的行为感到难过。
答案 0 :(得分:2)
下面给出的推理步骤:
import sys
# import from tensorflow models
sys.path.append('/home/vijay/workspace/learning/tensorflow/')
#Load the definitions of Inception-Resnet-v2 architecture
import tensorflow.contrib.slim as slim
from models.research.slim.nets.inception_resnet_v2 import inception_resnet_v2, inception_resnet_v2_arg_scope
#The pretrained model accepts size of 299x299 images
HEIGHT = 299
WIDTH = 299
CHANNELS = 3
# Create Graph
graph = tf.Graph()
with graph.as_default():
# Create a placeholder to pass the input image
img_tensor = tf.placeholder(tf.float32, shape=(None, HEIGHT, WIDTH, CHANNELS))
# Scale the image inputs to {+1, -1} from 0 to 255
img_scaled = tf.scalar_mul((1.0/255), img_tensor)
img_scaled = tf.subtract(img_scaled, 0.5)
img_scaled = tf.multiply(img_scaled, 2.0)
# load Graph definitions
with slim.arg_scope(inception_resnet_v2_arg_scope()):
logits, end_points = inception_resnet_v2(img_scaled, is_training=False)
# predict the class
predictions = end_points['Predictions']
#Loading a test image
img = cv2.imread('/home/vijay/datasets/image/misc/Bernese-Mountain- Dog.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (WIDTH, HEIGHT))
# make the input size [BATCH, WIDTH, HEIGHT, CHANNELS] for the network
img = np.expand_dims(img, axis=0)
#for labels of imagenet
sys.path.append('/home/vijay/workspace/learning/tensorflow/models/research/slim')
from datasets import imagenet
# Inception resnet v2 model
checkpoint_file='/home/vijay/datasets/pre_trained_models/inception_resnet_v2_2016_08_30.ckpt'
with tf.Session(graph=train_graph) as sess:
saver = tf.train.Saver()
saver.restore(sess, checkpoint_file)
pred_prob= sess.run(predictions, feed_dict={img_tensor:img})
# Getting the top 5 classes of the imagenet database
probabilities = pred_prob[0, 0:]
sorted_inds = [i[0] for i in sorted(enumerate(-probabilities), key=lambda x:x[1])]
names = imagenet.create_readable_names_for_imagenet_labels()
for i in range(5):
index = sorted_inds[i]
print('Probability %0.2f%% => [%s]' % (probabilities[index], names[index]))
Probability 0.84% => [Bernese mountain dog]
Probability 0.04% => [Appenzeller]
Probability 0.03% => [EntleBucher]
Probability 0.01% => [Greater Swiss Mountain dog]
Probability 0.00% => [Border collie]