我遵循本教程以实现TensorFlow对象检测API。
首选的方法是使用验证的模型。
但是,在某些情况下,我们需要从头开始训练。
为此,我们只需要在配置文件中以
来评论两行#fine_tune_checkpoint: "object_detection/data/mobilenet_v1_1.0_224/mobilenet_v1_1.0_224.ckpt"
#from_detection_checkpoint: true
如果我想用Xavier重量初始化初始化重量,我该怎么做?
正如您在配置Protobuf定义中所看到的,可以使用3个初始化器:
- truncatedNormalItializer truncated_normal_initializer
- variancescalinginitializer vriance_scaling_initializer
- RandomNormalInitializer Random_normal_initializer
您要寻找的方差calinginitializer。如文档中所述,这是一般初始化器,您可以通过设置factor=1.0, mode='FAN_AVG'
来转换为Xavier Initializer。
因此,通过将初始化器设置为
initializer {
variance_scaling_initializer {
factor: 1.0
uniform: true
mode: FAN_AVG
}
}
在您的配置中,您可以获得Xavier Initializer。
但是,即使您需要培训新数据,也考虑使用验证的网络作为初始化而不是随机初始化。有关更多详细信息,请参见本文。
mobilenet_v1特征提取器从研究/纤细/网络导入骨干网络:
25: from nets import mobilenet_v1
Mobilenet的代码根据这样的规范实例化层:
net = slim.conv2d(net, depth(conv_def.depth), conv_def.kernel, stride=conv_def.stride, scope=end_point)
请参阅https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.py#l264
如您所见,没有kwargs
传递给conv2d
调用,因此使用当前代码,您无法指定将使用哪个weights_initializer
。
但是,默认情况下,初始化器无论如何都是Xavier,所以您很幸运。
我必须说,训练和对象检测模型而不预训练特征提取器在某些辅助任务上可能会失败。