Загрузка предварительно обученной модели в Tensorflow - PullRequest
0 голосов
/ 23 марта 2019

В этом уроке (создание новой модели для обнаружения объектов) в середине он упоминается как

"Обычно мы инициализируем веса этого экстрактора функций, используя веса из контрольной точки классификации Slim Resnet-101, и мы знаем, что изображения были предварительно обработаны при обучении этой контрольной точки путем вычитания среднего значения канала из каждого входного изображения. Таким образом, мы реализуем Функция предварительной обработки для репликации того же канала означает вычитание. "

Сейчас я пытаюсь загрузить предварительно подготовленную модель для MobileNet_v1_1.0_224 на этой странице .

Я проверил все переменные из загруженной контрольной точки и те переменные, которые требовались для инициализации при обучении FasterRcnn. Загруженный контрольно-пропускной пункт имеет больше переменных, чем необходимо.

Например, Мне нужно инициализировать эту переменную 'FirstStageFeatureExtractor/MobilenetV1/Conv2d_0/BatchNorm/beta'.

Но в загруженных переменных есть

'MobilenetV1/Conv2d_0/BatchNorm/beta/ExponentialMovingAverage': [32]
'MobilenetV1/Conv2d_0/BatchNorm/beta/RMSProp_1': [32],
'MobilenetV1/Conv2d_0/BatchNorm/beta': [32],

Мои запросы

(1) Так что для меня достаточно использовать последний 'MobilenetV1/Conv2d_0/BatchNorm/beta' для инициализации 'FirstStageFeatureExtractor/MobilenetV1/Conv2d_0/BatchNorm/beta'.

Это правильно?

(2) Для чего нужны ExponentialMovingAverage и RMSProp_1?

(3) Тогда как разделить FirstStageFeatureExtractor и SecondStageFeatureExtractor в FasterRcnn в Tensorflow?

(4) Эти инициализированные переменные используют инициализированные веса, для неинициализированных переменных будет использоваться Xavier initializer в соответствии с файлом конфигурации, это правда?

initializer {
    variance_scaling_initializer {
        factor: 1.0
        uniform: true
        mode: FAN_AVG
    }
}

EDIT:

Тогда для переменной MobilenetV1/Conv2d_12_pointwise/depthwise_weights shape=(3, 3, 512, 1) я не могу найти точную переменную. Те, кто ближе,

'MobilenetV1/Conv2d_12_depthwise/depthwise_weights': [3, 3, 512, 1],
'MobilenetV1/Conv2d_12_depthwise/depthwise_weights/RMSProp': [3, 3, 512, 1],
'MobilenetV1/Conv2d_12_depthwise/depthwise_weights/ExponentialMovingAverage': [3, 3, 512, 1],
'MobilenetV1/Conv2d_12_depthwise/depthwise_weights/RMSProp_1': [3, 3, 512, 1],

Таким образом, я использовал веса переменной 'MobilenetV1 / Conv2d_12_depthwise / deepwise_weights': [3, 3, 512, 1] из загруженной контрольной точки для назначения MobilenetV1/Conv2d_12_pointwise/depthwise_weights shape=(3, 3, 512, 1)

1 Ответ

0 голосов
/ 23 марта 2019

Да, то, что я сделал, было правильно.Какие переменные необходимы для инициализации и какие переменные доступны из загруженной контрольной точки, можно проверить по variable_names_map.Оттуда выберите переменную и инициализируйте для дальнейшей тонкой настройки.

Нужна небольшая модификация кода Tensorflow, в основном на utils/variables_helper.py file.

Решено, что быть в FirstStage и SecondStage FasterRCNNна faster_rcnn_mobilenet_v1_feature_extractor.py

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