如何减少Tensorflow的Object Detection API中的训练步骤数?

时间:2017-11-03 09:44:35

标签: python tensorflow deep-learning object-detection object-detection-api

我正在关注Dat Trans示例,使用TensorFlow的Object Detector API训练我自己的Object Detector。

我成功开始训练自定义对象。我使用CPU来训练模型,但完成100个训练步骤大约需要3个小时。我想我必须在.config中更改一些参数。

我尝试将.ckpt转换为.pb,我提到this帖子,但我仍然无法转换

1)如何减少训练步数?
2)有没有办法将.ckpt转换为.pb

5 个答案:

答案 0 :(得分:3)

我认为您不能减少训练步数,但您可以在任何检查点(ckpt)停留,然后将其转换为.pb文件
从TensorFlow Model git存储库中,您可以使用export_inference_graph.py
并遵循以下代码

python tensorflow_models/object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path architecture_used_while_training.config \
--trained path_to_saved_ckpt/model.ckpt-NUMBER \
--output_directory model/

其中NUMBER是指您最新保存的检查点文件编号,但如果您在tensorboard中找到更好的检查点文件,则可以使用旧检查点文件

答案 1 :(得分:2)

1)我担心没有有效的方法来“减少”训练步骤。使用更大的批量可能导致“更快”的培训(如在更低的步骤中达到高精度),但每个步骤将花费更长时间< / strong>计算,因为你在CPU上运行。 使用输入图像分辨率可能会让您加快速度,降低精度。 您应该考虑转移到具有GPU的计算机。

2).pb文件(及其对应的文本版本.pbtxt)默认仅包含图表的定义。如果您冻结您的图形,您将获取一个检查点,获取图形中定义的所有变量,将它们转换为常量并为它们分配存储在检查点中的值。您通常这样做是为了将经过培训的模型发送给任何使用它的人,但这在培训阶段没用。

答案 2 :(得分:0)

我强烈建议您找一种方法来加快每次训练步骤的运行时间,而不是减少训练步数。最好的方法是将手放在GPU上。如果你不能这样做,你可以考虑降低图像分辨率或使用更轻的网络。

要转换为冻结推理图(.pb文件),请参阅此处的文档: https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/exporting_models.md

答案 3 :(得分:0)

Ya .config文件中有一个参数,您可以在其中减少所需的步数。 num_steps:在.config文件中,实际上是训练中的纪元数。

但请记住,不建议减少它。因为如果你减少很多,你的损失功能不会减少很多,这会给你输出不好。

所以继续看损失功能,一旦它低于1,那么你可以开始分别测试你的模型,你的训练就会发生。

答案 4 :(得分:0)

1。是的,有一种方法可以更改训练步骤的数量:

尝试一下

python model_main_tf2.py --pipeline_config_path="config_path_here" --num_train_steps=5000 --model_dir="model_dir_here" --alsologtostderr

在这里,我将训练步骤数设置为5000

2。是的,有一种方法可以将检查点转换为.pb:

尝试一下

python exporter_main_v2.py --trained_checkpoint_dir="checkpoint_dir_here" --pipeline_config_path="config_path_here" --output_directory "output_dir_here"

这将创建一个目录,其中将保存检查点和.pb文件。