美文网首页
object_detectionAPI源码阅读笔记(1-翻译co

object_detectionAPI源码阅读笔记(1-翻译co

作者: yanghedada | 来源:发表于2018-10-05 19:10 被阅读231次

    Configuring the Object Detection Training Pipeline

    概述

    Tensorflow对象检测API,使用protobuf文件来配置训练和评估过程。可以在object_detection / protos / pipeline.proto中找到训练模式配置文件。这些配置文件分为5个部分,分散在五个文件中。这里说配置文件并不在pipeline.proto中,而在以config结尾的配置文件中。比如\object_detection\samples\configs\ssd_inception_v2_coco.config(大多是嵌套型的map)。但是在这篇文档有解释,大概说像ssd_inception_v2_coco.config等文件其实是五个文件合在一起的一个简单例子:

    pipline.proto

    syntax = "proto2";
    
    package object_detection.protos;
    
    import "object_detection/protos/eval.proto";
    import "object_detection/protos/input_reader.proto";
    import "object_detection/protos/model.proto";
    import "object_detection/protos/train.proto";
    
    // Convenience message for configuring a training and eval pipeline. Allows all
    // of the pipeline parameters to be configured from one file.
    message TrainEvalPipelineConfig {
      optional DetectionModel model = 1;
      optional TrainConfig train_config = 2;
      optional InputReader train_input_reader = 3;
      optional EvalConfig eval_config = 4;
      optional InputReader eval_input_reader = 5;
    }
    
    1. model_config。这里定义训练模型类型和使用参数。
      model_config.proto
    syntax = "proto2";
    
    package object_detection.protos;
    
    import "object_detection/protos/faster_rcnn.proto";
    import "object_detection/protos/ssd.proto";
    
    // Top level configuration for DetectionModels.
    message DetectionModel {
      oneof model {
        FasterRcnn faster_rcnn = 1;
        Ssd ssd = 2;
      }
    }
    
    1. train_config,定义哪些参数应该被用来训练模型参数。
      train_config.proto
    syntax = "proto2";
    
    package object_detection.protos;
    
    import "object_detection/protos/optimizer.proto";
    import "object_detection/protos/preprocessor.proto";
    
    // Message for configuring DetectionModel training jobs (train.py).
    message TrainConfig {
      // Input queue batch size.
      optional uint32 batch_size = 1 [default=32];
    
      // Data augmentation options.
      repeated PreprocessingStep data_augmentation_options = 2;
    
    1. eval_config,设定的使用哪些指标将被报告进行评估。
    syntax = "proto2";
    
    package object_detection.protos;
    
    // Message for configuring DetectionModel evaluation jobs (eval.py).
    message EvalConfig {
      // Number of visualization images to generate.
      optional uint32 num_visualizations = 1 [default=10];
    
      // Number of examples to process of evaluation.
      optional uint32 num_examples = 2 [default=5000];
    
    1. train_input_config,定义在哪些数据集是训练集。

    2. eval_input_config,定义在哪些数据集进行评估的。通常,这应该与训练输入数据集不同。

    所有模型参数汇总的配置文件如下所示:

    model {
    (... Add model config here...)
    }
    
    train_config : {
    (... Add train_config here...)
    }
    
    train_input_reader: {
    (... Add train_input configuration here...)
    }
    
    eval_config: {
    }
    
    eval_input_reader: {
    (... Add eval_input configuration here...)
    }
    
    

    设置需要的参数

    需要配置大量模型参数。最佳设置取决于所需的应用程序。Faster R-CNN模型更适合于需要高精度且延迟优先级较低的情况。相反,如果处理时间是最重要的因素,建议使用SSD型号。可以阅读论文,以获得有关速度与准确度权衡的更详细讨论。

    在object_detection / samples / configs文件夹中提供了示例模型配置。这些配置文件的内容可以粘贴到model配置的字段中。用户应注意,其中的num_classes字段应更改为适合用户正在训练的数据集的值。我的是num_classes = 20

    定义输入

    Tensorflow Object Detection API接受TFRecord文件格式的输入。必须指定训练和评估文件的位置。此外,还应指定标签映射,该映射定义类ID和类名之间的映射。标签映射在训练和评估数据集之间应该相同。
    类别ID和类名配置tensorflow人脸识别(自己的数据集)

    item {
      id: 1
      name: 'fanbingbing'
    }
    
    item {
      id: 2
      name: 'damimi'
    }
    
    item {
      id: 3
      name: 'liuyan'
    }
    

    在文件train和eval文件的输入配置如下所示:

    tf_record_input_reader {
      input_path: "/usr/home/username/data/train.record"
    }
    label_map_path: "/usr/home/username/data/label_map.pbtxt"
    
    

    应该替换input_pathlabel_map_path参数,并将输入配置插入到config.poto配置中的train_input_readereval_input_reader字段中。配置可在谷歌云上使用。

    train_config 的配置

    train_config训练过程中的定义部分:

    1. 模型参数初始化。
    2. 输入预处理。
    3. SGD参数。

    样例train_config如下:

    batch_size: 1
    optimizer {
      momentum_optimizer: {
        learning_rate: {
          manual_step_learning_rate {
            initial_learning_rate: 0.0002
            schedule {
              step: 0
              learning_rate: .0002
            }
            schedule {
              step: 900000
              learning_rate: .00002
            }
            schedule {
              step: 1200000
              learning_rate: .000002
            }
          }
        }
        momentum_optimizer_value: 0.9
      }
      use_moving_average: false
    }
    fine_tune_checkpoint: "/usr/home/username/tmp/model.ckpt-#####"
    from_detection_checkpoint: true
    load_all_detection_checkpoint_vars: true
    gradient_clipping_by_norm: 10.0
    data_augmentation_options {
      random_horizontal_flip {
      }
    }
    
    

    模型参数初始化

    虽然是可选的,但强烈建议使用其他检测模型的检查点。从头开始训练物体探测器可能需要数天时间。为加快训练过程,建议从预先的图像分类或对象检测检查点中使用特征提取器参数。
    train_config提供两个字段来指定预先存在的检查点:fine_tune_checkpointfrom_detection_checkpointfine_tune_checkpoint应提供预先存在的检查点的路径(即:“/ usr / home / username / checkpoint / model.ckpt - #####”)。
    from_detection_checkpoint是一个布尔值。如果为false,则假定检查点来自对象分类检查点。请注意,从检测检查点开始通常会导致比分类检查点更快的训练工作。
    如果为True,则假定检查点来自对象检测的检查点。
    如下:

    train_config: {
      batch_size: 20
      optimizer {
        rms_prop_optimizer: {
          learning_rate: {
            exponential_decay_learning_rate {
              initial_learning_rate: 0.004
              decay_steps: 10000
              decay_factor: 0.95
            }
          }
          momentum_optimizer_value: 0.9
          decay: 0.9
          epsilon: 1.0
        }
      }
      fine_tune_checkpoint: "ssd_inception_v2_coco_2018_01_28/model.ckpt"
      from_detection_checkpoint: true
    

    可在分类目标检测找到提供的检查点列表。

    输入预处理

    data_augmentation_optionstrain_config可用于指定的训练数据是如何被修改。该字段是可选的。我没用过。

    SGD参数

    其余参数train_config是用于梯度下降的超参数。这些配置文件中提供的最佳学习率可能取决于训练设置的具体情况(例如,任务数量,gpu类型)。

    配置评估程序

    要设置的主要组件eval_confignum_examplesmetrics_set。该参数num_examples指示用于评估周期的批次数(当前为批量大小1),通常是评估数据集的总大小。该参数metrics_set指示在评估期间运行的度量(即"coco_detection_metrics")。

    相关文章

      网友评论

          本文标题:object_detectionAPI源码阅读笔记(1-翻译co

          本文链接:https://www.haomeiwen.com/subject/dewqaftx.html