首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow对象-检测API -模型微调是如何工作的?

Tensorflow对象-检测API -模型微调是如何工作的?
EN

Stack Overflow用户
提问于 2019-05-06 20:36:39
回答 1查看 9.9K关注 0票数 9

这是一个关于Tensorflow对象-检测API的更普遍的问题。

我正在使用这个API,更确切地说,我微调了一个模型到我的数据集。根据API的描述,我使用model_main.py函数从给定的检查点/冻结图重新训练模型。

然而,我不清楚微调在API中是如何工作的。最后一层的重新初始化是自动发生的还是我必须实现类似的东西?在README文件中,我没有找到任何关于这个主题的提示。也许有人能帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 12:59:21

培训或培训从一个检查点,model_main.py是主程序,除了这个程序,您需要的是一个正确的管道配置文件。

因此,对于微调,它可以分为两个步骤,恢复权重和更新权重.这两个步骤都可以根据列车原文件定制配置,此proto对应于管道配置文件中的train_config

代码语言:javascript
复制
train_config: {
   batch_size: 24
   optimizer { }
   fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"
   fine_tune_checkpoint_type:  "detection"
   # Note: The below line limits the training process to 200K steps, which we
   # empirically found to be sufficient enough to train the pets dataset. This
   # effectively bypasses the learning rate schedule (the learning rate will
   # never decay). Remove the below line to train indefinitely.
   num_steps: 200000
   data_augmentation_options {}
 }

步骤1,恢复权重.

在这个步骤中,您可以通过设置fine_tune_checkpoint_type来配置要还原的变量,选项是detectionclassification。通过将其设置为detection,您基本上可以从检查点恢复几乎所有变量,并将其设置为classification,只还原来自feature_extractor作用域的变量(主干网络中的所有层,如VGG、Resnet、MobileNet,它们被称为特征提取器)。

以前,这是由from_detection_checkpointload_all_detection_checkpoint_vars控制的,但这两个字段是不推荐的。

还请注意,在配置了fine_tune_checkpoint_type之后,实际的恢复操作将检查图中的变量是否存在于检查点中,如果没有,则将使用常规初始化操作初始化变量。

举个例子,假设您想微调一个ssd_mobilenet_v1_custom_data模型,并且在设置fine_tune_checkpoint_type: detection时下载了检查点ssd_mobilenet_v1_coco,那么检查点文件中也可用的图形中的所有变量都将被恢复,而--盒子预测器(最后一层)的权重也将恢复为。但是,如果设置fine_tune_checkpoint_type: classification,则只恢复mobilenet层的权重。但是,如果使用不同的模型检查点,比如faster_rcnn_resnet_xxx,那么由于检查点中的变量不可用,您将看到输出日志表示Variable XXX is not available in checkpoint警告,因此它们不会恢复。

步骤2,更新权重

现在您已经恢复了所有的权重,并且希望在您自己的数据集中继续进行训练(微调),通常这应该就足够了。

但是,如果您想尝试一些东西,并且希望在培训期间冻结一些层,那么您可以通过设置freeze_variables来自定义培训。假设您希望冻结移动集的所有权重,并且只更新框预测器的权重,则可以设置freeze_variables: [feature_extractor],以便所有在其名称中包含feature_extractor的变量都不会被更新。有关详细信息,请参阅我所写的另一个答案

因此,要对自定义数据集上的模型进行微调,应准备一个自定义配置文件。您可以从样例配置文件开始,然后修改一些字段以满足您的需要。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56012092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档