0
votes

I use this link to learn object detection on windows 10.

I use anaconda(python3.6),tensorflow 1.12.0.

I prepared 400 pictures and divided them into two classes(stones and cars).

Then I used this command to train:

cd E:\test\models-master\research\object_detection

python model_main.py --pipeline_config_path=training/ssd_mobilenet_v1_coco.config --model_dir=training/ --num_train_steps=10000

The content in ssd_mobilenet_v1_coco.config:

# SSD with Mobilenet v1 configuration for MSCOCO Dataset.
# Users should configure the fine_tune_checkpoint field in the train config as
# well as the label_map_path and input_path fields in the train_input_reader and
# eval_input_reader. Search for "PATH_TO_BE_CONFIGURED" to find the fields that
# should be configured.

model {
  ssd {
    num_classes: 2
    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 {
      }
    }
    anchor_generator {
      ssd_anchor_generator {
        num_layers: 6
        min_scale: 0.2
        max_scale: 0.95
        aspect_ratios: 1.0
        aspect_ratios: 2.0
        aspect_ratios: 0.5
        aspect_ratios: 3.0
        aspect_ratios: 0.3333
      }
    }
    image_resizer {
      fixed_shape_resizer {
        height: 300
        width: 300
      }
    }
    box_predictor {
      convolutional_box_predictor {
        min_depth: 0
        max_depth: 0
        num_layers_before_predictor: 0
        use_dropout: false
        dropout_keep_probability: 0.8
        kernel_size: 1
        box_code_size: 4
        apply_sigmoid_to_scores: false
        conv_hyperparams {
          activation: RELU_6,
          regularizer {
            l2_regularizer {
              weight: 0.00004
            }
          }
          initializer {
            truncated_normal_initializer {
              stddev: 0.03
              mean: 0.0
            }
          }
          batch_norm {
            train: true,
            scale: true,
            center: true,
            decay: 0.9997,
            epsilon: 0.001,
          }
        }
      }
    }
    feature_extractor {
      type: 'ssd_mobilenet_v1'
      min_depth: 16
      depth_multiplier: 1.0
      conv_hyperparams {
        activation: RELU_6,
        regularizer {
          l2_regularizer {
            weight: 0.00004
          }
        }
        initializer {
          truncated_normal_initializer {
            stddev: 0.03
            mean: 0.0
          }
        }
        batch_norm {
          train: true,
          scale: true,
          center: true,
          decay: 0.9997,
          epsilon: 0.001,
        }
      }
    }
    loss {
      classification_loss {
        weighted_sigmoid {
        }
      }
      localization_loss {
        weighted_smooth_l1 {
        }
      }
      hard_example_miner {
        num_hard_examples: 3000
        iou_threshold: 0.99
        loss_type: CLASSIFICATION
        max_negatives_per_positive: 3
        min_negatives_per_image: 0
      }
      classification_weight: 1.0
      localization_weight: 1.0
    }
    normalize_loss_by_num_matches: true
    post_processing {
      batch_non_max_suppression {
        score_threshold: 1e-8
        iou_threshold: 0.6
        max_detections_per_class: 100
        max_total_detections: 100
      }
      score_converter: SIGMOID
    }
  }
}

train_config: {
  batch_size: 10
  optimizer {
    rms_prop_optimizer: {
      learning_rate: {
        exponential_decay_learning_rate {
          initial_learning_rate: 0.004
          decay_steps: 800720
          decay_factor: 0.95
        }
      }
      momentum_optimizer_value: 0.9
      decay: 0.9
      epsilon: 1.0
    }
  }
  #fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"
  #from_detection_checkpoint: true
  # Note: The below line limits the training process to 200K steps, which we
  # empirically found to be sufficient enough to train the pets dataset. This
  # effectively bypasses the learning rate schedule (the learning rate will
  # never decay). Remove the below line to train indefinitely.
  num_steps: 1000
  data_augmentation_options {
    random_horizontal_flip {
    }
  }
  data_augmentation_options {
    ssd_random_crop {
    }
  }
}

train_input_reader: {
  tf_record_input_reader {
    input_path:'data/train.record'
  }
  label_map_path:'data/side_vehicle.pbtxt'
}

eval_config: {
  num_examples: 8000
  # Note: The below line limits the evaluation process to 10 evaluations.
  # Remove the below line to evaluate indefinitely.
  max_evals: 10
}

eval_input_reader: {
  tf_record_input_reader {
    input_path: 'data/test.record'
  }
  label_map_path: 'data/side_vehicle.pbtxt'
  shuffle: false
  num_readers: 1
}

Now it has trained 6000 steps, but the average precision and average recall are not close to 1, you can see it from following pictures: enter image description here

Terminal of pycharm outputs this information:

enter image description here

How to increase the average precision and average recall?

1
Just a guess, hard to tell without looking into your data: That amount of data and num_steps may not be enough for the model to learn the actual difference. If that's the case, and if this is one of your first ML projects, try with known datasets first, there you can expect the high accuracy. - AI Mechanic
Can you try using any other config file that is supplied by project owner like next version of the same config file? Also that I can see that you have used car and stone classes but I suppose stone class is not present in the original COCO dataset. So I think you may need to fine tune the model to make it understand how to recognize stones. - Pallavi
@PallaviJog OK!But how to fine tune the model with my own pictures,can you give me a tutorial or a guide? - user9270170
I am sorry I am not aware of the way .config files (which contains some reference to find tuning model) work. So, I may not help you specifically. But can you tell me from where did you get this .config file? I looked into the github link and could not find any training folder where I can locate it. Also I saw certain pbtxt file referenced in .config file which contains the labels for the model. I suppose you should create your own pbtxt file with 2 labels. - Pallavi
@PallaviJog You can find all config files from models-master/research/object_detection/samples/configs. The ssd_mobilenet_v1_coco.config also in this folder. And I download pre-training model file from:github.com/tensorflow/models/blob/master/research/… - user9270170

1 Answers

0
votes

I know where the problem is.

First, there are too few pictures,I increased the number of pictures to 4000.

Second, I should use fine tune.I added 4 part in pipeline config file ssd_mobilenet_v1_coco.config:

  fine_tune_checkpoint: "ssd_inception_v2_coco_2018_01_28/model.ckpt"
  fine_tune_checkpoint_type: "detection"
  from_detection_checkpoint: true
  load_all_detection_checkpoint_vars: true

Check the label again to see if there are any pictures that are mislabeled. It is very important to check.

Then the average precision and average recall increased.

It's not the best if the mAP reaches 1. It's very powerful if it reaches about 0.48.