如何在 ssd_mobilenet_v1 tensorflow 中增加 num_classes
How to increase num_classes in ssd_mobilenet_v1 tensorflow
我正在使用 ssd_mobilenet_v1_coco.config 和
我在计划训练后添加13个东西后将num_classes的值改为20
python model_main.py --alsologtostderr --model_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_coco.config
我一直在尝试使用命令学习,但出现错误。
增加num_classes
我应该怎么办 ?
我应该从头抓起 num_classes=100 然后开始吗?
我需要帮助。
model {
ssd {
num_classes: 20
box_coder {
faster_rcnn_box_coder {
y_scale: 10.0
x_scale: 10.0
height_scale: 5.0
width_scale: 5.0
}
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/training/saver.py", line 1326, in restore
err, "a mismatch between the current graph and the graph")
tensorflow.python.framework.errors_impl.InvalidArgumentError: Restoring from checkpoint failed. This is most likely due to a mismatch between the current graph and the graph from the checkpoint. Please ensure that you have not altered the graph expected based on the checkpoint. Original error:
Assign requires shapes of both tensors to match. lhs shape= [126] rhs shape= [84]
[[node save/Assign_56 (defined at /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framework/ops.py:1748) ]]
我最近遇到了类似的问题。为了解决我的问题,我必须执行以下操作:
- 在 pipeline.config 的 train_config 部分,让 fine_tune_checkpoint 指向上一个模型检查点。例如:`fine_tune_checkpoint: "./model/model.ckpt"
- 在 model_main.py 命令调用中,使 model_dir 引用与上一个检查点不同的文件夹:
python research/object_detection/model_main.py \
--model_dir=./model/finetune0 \
--pipeline_config_path=./model/pipeline.config \
--alsologtostderr
我的文件结构:
+ models
-+ model
--+ checkpoint
--+ model.ckpt.index
--+ model.ckpt.meta
--+ model.ckpt.data-00000-of-00001
--+ pipeline.config
--- finetune0 (will be autogenerated)
-- data (tfrecord dataset)
-- annotations (labels)
...
上下文
看起来当您在 model_dir 处已经有一个检查点时,脚本将尝试在提供的模型上恢复训练,但是 pipeline.config 与当前模型不匹配(num_class 不同)。
如果您在 fine_tune_checkpoint 中提供此检查点并将 model_dir 指向一个新文件夹,它将从检查点变量构建模型,调整它以匹配新配置,然后开始训练。
我正在使用 ssd_mobilenet_v1_coco.config 和
我在计划训练后添加13个东西后将num_classes的值改为20
python model_main.py --alsologtostderr --model_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_coco.config
我一直在尝试使用命令学习,但出现错误。 增加num_classes 我应该怎么办 ? 我应该从头抓起 num_classes=100 然后开始吗? 我需要帮助。
model {
ssd {
num_classes: 20
box_coder {
faster_rcnn_box_coder {
y_scale: 10.0
x_scale: 10.0
height_scale: 5.0
width_scale: 5.0
}
File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/training/saver.py", line 1326, in restore
err, "a mismatch between the current graph and the graph")
tensorflow.python.framework.errors_impl.InvalidArgumentError: Restoring from checkpoint failed. This is most likely due to a mismatch between the current graph and the graph from the checkpoint. Please ensure that you have not altered the graph expected based on the checkpoint. Original error:
Assign requires shapes of both tensors to match. lhs shape= [126] rhs shape= [84]
[[node save/Assign_56 (defined at /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framework/ops.py:1748) ]]
我最近遇到了类似的问题。为了解决我的问题,我必须执行以下操作:
- 在 pipeline.config 的 train_config 部分,让 fine_tune_checkpoint 指向上一个模型检查点。例如:`fine_tune_checkpoint: "./model/model.ckpt"
- 在 model_main.py 命令调用中,使 model_dir 引用与上一个检查点不同的文件夹:
python research/object_detection/model_main.py \
--model_dir=./model/finetune0 \
--pipeline_config_path=./model/pipeline.config \
--alsologtostderr
我的文件结构:
+ models
-+ model
--+ checkpoint
--+ model.ckpt.index
--+ model.ckpt.meta
--+ model.ckpt.data-00000-of-00001
--+ pipeline.config
--- finetune0 (will be autogenerated)
-- data (tfrecord dataset)
-- annotations (labels)
...
上下文
看起来当您在 model_dir 处已经有一个检查点时,脚本将尝试在提供的模型上恢复训练,但是 pipeline.config 与当前模型不匹配(num_class 不同)。
如果您在 fine_tune_checkpoint 中提供此检查点并将 model_dir 指向一个新文件夹,它将从检查点变量构建模型,调整它以匹配新配置,然后开始训练。