Tensorflow 对象检测下一步 [英] Tensorflow object detection next steps

查看:66
本文介绍了Tensorflow 对象检测下一步的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试训练一个模型来检查图像、识别指定的对象并告诉我它的坐标(我什至不需要看到对象周围的正方形).

Im trying to train a model to check images, identify specified objects and tell me its coodinates (i dont even need to see an square around the object).

为此,我使用 Tensorflow 的对象检测,而我所做的大部分工作都是在查看本教程:

For this im using Tensorflow's object detection and most of what I did was looking this tutorial:

如何训练对象在 Windows 10 上使用 TensorFlow (GPU) 的多个对象检测分类器

但是有些事情发生了变化,可能是因为更新,然后我不得不自己做一些事情.我实际上可以训练模型(我猜),但我不明白评估结果.我曾经看到损失和当前步骤,但这个输出对我来说是不寻常的.此外,我认为培训并没有得到保存.

But some things changed, probably because of updates, and then I had to do somethings on my own. I can actually train the model (I guess) but I don't understand the evaluation results. Im used to see loss and current step but this output is unusual for me. Also I don't think the training is being saved.

model_main.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_coco.config

配置文件:

model {
  faster_rcnn {
    num_classes: 9
    image_resizer {
      keep_aspect_ratio_resizer {
        min_dimension: 600
        max_dimension: 1024
      }
    }
    feature_extractor {
      type: 'faster_rcnn_inception_v2'
      first_stage_features_stride: 16
    }
    first_stage_anchor_generator {
      grid_anchor_generator {
        scales: [0.25, 0.5, 1.0, 2.0]
        aspect_ratios: [0.5, 1.0, 2.0]
        height_stride: 16
        width_stride: 16
      }
    }
    first_stage_box_predictor_conv_hyperparams {
      op: CONV
      regularizer {
        l2_regularizer {
          weight: 0.0
        }
      }
      initializer {
        truncated_normal_initializer {
          stddev: 0.01
        }
      }
    }
    first_stage_nms_score_threshold: 0.0
    first_stage_nms_iou_threshold: 0.7
    first_stage_max_proposals: 300
    first_stage_localization_loss_weight: 2.0
    first_stage_objectness_loss_weight: 1.0
    initial_crop_size: 14
    maxpool_kernel_size: 2
    maxpool_stride: 2
    second_stage_box_predictor {
      mask_rcnn_box_predictor {
        use_dropout: false
        dropout_keep_probability: 1.0
        fc_hyperparams {
          op: FC
          regularizer {
            l2_regularizer {
              weight: 0.0
            }
          }
          initializer {
            variance_scaling_initializer {
              factor: 1.0
              uniform: true
              mode: FAN_AVG
            }
          }
        }
      }
    }
    second_stage_post_processing {
      batch_non_max_suppression {
        score_threshold: 0.0
        iou_threshold: 0.6
        max_detections_per_class: 100
        max_total_detections: 300
      }
      score_converter: SOFTMAX
    }
    second_stage_localization_loss_weight: 2.0
    second_stage_classification_loss_weight: 1.0
  }
}

train_config: {
  batch_size: 5
  optimizer {
    momentum_optimizer: {
      learning_rate: {
        manual_step_learning_rate {
          initial_learning_rate: 0.0002
          schedule {
            step: 900000
            learning_rate: .00002
          }
          schedule {
            step: 1200000
            learning_rate: .000002
          }
        }
      }
      momentum_optimizer_value: 0.9
    }
    use_moving_average: false
  }
  gradient_clipping_by_norm: 10.0
  fine_tune_checkpoint: "faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt"
  from_detection_checkpoint: true
  num_steps: 50000
  data_augmentation_options {
    random_horizontal_flip {
    }
  }
}

train_input_reader: {
  tf_record_input_reader {
    input_path: "C:/tensorflow1/models/research/object_detection/images/train.record"
  }
  label_map_path: "C:/tensorflow1/models/research/object_detection/training/object-detection.pbtxt"
}

eval_config: {
  num_examples: 67
  max_evals: 10
}

eval_input_reader: {
  tf_record_input_reader {
    input_path: "C:/tensorflow1/models/research/object_detection/images/test.record"
  }
  label_map_path: "C:/tensorflow1/models/research/object_detection/training/object-detection.pbtxt"
  shuffle: false
  num_readers: 1
}

输出:

2019-03-16 01:05:23.842424: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2019-03-16 01:05:23.842528: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-03-16 01:05:23.845561: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990]      0
2019-03-16 01:05:23.845777: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0:   N
2019-03-16 01:05:23.847854: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6390 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
creating index...
index created!
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=0.05s).
Accumulating evaluation results...
DONE (t=0.04s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.681
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 1.000
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.670
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.542
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.825
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.682
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.689
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.689
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.556
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.825
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000

还有 faster_rcnn_inception_v2_coco_2018_01_28 里面的模型自 2018 年 1 月以来就没有改变,这可能意味着即使是训练,也没有保存进度.

Also the models inside faster_rcnn_inception_v2_coco_2018_01_28 have not been changed since Jan 2018, which probably means that even if it's training, it's not saving the progress.

我的问题是:

  • 是我的配置有问题还是其他什么问题?
  • 是否保存了训练进度?
  • 我如何理解这个输出?(IoU?maxDets?区域?负精确?是单批还是什么?)
  • 我是否应该等待它最终自行停止?我看不到我在哪一步,只是我用作的这段输出这里的示例用了将近 15 分钟才出现.

推荐答案

哇,这里有很多问题要回答.

Wow, a lot of questions to answer here.

1 .我觉得你的配置文件是对的,通常需要仔细配置的字段是:

1 .I think your config file is correct, usually the fields that need to be carefully configured are:

  • num_classes:数据集的类数
  • fine_tune_checkpoint:如果采用转移学习,开始训练的检查点,如果 from_detection_checkpoint 设置为真,则应提供.
  • label_map_path:标签文件的路径,类数应等于num_classes
  • input_pathtrain_input_readereval_input_reader
  • num_exampleseval_config 中,这是您的验证数据集大小,例如验证数据集中的示例数量.
  • num_steps:这是模型停止训练前要达到的总训练步数.
  • num_classes: the number of classes of your dataset
  • fine_tune_checkpoint: the checkpoint to start the training with if you adopt tansfer learning, this should be provided if from_detection_checkpoint is set true.
  • label_map_path: path to your label file, the number of classes should be equal to num_classes
  • input_path in both train_input_reader and eval_input_reader
  • num_examples in eval_config, this is your validation dataset size, e.g. the number of examples in your validation dataset.
  • num_steps: this is the total number of training steps to reach before the model stops training.

2 是的,您的训练过程正在保存,保存在 train_dir(如果您使用的是旧版本的 api,但是 model_dir 如果您使用的是最新的版本),官方描述是he一>.您可以使用 tensorard 来可视化您的训练过程.

2 Yes, your training process is being saved, it is saved at train_dir (if you are using the older version api, but model_dir if you are using the latest version), the official description is here. You can use tensorbard to visualize your training process.

3 COCO 评估格式的输出 if,因为这是默认的评估指标选项.但是您可以通过在配置文件中的 eval_config 中设置 metrics_set : 来尝试其他评估指标,其他选项可用 这里.对于 coco 指标,特别是:

3 The output if of COCO evaluation format as this is the default evalution metric option. But you can try other evalution metrics by setting metrics_set : in eval_config in the config file, other options are available here. For coco metrics, specifically:

  • IoUIntersection over Union,这定义了您的检测边界框与地面实况框的重叠程度.答案提供了更多详细信息,让您了解如何精度是根据不同的 IoU 计算的.
  • maxDets每张图像的最大检测阈值(请参阅此处a> 以便更好地讨论)
  • area,区域分为三类,取决于区域占用的像素数,小、中、大都定义了这里.
  • 对于类别'large'的负精度,我认为这是因为如果没有检测被归类为'large',这是默认值(但我无法确认这一点,您可以参考coco官方网站http://cocodataset.org/#home)
  • 评估是在整个验证数据集上执行的,因此是验证集中的所有图像.
  • 这个文件提供了有关 coco 指标的更多详细信息
  • IoU is Intersection over Union, this defines how much your detection bounding box overlaps with your groundtruth box. This answer provides more details for you to understand how the precision is calculated on different IoUs.
  • maxDets is thresholds on max detections per image (see here for better discussion)
  • area, there are three categories of area, it depends the number of pixels the area takes, small, medium and large are all defined here.
  • As for negative precision for category 'large', I think this is because this is the default value if no detections are categorized as 'large' (But I cannot confirm this, you may refer to the official coco website http://cocodataset.org/#home)
  • The evaluation is performed on the whole validation dataset, so all images in your validation set.
  • This file provides more details on coco metrics

4 一旦达到 cofig 文件中设置的 num_steps 的总训练步数,训练将停止.在您的情况下,每 15 分钟执行一次评估会议.此外,每个评估的执行频率也可以在配置中配置 文件.

4 The training will stop once the total number of training step is reached to num_steps as set in your cofig file. In your case, every 15 minutes an evaluation session is performed. Also how often each evaluation is performed can also be configured in the config file.

5 虽然你遵循了上面的教程,但我建议遵循官方 API 文档 https://github.com/tensorflow/models/tree/master/research/object_detection.

5 Although you followed the tutorial above, but I suggest follow the official API documentation https://github.com/tensorflow/models/tree/master/research/object_detection.

PS:确实我可以确认负精度分数是因为没有相应的类别.请参阅 中的参考.强>

PS: Indeed I can confirm the negative precision score is because of the absence of corresponding category. See reference in the cocoapi.

这篇关于Tensorflow 对象检测下一步的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