Tensorflow目标检测管道和配置

Tensorflow目标检测管道和配置,tensorflow,object-detection-api,Tensorflow,Object Detection Api,我想再培训一个可用的模型,因为我不需要所有90个类(只需要一个),我将在ARM CPU上使用它,所以我试图让它更快 我对配置文件感到困惑。在归档文件中有一个pipeline.config文件,我考虑将其与ObjectDetection Api一起使用。我有一些问题: 在该配置文件中可以更改什么 我也可以更改特征提取程序的参数吗?这部分不是被冻结了吗?过程只是更改了分类层吗 如果我想在16GB RAM的CPU上对其进行培训,那么哪些培训参数最重要?批次大小和数量步数的任何合理值 编辑 model

我想再培训一个可用的模型,因为我不需要所有90个类(只需要一个),我将在ARM CPU上使用它,所以我试图让它更快

我对配置文件感到困惑。在归档文件中有一个pipeline.config文件,我考虑将其与ObjectDetection Api一起使用。我有一些问题:

  • 在该配置文件中可以更改什么
  • 我也可以更改特征提取程序的参数吗?这部分不是被冻结了吗?过程只是更改了分类层吗
  • 如果我想在16GB RAM的CPU上对其进行培训,那么哪些培训参数最重要?批次大小和数量步数的任何合理值
  • 编辑

    model {
      ssd {
        num_classes: 1
        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"
          depth_multiplier: 0.75
          min_depth: 16
          conv_hyperparams {
            regularizer {
              l2_regularizer {
                weight: 3.99999989895e-05
              }
            }
            initializer {
              truncated_normal_initializer {
                mean: 0.0
                stddev: 0.0299999993294
              }
            }
            activation: RELU_6
            batch_norm {
              decay: 0.97000002861
              center: true
              scale: true
              epsilon: 0.0010000000475
              train: true
            }
          }
          override_base_feature_extractor_hyperparams: true
        }
        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: 24
      data_augmentation_options {
        random_horizontal_flip {
        }
      }
      data_augmentation_options {
        ssd_random_crop {
        }
      }
      optimizer {
        rms_prop_optimizer: {
          learning_rate: {
            exponential_decay_learning_rate {
              initial_learning_rate: 0.004
              decay_steps: 5000
              decay_factor: 0.95
            }
          }
          momentum_optimizer_value: 0.9
          decay: 0.9
          epsilon: 1.0      
        }
        use_moving_average: false
      }
      fine_tune_checkpoint: "/content/pretrained_model/model.ckpt"
      from_detection_checkpoint: true
      load_all_detection_checkpoint_vars: false
      num_steps: 40000
    }
    train_input_reader {
      label_map_path: "/content/classes.pbtxt"
      tf_record_input_reader {
        input_path: "/content/gdrive/My Drive/coco_train_300.record"
      }
    }
    eval_config {
      num_examples: 2693
      metrics_set: "coco_detection_metrics"
      use_moving_averages: false
      num_visualizations: 20
    }
    eval_input_reader {
      label_map_path: "/content/classes.pbtxt"
      shuffle: false
      num_readers: 1
      tf_record_input_reader {
        input_path: "/content/gdrive/My Drive/coco_val_300.record"
      }
    }
    
    它学习,但在40k步之后,损失仍然是5。输入数据集的大小调整为300x300


    我注意到您使用的是:ssd\u mobilenet\u v1

    您可以将配置文件替换为以下内容:

    model {
      ssd {
        inplace_batchnorm_update: true
        freeze_batchnorm: false
        num_classes: 1
        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 {
          }
        }
        encode_background_as_zeros: true
        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
            class_prediction_bias_init: -4.6
            conv_hyperparams {
              activation: RELU_6,
              regularizer {
                l2_regularizer {
                  weight: 0.00004
                }
              }
              initializer {
                random_normal_initializer {
                  stddev: 0.01
                  mean: 0.0
                }
              }
              batch_norm {
                train: true,
                scale: true,
                center: true,
                decay: 0.9,
                epsilon: 0.001,
              }
            }
          }
        }
        feature_extractor {
          type: 'ssd_mobilenet_v1'
          min_depth: 16
          depth_multiplier: 0.75
          conv_hyperparams {
            activation: RELU_6,
            regularizer {
              l2_regularizer {
                weight: 0.00004
              }
            }
            initializer {
              truncated_normal_initializer {
                stddev: 0.03
                mean: 0.0
              }
            }
            batch_norm {
              scale: true,
              center: true,
              decay: 0.9,
              epsilon: 0.001,
            }
          }
          override_base_feature_extractor_hyperparams: true
        }
        loss {
          classification_loss {
            weighted_sigmoid_focal {
              alpha: 0.75,
              gamma: 2.0
            }
          }
          localization_loss {
            weighted_smooth_l1 {
              delta: 1.0
            }
          }
          classification_weight: 1.0
          localization_weight: 1.0
        }
        normalize_loss_by_num_matches: true
        normalize_loc_loss_by_codesize: 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: {
      fine_tune_checkpoint: "ssd_mobilenet_v1/model.ckpt"
      fine_tune_checkpoint_type: "detection"
      load_all_detection_checkpoint_vars: true
      batch_size: 128
      sync_replicas: true
      startup_delay_steps: 0
      replicas_to_aggregate: 8
      num_steps: 2000
      data_augmentation_options {
        random_horizontal_flip {
        }
      }
      data_augmentation_options {
        ssd_random_crop {
        }
      }
      optimizer {
        momentum_optimizer: {
          learning_rate: {
            cosine_decay_learning_rate {
              learning_rate_base: 0.2
              total_steps: 2000
              warmup_steps: 0
            }
          }
          momentum_optimizer_value: 0.9
        }
        use_moving_average: false
      }
      max_number_of_boxes: 100
      unpad_groundtruth_tensors: false
    }
    
    train_input_reader: {
      tf_record_input_reader {
        input_path: "data/train.record"
      }
      label_map_path: "data/object-detection.pbtxt"
    }
    
    eval_config: {
      metrics_set: "coco_detection_metrics"
      use_moving_averages: false
      num_examples: 1100
    }
    
    eval_input_reader: {
      tf_record_input_reader {
        input_path: "data/test.record"
      }
      label_map_path: "data/object-detection.pbtxt"
      shuffle: false
      num_readers: 1
    }
    
    graph_rewriter {
      quantization {
        delay: 1800
        activation_bits: 8
        weight_bits: 8
      }
    }
    
    确保使用以下链接下载model.ckpt文件:

    curl -O http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_0.75_depth_300x300_coco14_sync_2018_07_03.tar.gz
    

    让我知道你的结果

    你能给配置文件附加一个链接吗。我建议您在看到此文件后进行更改。我添加了此信息。我不知道在进行迁移学习时是否可以更改feature_extractor中的任何内容(例如override_base_feature_extractor_hyperparams字段)。您的问题目前有点过于宽泛且基于观点。通过更多地解释你的最终目标和展示你尝试过的东西来缩小它的范围。