如何减少 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 文件。
我正在按照 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 文件。