tf.contrib.slimライブラリを使用してWebからダウンロードした単一のイメージを分類する方法を示す多くの例があります。実際、テンソルフローギブスはこれを提供します。しかし、私はループでこれを行うための最善の方法を理解するのに苦労しています。分類にTensorflowを使用するアプリケーションは、複数の画像バッチを分類する必要があります。推論プロセスには、グラフの作成と、チェックポイントからのウェイトのロードが含まれます。繰り返し実行しているときは、これらの手順をやり直すのは無駄になります。実際には、私はその基本的な方法を試してみると、私はPythonに割り当てられたメモリが各反復の成長を続けていることがわかります。誰かが反復的/反復的な推論を達成するために基本的な例を修正する方法を提案する助けてもらえますか? (このコードは、限られたメモリを持つマシンをクラッシュし、新しい画像を定期的にグローバルフレームに投棄されている)ここで働く私の現在の方法があるが、はっきりとメモリリソースと無駄である: DEF分類():Tensorflow Slimライブラリを使用して反復推論を行う方法
def classification():
global frame
global count
slim = tf.contrib.slim
image_size = inception_v4.inception_v4.default_image_size
names = imagenet.create_readable_names_for_imagenet_labels()
checkpoints_dir = '../../checkpoints'
# Don't classify the first few frames
while count < 5:
pass
while True:
start = count
with tf.Graph().as_default():
image = tf.convert_to_tensor(frame,dtype=tf.float32)
processed_image = inception_preprocessing.preprocess_image(image, image_size, image_size, is_training=False)
processed_images = tf.expand_dims(processed_image, 0)
# processed_images will be a 1x299x299x3 tensor of float32
# Create the model, use the default arg scope to configure the batch norm parameters.
with slim.arg_scope(inception_v4.inception_v4_arg_scope()):
logits, _ = inception_v4.inception_v4(processed_images, num_classes=1001, is_training=False)
probabilities = tf.nn.softmax(logits)
init_fn = slim.assign_from_checkpoint_fn(
os.path.join(checkpoints_dir, 'inception_v4.ckpt'),
slim.get_model_variables('InceptionV4'))
with tf.Session() as sess:
init_fn(sess)
np_image, probabilities = sess.run([image, probabilities])
probabilities = probabilities[0, 0:]
sorted_inds = [i[0] for i in sorted(enumerate(-probabilities), key=lambda x:x[1])]
for i in range(5):
index = sorted_inds[i]
print('Probability %0.2f%% => [%s]' % (probabilities[index] * 100, names[index]))
end = count
print "Classification latency = %d frames" % (end-start)