如何使用 Tensorflow 的对象检测 API 在训练中修改冻结层?

How to modify freezed layers in training using Tensorflow's Object Detection API?

我在训练中使用Tensorflow's Object Detection API

在哪个文件中,定义了冻结层以在训练中微调模型。 我需要在微调中尝试更改冻结层。

例如,如果我使用Resnet50 configuration,我可以在哪里更改冻结图层?

你当然可以做到。

通过读取proto文件进行训练,有一个名为freeze_variables的字段,这应该是一个列表,其中包含您要冻结的所有变量,例如在训练期间将它们排除在外。

假设你想冻结第一个块的第一个单元中第一个瓶颈的权重,你可以通过添加

来实现
freeze_variables: ["resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/weights"]

因此您的配置文件如下所示:

train_config: {
  batch_size: 1
  freeze_variables: ["resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/weights"]
  ...

您可以通过检查张量流图来验证权重是否确实已冻结。

如图所示,权重不再有train操作

通过为freeze_variables选择特定的模式,您可以非常灵活地冻结变量(您可以从张量流图中获取层名称)。

顺便说一句,here 是实际的过滤操作。