如何在张量流中使用预训练对象检测?

How to use a pre-trained object detection in tensorflow?

如何在我的 tensorflow 项目中使用预训练网络的权重? 我知道一些关于这个的理论信息,但没有关于在 tensorflow 中编码的信息。

正如@Matias Valdenegro 在评论中指出的那样,您的第一个问题没有意义。然而,对于你的第二个问题,有多种方法可以做到这一点。您要搜索的术语是迁移学习 (TL)。 TL 意味着将 "knowledge"(基本上它只是权重)从预训练模型转移到您的模型中。现在有几种类型的TL。

1) 您将整个权重从预训练模型转移到您的模型中,并将其用作训练网络的起点。

  • 这是在您现在有额外的数据来训练您的模型但不想重新开始训练的情况下完成的。因此,您只需加载之前模型的权重并恢复训练。

2) 您仅将预训练模型中的部分权重转移到新模型中。

  • 这是在这样的情况下完成的:您有一个模型经过训练可以 class 在 5 个 class 对象之间进行验证。现在,你想要add/remove一个class。如果您要添加的新 class 与现有 class(es) 具有某些相似的功能,则您不必从一开始就重新训练整个网络。因此,您构建了另一个模型,其架构与您之前的模型完全相同,但全连接层现在具有不同的输出大小。在这种情况下,您需要从之前的模型中加载卷积层的权重并冻结它们,同时只重新训练全连接层。

要在 Tensorflow 中执行这些操作,

1) 第一种类型的 TL 可以通过创建一个与之前模型具有相同架构的模型并使用 tf.train.Saver( ).restore()模块并继续训练。

2) 第二种类型的 TL 可以通过为要保留权重 的 部分创建一个具有相同架构的模型来执行,然后指定名称您要从之前的预训练权重中加载的权重。您可以使用参数 "trainable=False" 来防止 Tensorflow 更新它们。

希望对您有所帮助。