在 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
中决定
在这个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.
FasterRCNN 的 FirstStage 和 SecondStage 中的内容在 faster_rcnn_mobilenet_v1_feature_extractor.py