1

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

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

我尝试转换.ckpt.pb,我参考了这篇文章,但我仍然无法转换

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

4

5 回答 5

3

我不认为你可以减少训练步骤的数量,但你可以在任何检查点(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 中发现它更好,则可以使用较旧的检查点文件

于 2017-11-08T10:30:44.537 回答
2

1)恐怕没有有效的方法来“减少”训练步骤。使用更大的批量大小可能会导致“更快”的训练(例如,以更少的步数达到高精度),但每一步都需要更长的计算时间,因为你是在 CPU 上运行的。使用输入图像分辨率可能会加快速度,但会降低精度。你真的应该考虑转移到一台有 GPU 的机器上。

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

于 2017-11-03T09:51:31.033 回答
0

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

但请记住,不建议减少太多。因为如果减少太多,您的损失函数不会减少太多,这会给您带来不好的输出。

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

于 2017-11-06T06:32:32.083 回答
0

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

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

于 2017-11-05T20:45:07.463 回答
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 文件。

于 2020-11-15T11:04:10.287 回答