6

我正在尝试使用 Faster-RCNN 架构加载检查点并填充模型权重(Faster R-CNN ResNet50 V1 640x640准确地说,从这里开始。我正在尝试为该网络加载权重,类似于在RetinaNet 的示例笔记本中完成的方式,他们请执行下列操作:

fake_box_predictor = tf.compat.v2.train.Checkpoint(
    _base_tower_layers_for_heads=detection_model._box_predictor._base_tower_layers_for_heads,
    _box_prediction_head=detection_model._box_predictor._box_prediction_head,
)

fake_model = tf.compat.v2.train.Checkpoint(
          _feature_extractor=detection_model._feature_extractor,
          _box_predictor=fake_box_predictor
)

ckpt = tf.compat.v2.train.Checkpoint(model=fake_model)
ckpt.restore(checkpoint_path).expect_partial()

我正在尝试为我想要使用的 Faster-RCNN 网络提供类似的检查点加载机制,但是_base_tower_layers_for_heads_box_prediction_head

我也找不到关于Checkpoint为我的特定用例填充模型的哪些部分的文档。非常感谢有关如何解决此问题的任何帮助!

4

1 回答 1

0

正如您所说,您遇到的主要问题是您没有要对其进行迁移学习的层的层张量。这是 Zoo 中 Faster R-CNN ResNet50 V1 640x640 副本的原始实现的一部分。他们没有命名图层,或者他们确实命名了但没有公布名称(或代码)。要解决这个问题,您需要找出要保留哪些层以及要重新学习哪些层。您可以使用 ( ref )打印出网络中的所有层:

[n.name for n in tf.get_default_graph().as_graph_def().node]

层的名称可以手动添加,但 tf 为每个节点保留默认名称。这个列表可能很长而且很累,但是你需要找到张量来开始你的迁移学习。因此,您需要按照列表并尝试了解您想要冻结哪些层以及您想要继续学习过程。冻结层(ref):

if layer.name == 'layer_name':
    layer.trainable = False
于 2021-11-01T08:00:12.417 回答