繁体   English   中英

如何减少 Tensorflow 的对象检测 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 ,我参考了这篇文章,但我仍然无法转换

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

我不认为你可以减少训练步骤的数量,但你可以在任何检查点( 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)恐怕没有有效的方法来“减少”训练步骤。 使用更大的批量可能会导致“更快”的训练(例如,在较少的步骤中达到高精度),但每个步骤都需要更长的时间来计算,因为您在 CPU 上运行。 使用输入图像分辨率可能会加快速度,但代价是精度较低。 您真的应该考虑迁移到配备 GPU 的机器上。

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

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

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

是的,.config 文件中有一个参数,您可以在其中尽可能减少步骤数。 num_steps:在 .config 文件中,它实际上是训练中的时期数。

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

所以继续观察损失函数,一旦它低于 1 ,那么你就可以开始单独测试你的模型,你的训练就会发生。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM