tensorflow / tensorflow/models

object detection: problem with class agnostic in SSD_mobilenet_v2 architecture

Open
#8,165 0 comments 0 reactions 3 assignees View on GitHub

@pkulzc is already working on this.

Since May 21, 2020.

models:research:odapi type:support
Dominant language
Python
Stars
77.7k
Forks
44.8k
PR merge metrics
No merged PRs in 30d

Description

Hey,

I tried to use use_class_agnostic_nms: true in my pipeline.config. Has anyone used class agnostic in ssd architecture?


System information
  • What is the top-level directory of the model you are using:
  • Have I written custom code (as opposed to using a stock example script provided in TensorFlow):
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows 10
  • TensorFlow installed from (source or binary): source
  • TensorFlow version (use command below): 1.14
  • CUDA/cuDNN version: 10.2
  • GPU model and memory: GTX 1080Ti
Describe the problem

When I set use_class_agnostic_nms: true in my pipeline config, there is a problem with evaluation process of the model, the exact problem is visible in the logs below. Any ideas how to solve the problem?

Source code / logs

Error log:

[2020-02-14 09:48:59,116] {{taskinstance.py:1058}} ERROR - TensorArray dtype is float but Op is trying to write dtype int64.
	 [[node Postprocessor/BatchMultiClassNonMaxSuppression/map/while/TensorArrayWrite_2/TensorArrayWriteV3 (defined at /airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py:51) ]]

Original stack trace for 'Postprocessor/BatchMultiClassNonMaxSuppression/map/while/TensorArrayWrite_2/TensorArrayWriteV3':
  File "/bin/airflow", line 37, in <module>
    args.func(args)
  File "/lib/python3.7/site-packages/airflow/utils/cli.py", line 74, in wrapper
    return f(*args, **kwargs)
  File "/lib/python3.7/site-packages/airflow/bin/cli.py", line 551, in run
    _run(args, dag, ti)
  File "/lib/python3.7/site-packages/airflow/bin/cli.py", line 469, in _run
    pool=args.pool,
  File "/lib/python3.7/site-packages/airflow/utils/db.py", line 74, in wrapper
    return func(*args, **kwargs)
  File "/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 930, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/lib/python3.7/site-packages/airflow/operators/python_operator.py", line 113, in execute
    return_value = self.execute_callable()
  File "/lib/python3.7/site-packages/airflow/operators/python_operator.py", line 118, in execute_callable
    return self.python_callable(*self.op_args, **self.op_kwargs)
  File "/airflow/dags/airflow_training_dag/src/task_operator_utils.py", line 398, in evaluate_last_experiment
    local_paths["metrics"], min_confidence=config_dict["min_confidence"]
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/model_training/experiment_evaluator.py", line 43, in calculate_metrics
    self.model_path, self.classes_file_name, min_confidence=min_confidence
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/metrics_calculator.py", line 247, in get_preds_from_model
    ps = TFModelPredictionService(model_path, classes_file, min_confidence)
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/services/tf_model_pred_service.py", line 19, in __init__
    self.model = self.load_model(model_file, classes_file, min_confidence)
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/services/tf_model_pred_service.py", line 24, in load_model
    model = TensorFlowModel(model_base_path, graph_name, classess_file, min_confidence)
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py", line 23, in __init__
    self.model = self.load_model()
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py", line 51, in load_model
    tf.import_graph_def(graphDef, name="")
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py", line 507, in new_func
    return func(*args, **kwargs)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/importer.py", line 443, in import_graph_def
    _ProcessNewOps(graph)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/importer.py", line 236, in _ProcessNewOps
    for new_op in graph._add_new_tf_operations(compute_devices=False):  # pylint: disable=protected-access
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 3751, in _add_new_tf_operations
    for c_op in c_api_util.new_tf_operations(self)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 3751, in <listcomp>
    for c_op in c_api_util.new_tf_operations(self)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 3641, in _create_op_from_tf_operation
    ret = Operation(c_op, self)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 2005, in __init__
    self._traceback = tf_stack.extract_stack()
Traceback (most recent call last):
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1356, in _do_call
    return fn(*args)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1341, in _run_fn
    options, feed_dict, fetch_list, target_list, run_metadata)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1429, in _call_tf_sessionrun
    run_metadata)
