Как решить "Переменная доступна в контрольной точке, но имеет несовместимую форму с переменной модели"? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь переобучить существующую предварительно обученную сеть из API-интерфейса обнаружения объектов. Это ssd_mobilenet_v2. Предварительная подготовка по набору данных COCO. Я воспроизводил шаги в соответствии с руководством, прикрепленным к obj-Detection-API.

Модель все равно начинает тренироваться, но% mAP низок. Я новичок в CNN, поэтому любая помощь приветствуется.

Когда я начинаю тренироваться, появляется это предупреждение, и я не могу найти решение.

Я запускаю его в записной книжке google для совместной работы с этой командой

# Training
!python object_detection/model_main.py \
--pipeline_config_path=${PIPELINE_CONFIG_PATH} \
--model_dir=${MODEL_DIR} \
--num_train_steps=${NUM_TRAIN_STEPS} \
--sample_1_of_n_eval_examples=$SAMPLE_1_OF_N_EVAL_EXAMPLES \
--alsologtostderrps

Вот предупреждения, которые я получаю:

WARNING:root:Variable [FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/weights] is     available in checkpoint, but has an incompatible shape with model variable. Checkpoint shape: [[1, 1, 256, 512]], model variable shape: [[3, 3, 256, 512]]. This variable will not be initialized from the checkpoint.
WARNING:root:Variable [FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/weights] is available in checkpoint, but has an incompatible shape with model variable. Checkpoint shape: [[1, 1, 128, 256]], model variable shape: [[3, 3, 128, 256]]. This variable will not be initialized from the checkpoint.
WARNING:root:Variable [FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/weights] is available in checkpoint, but has an incompatible shape with model variable. Checkpoint shape: [[1, 1, 128, 256]], model variable shape: [[3, 3, 128, 256]]. This variable will not be initialized from the checkpoint.
WARNING:root:Variable [FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/weights] is available in checkpoint, but has an incompatible shape with model variable. Checkpoint shape: [[1, 1, 64, 128]], model variable shape: [[3, 3, 64, 128]]. This variable will not be initialized from the checkpoint.

после 10 минут работы он печатает:

Accumulating evaluation results...
DONE (t=1.73s).
Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.002
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.006
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.040
Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.002
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.026
Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.050

Я не изменил * .ckpt файлы, только что скачал оригинальную предварительно подготовленную версию ssd_mobilenet_v2_coco_2018_03_29 и использовал их и связал их в файле .config.

Я пытаюсь понять это больше суток. Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Недавно я столкнулся с той же проблемой, что и Мирослав (те же 4 предупреждающих сообщения). Хотя @GPhilo прав, что это предупреждающее сообщение означает, что контрольная точка не соответствует модели, похоже, что возникла проблема при создании этой конкретной предварительно обученной контрольной точки. В частности, контрольная точка ssd_mobilenet_v2_coco_2018_03_29.tar.gz, похоже, была сгенерирована с использованием предварительной версии файла конфигурации. Вот ссылка на связанную проблему на GitHub: https://github.com/tensorflow/models/issues/5315

В конце концов, я переключился с файла ssd_mobilenet_v2_coco.config в git repo tenorflow / models на файл pipeline.config, включенный в предварительно обученную контрольную точку. Помимо обычных настроек, которые нужно изменить, вам также необходимо убрать флаг batch_norm_trainable. Больше информации об этой ошибке здесь: https://github.com/tensorflow/models/issues/4066

Примечание. Моей первой попыткой было переключиться на квантованную версию SSD MobileNet V2, но я не получил ту точность, на которую надеялся, после повторного обучения модели с моим набором данных (не знаю почему).

0 голосов
/ 08 января 2019

Ваше сообщение об ошибке гласит (с первой строки они все похожи):

layer_19_2_Conv2d_2_3x3_s2_512 / weights доступен в контрольной точке, но имеет несовместимую форму с переменной модели. Форма контрольной точки: [[1, 1, 256, 512]], переменная форма модели: [[3, 3, 256, 512]] .

Форма в контрольной точке, как интерпретируется в этом вопросе и ответе , соответствует форме свертки 1x1 (1,1 в начале формы). Форма в вашей модели правильно соответствует свертке 3х3. Теперь, это странно, потому что имя слоя в контрольной точке имеет "3x3", хотя это было бы неправильно, учитывая форму весов.

Похоже, вы используете контрольную точку, которая использовала свертки 1x1 для слоев, с которыми у вас проблемы, несмотря на то, что у этих слоев есть имя, которое подразумевает свертки 3x3. В качестве обходного пути для использования имеющейся у вас контрольной точки вы можете попробовать изменить модель, изменив функцию, которая ее строит, чтобы использовать вместо нее свертки 1x1 (хотя я не могу точно сказать, где это будет).

Что касается низкого% mAP, это, конечно, связано с повторной инициализацией части модели и ее неправильной загрузкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...