Tensorflow 如何将图层指定为";“微调”;在TF对象检测API中?

Tensorflow 如何将图层指定为";“微调”;在TF对象检测API中?,tensorflow,object-detection-api,Tensorflow,Object Detection Api,我使用ssd\u mobilenet\u v1\u pets.config配置遵循TF对象检测API教程页面上的步骤 这是非常酷的,我能够训练一个自定义探测器使用我自己的图像。然而,由于整个培训过程在我看来是一个“黑匣子”,我想知道如何配置要微调的层,就像如何使用tensorflow/keras中的初始模型配置要重新培训的层一样 我认为,如果我有10000张图像而不是100张图像,那么需要微调的层可能(应该)会有所不同。要微调特定层,必须冻结其余层。如果您知道要冻结的模型层的名称,则可以将其添加

我使用ssd\u mobilenet\u v1\u pets.config配置遵循TF对象检测API教程页面上的步骤

这是非常酷的,我能够训练一个自定义探测器使用我自己的图像。然而,由于整个培训过程在我看来是一个“黑匣子”,我想知道如何配置要微调的层,就像如何使用tensorflow/keras中的初始模型配置要重新培训的层一样


我认为,如果我有10000张图像而不是100张图像,那么需要微调的层可能(应该)会有所不同。

要微调特定层,必须冻结其余层。如果您知道要冻结的模型层的名称,则可以将其添加到配置文件的train部分的
freeze_variables
(),并在“.FeatureExtractor”前面添加“*”

例如,这:

train_config: {
...
freeze_variables: ".*FeatureExtractor."
}

将冻结更快R-CNN架构的
功能提取器的所有层。

非常感谢!如果我打印变量名,它们看起来像:“FeatureExtractor/InceptionV2/Mixed_4c/Branch_1/Conv2d_0a_1x1/BatchNorm/beta”。那为什么在“FeatureExtractor”之前的明星?嗨。很久以前,但我想我这么做只是为了确定,我冻结了每个名字中有“FeatureExtractor”部分的变量。如果在此之前没有任何带有前缀的变量,则可以省略它。谢谢。我这样问是因为我想冻结框预测器,而不是特性提取器。box预测器变量看起来像“BoxPredictor_4/ClassPredictor/weights”或“BoxPredictor_0/BoxEncodingPredictor/biases”。所以我用了“*BoxPredictor*”,但它似乎不起作用。你说“它似乎不起作用”是什么意思?变量的命名是否不同,或者结果是否与您预期的不同。通过短期思考,我真的无法想象这样一种场景:冻结框预测器是一个好主意,但通过“似乎不起作用”来训练特征提取器,我的意思是所有层似乎都经过了训练(与排除框预测器相反)。你是对的,我这样做的唯一原因是为了证实一个假设,即训练分类器可以大大提高网络的性能,而训练特征提取器却没有这么多。所以我只是想比较一下