在Tensorflow中加载预训练的模型

时间:2019-03-23 02:52:23

标签: python tensorflow object-detection-api

在此tutorial(创建用于对象检测的新模型)中,在中间将其称为

“通常,我们通常使用Slim Resnet-101分类检查点的权重来初始化此特征提取器的权重,并且我们知道在训练该检查点时会通过从每个输入图像中减去通道平均值来对图像进行预处理。因此,我们实现了复制相同通道的预处理功能意味着减法行为。”

现在,我正在此page上为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)那么Tensorflow中FasterRcnn中的FirstStageFeatureExtractor和SecondStageFeatureExtractor如何分开?

(4)那些初始化的变量使用初始化的权重,对于那些未初始化的变量将根据配置文件使用Xavier initializer,是真的吗?

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

编辑:

然后对于变量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 / depthwise_weights'的权重:[3,3,512,1],从已加载的检查点分配给 MobilenetV1/Conv2d_12_pointwise/depthwise_weights shape=(3, 3, 512, 1)

1 个答案:

答案 0 :(得分:0)

是的,我所做的是正确的。可以从variable_names_map中检查需要初始化哪些变量以及可以从装入的检查点获得哪些变量。从那里选择变量,然后初始化以进行进一步的微调。

主要在utils/variables_helper.py file.

上需要对Tensorflow的代码进行一些修改

FasterRCNN的FirstStage和SecondStage中的内容由faster_rcnn_mobilenet_v1_feature_extractor.py决定