Я пытаюсь обучить модель прогнозировать ограничивающие рамки на аэрофотоснимках с помощью API обнаружения объектов Tensorflow.
Я раздвоил папку моделей Tensorflow с github и запустил процесс установки, и, похоже, он прошел нормально.
Я использую контрольную точку Faster R-CNN ResNet50, обученную на COCOиз модельного зоопарка, и пытался тренироваться, используя свои собственные аэрофотоснимки, которые я пометил сам и у меня есть один класс.Я преобразовал изображения в tfrecords и создал файл .pbtxt с деталями класса.Я также настроил файл fast_rcnn_resnet50_coco.config, чтобы в нем было правильное количество классов и мест обучения, а также eval tfrecords.
Для запуска процесса обучения из моделей / research / object_detection, которые я использовалзапустите следующую команду:
python model_main.py
--alsologstostderr
--model_dir="./training/faster_rcnn_resnet50_coco_2018_01_28"
--pipeline_config_path="./training/faster_rcnn_resnet50_coco.config"
--num_train_steps=10
--eval_training_data=True
--checkpoint_dir="./faster_rcnn_resnet50_coco_2018_01_28"
--hparams='num_epochs=2'
У меня было много ошибок на этом пути, и все они, похоже, как-то связаны с путями, в которых находятся мои файлы.Похоже, что все файлы сейчас находятся, но я получаю другую ошибку, которая, я уверен, связана с разделом SecondStageBoxPredictor / ClassPredictor контрольной точки модели.Форма этого весового тензора ClassPredictor (2048, 91), который, как я предполагаю, таков, чтобы модель могла предсказать, в какой из 91 классов COCO это изображение попадает.Поскольку мои тренировочные данные имеют только один класс, похоже, что при достижении этой точки форма (2048, 2) вызывает несоответствие при применении этого шага (см. Ошибки, показанные ниже).Я предположил бы, что, изменяя количество классов в файле конфигурации, это предотвратит такое несоответствие, но я не могу понять, куда мне обратиться, чтобы подтвердить, если и как это происходит.Надеюсь, кто-то может указать мне в правильном направлении!
Трассировка ошибок длиннее, чем эта, но в основном она повторяет то, что я выкладываю ниже.Я могу опубликовать полный след при необходимости.
Traceback (most recent call last):
File "model_main.py", line 110, in <module>
tf.app.run()
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\platform\app.py", line 125, in run
_sys.exit(main(argv))
File "model_main.py", line 95, in main
train_steps, name)
File "C:\Users\SWynd\Dropbox\PhD\Spring 19\EE6363\Project\models\research\object_detection\model_lib.py", line 770, in continuous_eval
input_fn=input_fn, steps=None, checkpoint_path=ckpt, name=name)
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\estimator\estimator.py", line 478, in evaluate
return _evaluate()
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\estimator\estimator.py", line 467, in _evaluate
output_dir=self.eval_dir(name))
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\estimator\estimator.py", line 1591, in _evaluate_run
config=self._session_config)
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\evaluation.py", line 271, in _evaluate_once
session_creator=session_creator, hooks=hooks) as session:
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\monitored_session.py", line 921, in __init__
stop_grace_period_secs=stop_grace_period_secs)
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\monitored_session.py", line 643, in __init__
self._sess = _RecoverableSession(self._coordinated_creator)
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\monitored_session.py", line 1107, in __init__
_WrappedSession.__init__(self, self._create_session())
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\monitored_session.py", line 1112, in _create_session
return self._sess_creator.create_session()
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\monitored_session.py", line 800, in create_session
self.tf_sess = self._session_creator.create_session()
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\monitored_session.py", line 566, in create_session
init_fn=self._scaffold.init_fn)
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\session_manager.py", line 288, in prepare_session
config=config)
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\session_manager.py", line 202, in _restore_checkpoint
saver.restore(sess, checkpoint_filename_with_path)
File "C:\Users\SWynd\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\training\saver.py", line 1582, 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= [4] rhs shape= [360]
[[node save/Assign_271 (defined at C:\Users\SWynd\Dropbox\PhD\Spring 19\EE6363\Project\models\research\object_detection\model_lib.py:491) = Assign[T=DT_FLOAT, _class=["loc:@SecondStageBoxPredictor/BoxEncodingPredictor/biases"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](SecondStageBoxPredictor/BoxEncodingPredictor/biases, save/RestoreV2:271)]]