假设我训练了一个像ResNet这样的预训练网络,并在pipeline.config file
属性中将其设置为detection。据我所知,这意味着我们获取模型的预训练权重。除了分类和盒预测头之外。此外,这意味着我们可以创建我们自己的标签类型,然后将作为分类和框预测头产生我们想要的模型创造/训练。
现在,假设我训练了这个网络25000步,并希望以后继续训练,而模型不会忘记任何东西,我应该将pipeline.config
中的fine_tune_checkpoint_type
更改为full
,以便继续训练(当然,还要加载正确的检查点文件),还是仍然将其设置为detection
?
编辑:
这基于https://github.com/tensorflow/models/blob/master/research/object_detection/protos/train.proto中的信息:
// 1. "classification": Restores only the classification backbone part of
// the feature extractor. This option is typically used when you want
// to train a detection model starting from a pre-trained image
// classification model, e.g. a ResNet model pre-trained on ImageNet.
// 2. "detection": Restores the entire feature extractor. The only parts
// of the full detection model that are not restored are the box and
// class prediction heads. This option is typically used when you want
// to use a pre-trained detection model and train on a new dataset or
// task which requires different box and class prediction heads.
// 3. "full": Restores the entire detection model, including the
// feature extractor, its classification backbone, and the prediction
// heads. This option should only be used when the pre-training and
// fine-tuning tasks are the same. Otherwise, the model's parameters
// may have incompatible shapes, which will cause errors when
// attempting to restore the checkpoint.
因此,classification
只提供了特征提取器的分类 Backbone.js 部分,这意味着模型将在网络的许多部分从头开始。detection
恢复了整个特征提取器,但是"最终结果"将被遗忘,这意味着我们可以添加自己的类,并从头开始学习这些分类。full
恢复所有内容,甚至包括类和盒预测权重。不过,只要我们不添加或删除任何类/标签,这就可以了。
是这样吗?
2条答案
按热度按时间gpnt7bae1#
是的,你理解得很正确。
在
piepline.config
中设置fine_tune_checkpoint_type: full
,以保留所有模型已经学习到最后检查点。oyxsuwqo2#
是的,您可以通过设置fine_tune_checkpoint_type来配置要恢复的变量,选项是检测和分类。通过将其设置为检测,您可以从检查点恢复几乎所有变量,通过将其设置为分类,仅恢复feature_extractor作用域中的变量,( Backbone.js 网络中的所有层,如VGG,Resnet,MobileNet,它们被称为特征提取器)。
Click here了解更多信息。