Python 在预训练的tensorflow模型中是否可以删除类别?

Python 在预训练的tensorflow模型中是否可以删除类别?,python,opencv,tensorflow,Python,Opencv,Tensorflow,我目前正在为我的人体检测应用程序使用Tensorflow对象检测API。 我尝试在API中进行过滤,但我仍然无法与之抗衡,因为它很慢。因此,我想知道是否可以删除模型本身中的其他类别,以使其更快 如果这是不可能的,你能给我其他建议,使API更快,因为我将使用两个摄像头。提前谢谢,请原谅我的英语:)您的问题涉及到使用神经网络预训练模型的几个主题 理论方法 通常,您可以通过删除softmax层中相应的神经元来中和类别,并仅使用矩阵的相关行计算新的softmax层。 这种方法肯定会起作用(也许这就是你所

我目前正在为我的人体检测应用程序使用Tensorflow对象检测API。 我尝试在API中进行过滤,但我仍然无法与之抗衡,因为它很慢。因此,我想知道是否可以删除模型本身中的其他类别,以使其更快


如果这是不可能的,你能给我其他建议,使API更快,因为我将使用两个摄像头。提前谢谢,请原谅我的英语:)

您的问题涉及到使用神经网络预训练模型的几个主题

理论方法

  • 通常,您可以通过删除softmax层中相应的神经元来中和类别,并仅使用矩阵的相关行计算新的softmax层。
    这种方法肯定会起作用(也许这就是你所说的过滤),但不会大大加快网络计算时间,因为大多数触发器(乘法和加法)都会保留下来

  • 与决策树类似,修剪是可能的,但可能会降低性能。我将解释修剪的含义,但请注意,您的类别的准确性可能会保持不变,因为您不仅仅是修剪,您预测的类别也会减少

  • 把学到的东西转移到你的问题上。参见斯坦福大学的计算机视觉课程。在我所看到的大多数情况下,保持卷积层不变,并准备一个中等大小的对象数据集,这样做效果很好

  • 如果你要求的话,我会添加更多的理论方法,但以上是我所知道的最常见和最准确的方法

    实用方法

  • 确保您是您的tensorflow模型,而不仅仅是使用推理python代码。这可以显著提高性能

  • 您可以导出网络参数,并在更快的框架(如或)中加载它们。这些框架在C++/CSharp中工作,可以更快地进行推理。确保正确加载权重,某些框架在保存/加载时使用不同的张量维度顺序(类似于小/大端的问题)

  • 如果应用程序对多个图像执行推断,则可以通过多个GPU分发计算**这也可以在tensorflow中完成,请参阅

  • 修剪神经网络

    也许这是将大型网络适应于简单任务的最有趣的方法。你可以看初学者指南

    修剪意味着从网络中删除参数,特别是决策树/神经网络(resp)中的整个节点/神经元。要在对象检测中做到这一点,您可以按以下方式(最简单的方式)进行:

  • 从完全连接的层中随机剪除神经元
  • 以低学习率再训练一个历元(或多个历元),仅针对您想要检测的对象
  • (可选)执行上述多次验证,然后选择最佳网络
  • 上面的过程是最基本的,但是你可以找到大量的文章来建议算法。例如 和

    祝你工作顺利