title: Tensorflow Object Detection API multi-scale inference variable reuse
body: <p>I was trying to build multi-scale object detection inference code based on Tensorflow Object Detection API. However I don't quite know how to get around with variable reuse issue when predicting boxes on difference scale of a same image in one session. Here's what I did and where I don't understand:</p>
  
  <p>In <a href="https://github.com/tensorflow/models/blob/master/research/object_detection/evaluator.py" rel="nofollow noreferrer">https://github.com/tensorflow/models/blob/master/research/object_detection/evaluator.py</a>, I duplicate the line 'prediction_dict = model.predict(preprocessed_image, true_image_shapes)' one more time as you can see below.</p>
  
  <pre><code>def _extract_predictions_and_losses(model,
                                      create_input_dict_fn,
                                      ignore_groundtruth=False):
    """Constructs tensorflow detection graph and returns output tensors.
    Args:
      model: model to perform predictions with.
      create_input_dict_fn: function to create input tensor dictionaries.
      ignore_groundtruth: whether groundtruth should be ignored.
    Returns:
      prediction_groundtruth_dict: A dictionary with postprocessed tensors (keyed
        by standard_fields.DetectionResultsFields) and optional groundtruth
        tensors (keyed by standard_fields.InputDataFields).
      losses_dict: A dictionary containing detection losses. This is empty when
        ignore_groundtruth is true.
    """
    input_dict = create_input_dict_fn()
    prefetch_queue = prefetcher.prefetch(input_dict, capacity=500)
    input_dict = prefetch_queue.dequeue()
    original_image = tf.expand_dims(input_dict[fields.InputDataFields.image], 0)
    preprocessed_image, true_image_shapes = model.preprocess(
        tf.to_float(original_image))
  
  
    prediction_dict1 = model.predict(preprocessed_image, true_image_shapes)
    /****Some code to resize preprocessed_image****/
    prediction_dict2 = model.predict(preprocessed_image, true_image_shapes)
  
  
    detections = model.postprocess(prediction_dict, true_image_shapes)
  
    groundtruth = None
    losses_dict = {}
    if not ignore_groundtruth:
  </code></pre>
  
  <p>This gives me the following error: </p>
  
  <pre><code>Traceback (most recent call last):
    File "object_detection/eval_fddb.py", line 167, in &lt;module&gt;
      tf.app.run()
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 48, in run
      _sys.exit(main(_sys.argv[:1] + flags_passthrough))
    File "object_detection/eval_fddb.py", line 163, in main
      FLAGS.checkpoint_dir, FLAGS.eval_dir)
    File "/local/mnt/workspace/chris/projects/models/object_detection/evaluator_fddb.py", line 261, in evaluate
      create_input_dict_fn=create_input_dict_fn)
    File "/local/mnt/workspace/chris/projects/models/object_detection/evaluator_fddb.py", line 187, in _extract_prediction_tensors
      prediction_dict = model.predict(preprocessed_image)
    File "/local/mnt/workspace/chris/projects/models/object_detection/meta_architectures/umd_meta_arch.py", line 362, in predict
      image_shape) = self._extract_rpn_feature_maps(preprocessed_inputs)
    File "/local/mnt/workspace/chris/projects/models/object_detection/meta_architectures/umd_meta_arch.py", line 278, in _extract_rpn_feature_maps
      preprocessed_inputs, scope=self.first_stage_feature_extractor_scope)
    File "/local/mnt/workspace/chris/projects/models/object_detection/meta_architectures/faster_rcnn_meta_arch.py", line 154, in extract_proposal_features_w_internal_layers
      return self._extract_proposal_features_w_internal_layers(preprocessed_inputs, scope)
    File "/local/mnt/workspace/chris/projects/models/object_detection/models/faster_rcnn_resnet_v1_feature_extractor.py", line 173, in _extract_proposal_features_w_internal_layers
      scope=var_scope)
    File "/local/mnt/workspace/chris/projects/models/slim/nets/resnet_v1.py", line 300, in resnet_v1_101
      reuse=reuse, scope=scope)
    File "/local/mnt/workspace/chris/projects/models/slim/nets/resnet_v1.py", line 214, in resnet_v1
      net = resnet_utils.conv2d_same(net, 64, 7, stride=2, scope='conv1')
    File "/local/mnt/workspace/chris/projects/models/slim/nets/resnet_utils.py", line 122, in conv2d_same
      rate=rate, padding='VALID', scope=scope)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 181, in func_with_args
      return func(*args, **current_args)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1027, in convolution
      outputs = layer.apply(inputs)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 503, in apply
      return self.__call__(inputs, *args, **kwargs)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 443, in __call__
      self.build(input_shapes[0])
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/convolutional.py", line 137, in build
      dtype=self.dtype)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 383, in add_variable
      trainable=trainable and self.trainable)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 1065, in get_variable
      use_resource=use_resource, custom_getter=custom_getter)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 962, in get_variable
      use_resource=use_resource, custom_getter=custom_getter)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 360, in get_variable
      validate_shape=validate_shape, use_resource=use_resource)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1561, in layer_variable_getter
      return _model_variable_getter(getter, *args, **kwargs)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/layers.py", line 1553, in _model_variable_getter
      custom_getter=getter, use_resource=use_resource)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 181, in func_with_args
      return func(*args, **current_args)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/variables.py", line 261, in model_variable
      use_resource=use_resource)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 181, in func_with_args
      return func(*args, **current_args)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/variables.py", line 216, in variable
      use_resource=use_resource)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 352, in _true_getter
      use_resource=use_resource)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 664, in _get_single_variable
      name, "".join(traceback.format_list(tb))))
  ValueError: Variable FirstStageFeatureExtractor/resnet_v1_101/conv1/weights already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:
  
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/variables.py", line 216, in variable
      use_resource=use_resource)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/arg_scope.py", line 181, in func_with_args
      return func(*args, **current_args)
    File "/local/mnt/workspace/chris/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/framework/python/ops/variables.py", line 261, in model_variable
      use_resource=use_resource)
  </code></pre>
  
  <p>My understanding is that when each time I call model.predict(), it creates a model with all variables. But in the second time, I can't create all the variables because all of them have been existing with the same name. I tried to add an variable scope with 'reuse=True' for the second model.predict(), but it wouldn't load the variables at all because mismatch names. </p>
  
  <p>My questions is: </p>
  
  <p>How to get around with this by running the same model on two different scale images in one sess.run()? </p>
  
  <p>Thank you very much.</p>