tensorflow.python.framework.errors_impl.InvalidArgumentError: TensorArray dtype is float but Op is trying to write dtype int64.
	 [[{{node Postprocessor/BatchMultiClassNonMaxSuppression/map/while/TensorArrayWrite_2/TensorArrayWriteV3}}]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 930, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/usr/local/lib/python3.7/site-packages/airflow/operators/python_operator.py", line 113, in execute
    return_value = self.execute_callable()
  File "/usr/local/lib/python3.7/site-packages/airflow/operators/python_operator.py", line 118, in execute_callable
    return self.python_callable(*self.op_args, **self.op_kwargs)
  File "/usr/local/airflow/dags/airflow_training_dag/src/task_operator_utils.py", line 398, in evaluate_last_experiment
    local_paths["metrics"], min_confidence=config_dict["min_confidence"]
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/assecobs/mate/model_training/experiment_evaluator.py", line 43, in calculate_metrics
    self.model_path, self.classes_file_name, min_confidence=min_confidence
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/metrics_calculator.py", line 251, in get_preds_from_model
    **query_params
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/services/prediction_service.py", line 28, in get_preds_for_batch
    **query_params)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/services/tf_model_pred_service.py", line 46, in get_preds
    preds = self.model.predict(img_object.img)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py", line 104, in predict
    (boxes, scores, labels) = self.predict_from_image(image)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py", line 92, in predict_from_image
    feed_dict={imageTensor: image},
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 950, in run
    run_metadata_ptr)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1173, in _run
    feed_dict_tensor, options, run_metadata)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1350, in _do_run
    run_metadata)
  File "/usr/local/airflow/.local/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1370, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: TensorArray dtype is float but Op is trying to write dtype int64.
	 [[node Postprocessor/BatchMultiClassNonMaxSuppression/map/while/TensorArrayWrite_2/TensorArrayWriteV3 (defined at /airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py:51) ]]

Original stack trace for 'Postprocessor/BatchMultiClassNonMaxSuppression/map/while/TensorArrayWrite_2/TensorArrayWriteV3':
  File "/bin/airflow", line 37, in <module>
    args.func(args)
  File "/lib/python3.7/site-packages/airflow/utils/cli.py", line 74, in wrapper
    return f(*args, **kwargs)
  File "/lib/python3.7/site-packages/airflow/bin/cli.py", line 551, in run
    _run(args, dag, ti)
  File "/lib/python3.7/site-packages/airflow/bin/cli.py", line 469, in _run
    pool=args.pool,
  File "/lib/python3.7/site-packages/airflow/utils/db.py", line 74, in wrapper
    return func(*args, **kwargs)
  File "/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 930, in _run_raw_task
    result = task_copy.execute(context=context)
  File "/lib/python3.7/site-packages/airflow/operators/python_operator.py", line 113, in execute
    return_value = self.execute_callable()
  File "/lib/python3.7/site-packages/airflow/operators/python_operator.py", line 118, in execute_callable
    return self.python_callable(*self.op_args, **self.op_kwargs)
  File "/airflow/dags/airflow_training_dag/src/task_operator_utils.py", line 398, in evaluate_last_experiment
    local_paths["metrics"], min_confidence=config_dict["min_confidence"]
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/model_training/experiment_evaluator.py", line 43, in calculate_metrics
    self.model_path, self.classes_file_name, min_confidence=min_confidence
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/metrics_calculator.py", line 247, in get_preds_from_model
    ps = TFModelPredictionService(model_path, classes_file, min_confidence)
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/services/tf_model_pred_service.py", line 19, in __init__
    self.model = self.load_model(model_file, classes_file, min_confidence)
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/services/tf_model_pred_service.py", line 24, in load_model
    model = TensorFlowModel(model_base_path, graph_name, classess_file, min_confidence)
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py", line 23, in __init__
    self.model = self.load_model()
  File "/airflow/.local/lib/python3.7/site-packages/assecobs/mate/metrics/models/tensorflow_model.py", line 51, in load_model
    tf.import_graph_def(graphDef, name="")
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py", line 507, in new_func
    return func(*args, **kwargs)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/importer.py", line 443, in import_graph_def
    _ProcessNewOps(graph)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/importer.py", line 236, in _ProcessNewOps
    for new_op in graph._add_new_tf_operations(compute_devices=False):  # pylint: disable=protected-access
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 3751, in _add_new_tf_operations
    for c_op in c_api_util.new_tf_operations(self)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 3751, in <listcomp>
    for c_op in c_api_util.new_tf_operations(self)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 3641, in _create_op_from_tf_operation
    ret = Operation(c_op, self)
  File "/airflow/.local/lib/python3.7/site-packages/tensorflow/python/framework/ops.py", line 2005, in __init__
    self._traceback = tf_stack.extract_stack()

