Как увеличить num_classes в ssd_mobilenet_v1 tensorflow

Я использую ssd_mobilenet_v1_coco.config и

Я изменил значение num_classes на 20 после добавления 13 вещей после планирования обучения

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) ]]

0 ответов

У меня недавно была похожая проблема. Чтобы решить свою проблему, мне пришлось сделать следующее:

  • В разделе train_config файла pipeline.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 на новую папку, он построит модель из переменной контрольной точки, настроит ее в соответствии с новой конфигурацией, а затем начнет обучение.

Другие вопросы по тегам