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

How to reduce the number of training steps in Tensorflow's Object Detection API?

我正在按照 Dat Trans 示例使用 TensorFlow 的对象检测器训练我自己的对象检测器 API。

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

我尝试将 .ckpt 转换为 .pb,我引用了 this post,但我仍然无法转换

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

1) 只"reduce"训练步骤恐怕没有有效的方法。使用更大的批量大小 可能 导致 "faster" 训练(例如,以较少的步数 达到高精度 ),但是 每个步骤都需要更长的时间 来计算,因为您 运行 在您的 CPU 上。 尝试使用输入图像分辨率可能会加快速度,但代价是精度较低。 您真的应该考虑转向配备 GPU 的机器。

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

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

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

是的,.config 文件中有一个参数,您可以根据需要减少步骤数。 num_steps:在 .config 文件中,它实际上是训练中的 epoch 数。

但请记住,不建议减少它much.Because如果你减少太多,你的损失函数不会减少太多,这会给你带来糟糕的输出。

因此请继续查看损失函数,一旦它低于 1 ,您就可以开始单独测试您的模型,您的训练就会开始。

我不认为你可以减少训练步数,但你可以在任何检查点停止(ckpt)然后将其转换为.pb文件
您可以使用 TensorFlow 模型 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.是的,有一种方法可以改变训练步数:

试试这个,

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 文件。