Tensorflow 对象检测:继续训练
Tensorflow object detection: Continue training
假设我训练了一个像 ResNet 这样的预训练网络,并在 pipeline.config file
中将其设置为检测 fine_tune_checkpoint_type
属性。据我了解,这意味着我们采用模型的预训练权重,除了分类和框预测头。此外,这意味着我们可以创建自己的标签类型,然后将其作为我们想要的模型的分类和框预测头create/train。
现在,假设我对这个网络进行了 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 部分。这意味着该模型将在网络的许多部分从头开始。
detection
恢复了整个特征提取器,但“最终结果”将被遗忘,这意味着我们可以添加自己的 类 并从头开始学习这些分类。
full
恢复一切,甚至 类 和框预测权重。但是,只要我们不添加或删除任何 classes/labels.
就可以了
这是正确的吗?
是的,你没有看错。
在 piepline.config
中设置 fine_tune_checkpoint_type: full
以保留模型在最后一个检查点之前学到的所有内容。
是的,你可以通过设置fine_tune_checkpoint_type配置要恢复的变量,选项是检测和分类。通过将其设置为检测,您基本上可以从检查点恢复几乎所有变量,通过将其设置为分类,仅恢复 feature_extractor 范围内的变量,(backbone 网络中的所有层,如 VGG , Resnet, MobileNet, 它们被称为特征提取器)。
Click here了解更多信息。
假设我训练了一个像 ResNet 这样的预训练网络,并在 pipeline.config file
中将其设置为检测 fine_tune_checkpoint_type
属性。据我了解,这意味着我们采用模型的预训练权重,除了分类和框预测头。此外,这意味着我们可以创建自己的标签类型,然后将其作为我们想要的模型的分类和框预测头create/train。
现在,假设我对这个网络进行了 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 部分。这意味着该模型将在网络的许多部分从头开始。
detection
恢复了整个特征提取器,但“最终结果”将被遗忘,这意味着我们可以添加自己的 类 并从头开始学习这些分类。
full
恢复一切,甚至 类 和框预测权重。但是,只要我们不添加或删除任何 classes/labels.
这是正确的吗?
是的,你没有看错。
在 piepline.config
中设置 fine_tune_checkpoint_type: full
以保留模型在最后一个检查点之前学到的所有内容。
是的,你可以通过设置fine_tune_checkpoint_type配置要恢复的变量,选项是检测和分类。通过将其设置为检测,您基本上可以从检查点恢复几乎所有变量,通过将其设置为分类,仅恢复 feature_extractor 范围内的变量,(backbone 网络中的所有层,如 VGG , Resnet, MobileNet, 它们被称为特征提取器)。
Click here了解更多信息。