Search code examples
pythontensorflowtf-slim

TF Slim and inception prediction probabilities


I've trained the final layers of inception v4 using tf slim (v1.3) and I'm trying to integrate processing into an existing tool but I'm having trouble figuring out how to generate predictions. I want all the prediction values, not just the argmax. I've got a checkpoint path and some numpy arrays with images (100x100x3 which is what I trained with...but expanded to 299x299x3). Can someone point me in the right direction? I will be feeding multiple images for evaluation but not necessarily in a batch (I'll probably run a microservice that takes one or more images and returns results but only loads the checkpoint once to cut back on initialization time).


Solution

  • Here's an example of how to do this:

       with tf.Graph().as_default():
            tf_global_step = slim.get_or_create_global_step()
            network_fn = nets_factory.get_network_fn("inception_v4",
                num_classes=5,
                is_training=False)
    
            ##############################################################
            # Create a dataset provider that loads data from the dataset #
            ##############################################################
            provider = slim.dataset_data_provider.DatasetDataProvider(
                dataset,
                shuffle=False,
                common_queue_capacity=2,
                common_queue_min=1)
            [images] = provider.get(['image'])
    
            #####################################
            # Select the preprocessing function #
            #####################################
            image_preprocessing_fn = preprocessing_factory.get_preprocessing(
                "inception_v4",
                is_training=False)
    
            eval_image_size = network_fn.default_image_size
            images = image_preprocessing_fn(images, eval_image_size, eval_image_size)
            images = tf.reshape(images, [eval_image_size, eval_image_size, 3])
            images, _ = tf.train.batch(
                    [images, 0],
                    batch_size=len(dataset.data_sources),
                    num_threads=1,
                    capacity=len(dataset.data_sources))
            ####################
            # Define the model #
            ####################
            logits, _ = network_fn(images)
            variables_to_restore = slim.get_variables_to_restore()
    
            soft = tf.nn.softmax(logits, 1)
            predictions = tf.argmax(logits, 1)
            num_batches = 1
    
            if tf.gfile.IsDirectory(checkpoint_path):
                checkpoint_path = tf.train.latest_checkpoint(checkpoint_path)
    
            tf.logging.info('Evaluating %s' % checkpoint_path)
            r_logits, r_soft, r_prediction = slim.evaluation.evaluate_once(
                master='',
                checkpoint_path=checkpoint_path,
                logdir=eval_dir,
                num_evals=num_batches,
                eval_op=[],
                final_op=[logits, soft, predictions],
                variables_to_restore=variables_to_restore)