【问题标题】:Improving speed and accuracy of a model by reducing classes通过减少类别来提高模型的速度和准确性
【发布时间】:2020-09-08 08:52:06
【问题描述】:

我正在尝试使用来自 Tensorflow Model Zoo 的不同预训练模型来解决实时对象检测问题。 我在 CPU 上运行推理,性能(fps、mAP)低于标准。虽然我理解为什么模型会以准确性换取速度,反之亦然,但我想知道模型必须检测的类数量是否与其性能呈线性关系。 大多数预训练模型可以检测 80 多个对象,我只需要这些类的一个子集来解决我的问题。基本上,如果我在检测 80 个对象的模型上进行迁移学习,比如说只有 5 个对象,模型能运行得更快吗?

【问题讨论】:

    标签: tensorflow machine-learning computer-vision


    【解决方案1】:

    理论上,是的。 在实践中,而不是。 模型的速度(与其他模型一起)由其参数数量决定。当您只需要预测 5 个而不是 80 个类时,理论上您需要的参数更少。

    在实践中,模型在其所有参数中学习了类的属性。您需要决定要使用哪些权重,哪些不使用。当然,这可以通过检测哪个权重对最终预测产生影响来以某种方式实现。 例如,您可以编写一个自定义损失函数,它只会为某些类别的预测创建损失,但是您需要以这样一种方式调整梯度,将仅用于其他预测的权重设置为零。

    在您这样做之前,您宁愿只使用较小的模型或自己创建一个模型。

    更新

    你能做的就是至少改进一点。 Softmax 是一种计算密集型激活函数,因此减少最后一层的权重可能已经提高了一点速度。所以使用模型的所有层,除了最后一层,并用一个有 5 个神经元的 softmax 层替换它(每个类 1)。这至少会减少输出层的权重,并且可能已经加快了推理速度

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-08
      • 2019-10-21
      • 1970-01-01
      • 2011-03-15
      • 2015-10-07
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多