在 Tensorflow 中加载预训练模型

Loading pretrained model in Tensorflow

在这个tutorial(创建对象检测的新模型)中,它在中间提到为

"We typically initialize the weights of this feature extractor using those from the Slim Resnet-101 classification checkpoint, and we know that images were preprocessed when training this checkpoint by subtracting a channel mean from each input image. Thus, we implement the preprocess function to replicate the same channel mean subtraction behavior."

现在我正在尝试在此 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)

是的,我做的是正确的。可以从 variable_names_map 中检查需要初始化哪些变量以及从加载的检查点可以使用哪些变量。从那里,select 变量并初始化以进一步微调。

主要在 utils/variables_helper.py file.

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

FasterRCNN 的 FirstStage 和 SecondStage 中的内容在 faster_rcnn_mobilenet_v1_feature_extractor.py

中决定