title: How does transfer learning work with tensorflow object detection API?
body: <p>I am training a model (MobileNet V2 fpn lite) on a dataset of images with tensorflow object detection api. I don't quite understand what type of transfer learning is used as I could't find information in the config file specifically related to it (such as the number of freezed layers).</p>
  <p>Here is my config file:</p>
  <blockquote>
  
  </blockquote>
  <pre class="lang-html prettyprint-override"><code>model {
  ssd {
  num_classes: 1
  image_resizer {
  fixed_shape_resizer {
  height: 320
  width: 320
  }
  }
  feature_extractor {
  type: &quot;ssd_mobilenet_v2_fpn_keras&quot;
  depth_multiplier: 1.0
  min_depth: 16
  conv_hyperparams {
  regularizer {
  l2_regularizer {
  weight: 3.9999998989515007e-05
  }
  }
  initializer {
  random_normal_initializer {
  mean: 0.0
  stddev: 0.009999999776482582
  }
  }
  activation: RELU_6
  batch_norm {
  decay: 0.996999979019165
  scale: true
  epsilon: 0.0010000000474974513
  }
  }
  use_depthwise: true
  override_base_feature_extractor_hyperparams: true
  fpn {
  min_level: 3
  max_level: 7
  additional_layer_depth: 128
  }
  }
  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
  use_matmul_gather: true
  }
  }
  similarity_calculator {
  iou_similarity {
  }
  }
  box_predictor {
  weight_shared_convolutional_box_predictor {
  conv_hyperparams {
  regularizer {
  l2_regularizer {
  weight: 3.9999998989515007e-05
  }
  }
  initializer {
  random_normal_initializer {
  mean: 0.0
  stddev: 0.009999999776482582
  }
  }
  activation: RELU_6
  batch_norm {
  decay: 0.996999979019165
  scale: true
  epsilon: 0.0010000000474974513
  }
  }
  depth: 128
  num_layers_before_predictor: 4
  kernel_size: 3
  class_prediction_bias_init: -4.599999904632568
  share_prediction_tower: true
  use_depthwise: true
  }
  }
  anchor_generator {
  multiscale_anchor_generator {
  min_level: 3
  max_level: 7
  anchor_scale: 4.0
  aspect_ratios: 1.0
  aspect_ratios: 2.0
  aspect_ratios: 0.5
  scales_per_octave: 2
  }
  }
  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_static_shapes: false
  }
  score_converter: SIGMOID
  }
  normalize_loss_by_num_matches: true
  loss {
  localization_loss {
  weighted_smooth_l1 {
  }
  }
  classification_loss {
  weighted_sigmoid_focal {
  gamma: 2.0
  alpha: 0.25
  }
  }
  classification_weight: 1.0
  localization_weight: 1.0
  }
  encode_background_as_zeros: true
  normalize_loc_loss_by_codesize: true
  inplace_batchnorm_update: true
  freeze_batchnorm: false
  }
  }
  train_config {
  batch_size: 35 #128
  data_augmentation_options {
  random_horizontal_flip {
  }
  }
  data_augmentation_options {
  random_crop_image {
  min_object_covered: 0.0
  min_aspect_ratio: 0.75
  max_aspect_ratio: 3.0
  min_area: 0.75
  max_area: 1.0
  overlap_thresh: 0.0
  }
  }
  sync_replicas: true
  optimizer {
  momentum_optimizer {
  learning_rate {
  cosine_decay_learning_rate {
  learning_rate_base: 0.03 #0.07999999821186066
  total_steps: 50000
  warmup_learning_rate: 0.01 #0.026666000485420227
  warmup_steps: 1000
  }
  }
  momentum_optimizer_value: 0.8999999761581421
  }
  use_moving_average: false
  }
  fine_tune_checkpoint: 'path_to/pre-trained-models/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8/checkpoint/ckpt-0'
  num_steps: 50000
  startup_delay_steps: 0.0
  replicas_to_aggregate: 8
  max_number_of_boxes: 100
  unpad_groundtruth_tensors: false
  fine_tune_checkpoint_type: &quot;detection&quot;
  fine_tune_checkpoint_version: V2
  }
  train_input_reader {
  label_map_path: 'path_to/data/object_detection.pbtxt'
  tf_record_input_reader {
  input_path: 'path_to/data/train.record'
  }
  }
  eval_config {
  metrics_set: &quot;coco_detection_metrics&quot;
  use_moving_averages: false
  }
  eval_input_reader {
  label_map_path: 'path_to/data/object_detection.pbtxt'
  shuffle: false
  num_epochs: 1
  tf_record_input_reader {
  input_path: 'path_to/data/test.record'
  }
  }
  </code></pre>
  <p>Do you know how transfer learning work with tensorflow object detection api? Can we change some of the parameters to adjust transfer learning? Thanks!</p>
  <p>Here are related questions: <a href="https://stackoverflow.com/questions/62234735/tensorflow-object-detection-api-with-transfer-learning-for-custom-classes-does">Tensorflow Object detection API with transfer learning for custom classes - does all the layers weights get updated with default configuration?</a></p>