Exemple #1
0
    def testTrainableTrueIsTrainingFalse(self):
        embeddings = image_embedding.inception_resnet_v2(self._images,
                                                         trainable=True,
                                                         is_training=False)
        self.assertEqual([self._batch_size, 2048],
                         embeddings.get_shape().as_list())

        self._verifyParameterCounts()
        self._assertCollectionSize(376, tf.GraphKeys.GLOBAL_VARIABLES)
        self._assertCollectionSize(188, tf.GraphKeys.TRAINABLE_VARIABLES)
        self._assertCollectionSize(0, tf.GraphKeys.UPDATE_OPS)
        self._assertCollectionSize(94, tf.GraphKeys.REGULARIZATION_LOSSES)
        self._assertCollectionSize(0, tf.GraphKeys.LOSSES)
        self._assertCollectionSize(23, tf.GraphKeys.SUMMARIES)
  def build_image_embeddings(self):
    """Builds the image model subgraph and generates image embeddings.
    Inputs:
      self.images
    Outputs:
      self.image_embeddings
    """
    if self.config.cnn_model == "InceptionV4":
      inception_output = image_embedding.inception_v4(
          self.images,
          trainable=self.train_inception,
          is_training=self.is_training())
      self.inception_variables = tf.get_collection(
          tf.GraphKeys.GLOBAL_VARIABLES, scope="InceptionV4")
    elif self.config.cnn_model == "InceptionResnetV2":
      inception_output = image_embedding.inception_resnet_v2(
          self.images,
          trainable=self.train_inception,
          is_training=self.is_training())
      self.inception_variables = tf.get_collection(
          tf.GraphKeys.GLOBAL_VARIABLES, scope="InceptionResnetV2")
    else:
      inception_output = image_embedding.inception_v3(
          self.images,
          trainable=self.train_inception,
          is_training=self.is_training())
      self.inception_variables = tf.get_collection(
          tf.GraphKeys.GLOBAL_VARIABLES, scope="InceptionV3")

    # Map inception output into embedding space.
    with tf.variable_scope("image_embedding") as scope:
      image_embeddings = tf.contrib.layers.fully_connected(
          inputs=inception_output,
          num_outputs=self.config.embedding_size,
          activation_fn=None,
          weights_initializer=self.initializer,
          biases_initializer=None,
          scope=scope)

    # Save the embedding size in the graph.
    tf.constant(self.config.embedding_size, name="embedding_size")

    self.image_embeddings = image_embeddings