My piepline.config:

model {
  ssd {
    num_classes: 61
    image_resizer {
      fixed_shape_resizer {
        height: 1024
        width: 1024
      }
    }
    feature_extractor {
      type: "ssd_mobilenet_v2"
      depth_multiplier: 1.0
      min_depth: 16
      conv_hyperparams {
        regularizer {
          l2_regularizer {
            weight: 3.9999998989515007e-05
          }
        }
        initializer {
          truncated_normal_initializer {
            mean: 0.0
            stddev: 0.029999999329447746
          }
        }
        activation: RELU_6
        batch_norm {
          decay: 0.9997000098228455
          center: true
          scale: true
          epsilon: 0.0010000000474974513
          train: true
        }
      }
    }
    box_coder {
      faster_rcnn_box_coder {
        y_scale: 10.0
        x_scale: 10.0
        height_scale: 5.0
        width_scale: 5.0
      }
    }
    matcher {
      argmax_matcher {
        matched_threshold: 0.5
        unmatched_threshold: 0.5
        ignore_thresholds: false
        negatives_lower_than_unmatched: true
        force_match_for_each_row: true
      }
    }
    similarity_calculator {
      iou_similarity {
      }
    }
    box_predictor {
      convolutional_box_predictor {
        conv_hyperparams {
          regularizer {
            l2_regularizer {
              weight: 3.9999998989515007e-05
            }
          }
          initializer {
            truncated_normal_initializer {
              mean: 0.0
              stddev: 0.029999999329447746
            }
          }
          activation: RELU_6
          batch_norm {
            decay: 0.9997000098228455
            center: true
            scale: true
            epsilon: 0.0010000000474974513
            train: true
          }
        }
        min_depth: 0
        max_depth: 0
        num_layers_before_predictor: 0
        use_dropout: false
        dropout_keep_probability: 0.800000011920929
        kernel_size: 1
        box_code_size: 4
        apply_sigmoid_to_scores: false
      }
    }
    anchor_generator {
      ssd_anchor_generator {
        num_layers: 6
        min_scale: 0.20000000298023224
        max_scale: 0.949999988079071
        aspect_ratios: 1.0
        aspect_ratios: 2.0
        aspect_ratios: 0.5
        aspect_ratios: 3.0
        aspect_ratios: 0.33329999446868896
      }
    }
    post_processing {
      batch_non_max_suppression {
        score_threshold: 9.99999993922529e-09
        iou_threshold: 0.6000000238418579
        max_detections_per_class: 100
        max_total_detections: 100
	use_class_agnostic_nms: true
      }
      score_converter: SIGMOID
    }
    normalize_loss_by_num_matches: true
    loss {
      localization_loss {
        weighted_smooth_l1 {
        }
      }
      classification_loss {
        weighted_sigmoid {
        }
      }
      hard_example_miner {
        num_hard_examples: 3000
        iou_threshold: 0.9900000095367432
        loss_type: CLASSIFICATION
        max_negatives_per_positive: 3
        min_negatives_per_image: 3
      }
      classification_weight: 1.0
      localization_weight: 1.0
    }
  }
}
train_config {
  batch_size: 2
  data_augmentation_options {
    ssd_random_crop {
    }
  }
  data_augmentation_options {
    autoaugment_image {
    }
  }
  optimizer {
    rms_prop_optimizer {
      learning_rate {
        exponential_decay_learning_rate {
          initial_learning_rate: 2.0999999046325684
          decay_steps: 2500
          decay_factor: 0.800000011920929
        }
      }
      momentum_optimizer_value: 0.8999999761581421
      decay: 0.8999999761581421
      epsilon: 1.0
    }
  }
  fine_tune_checkpoint: "/experiment/model.ckpt-162590"
  num_steps: 201180
  fine_tune_checkpoint_type: "detection"
}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.