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")。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 声明:作者翻译论文仅为学习,如有侵权请...
    SnailTyan阅读 23,269评论 1 35
  • 该文章为转载文章,作者简介:汪剑,现在在出门问问负责推荐与个性化。曾在微软雅虎工作,从事过搜索和推荐相关工作。 T...
    名字真的不重要阅读 5,265评论 0 3
  • 历经了十八年的艰难困苦,吴玉莲终于在这个夏天看到了一丝曙光。 二十多年前,吴玉莲中专毕业,经人介绍,认识了大学本科...
    萤烛之尚阅读 530评论 0 3
  • 一群蚂蚁在大雨即将来临的时候,敏感地嗅到了危险,它们成群结队,开始了有条不紊的搬家行动,没有忙乱,没有不安,没有躁...
    樂鈫阅读 158评论 0 0