【问题标题】:How to use a pre-trained object detection in tensorflow?如何在张量流中使用预训练的对象检测?
【发布时间】:2020-02-14 20:31:34
【问题描述】:

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

【问题讨论】:

  • 这是一个非常广泛的问题。对于第二部分,搜索“迁移学习”。
  • 物体检测性能不是通过准确度而是通过mAP来衡量的,所以你的第一个问题没有意义。

标签: python-3.x tensorflow deep-learning object-detection


【解决方案1】:

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

1) 您将整个权重从预训练模型转移到您的模型中,并以此为起点来训练您的网络。

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

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

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

要在 Tensorflow 中执行这些操作,

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

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多