【问题标题】: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)。这至少会减少输出层的权重,并且可能已经加快了推理速度