object_detectionAPI源码阅读笔记(1-翻译configuring_jobs.md)

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-翻译configuring_jobs.md))