【问题标题】:Tensorflow trained model speedTensorFlow 训练模型速度
【发布时间】:2023-03-15 01:58:01
【问题描述】:

我是 Tensorflow 新手,我正在尝试训练一个用于对象检测的 1 类模型。特别是我试图识别如下箭头:

我需要非常快速的识别,所以我开始想知道预训练的模型是否可以包含这种形状。 不幸的是没有找到任何类似的东西,因此我开始使用faster_rcnn_inception_v2_coco_2018_01_28作为模型自己训练箭头。

我正在使用他的管道配置,我也在使用他的fine_tune_checkpoint,考虑到我必须训练一个完全不同的对象,这是对的吗?

结果是训练的准确性非常好,但速度非常慢。我需要提高帧率,但我还不明白“训练损失”是否越少,“物体识别速度”是否越多。

关于如何加快检测速度的任何建议?

【问题讨论】:

  • 我想到的第一件事:Faster-RCNN 模型对于识别普通箭头的任务来说可能是一种过度杀伤力。也许尝试为实时使用而制作的对象检测模型(如 YOLO 或 SSD 'Single Shot Detector')可能是另一种选择。如果您不局限于使用 NN,您还可以考虑使用更简单的方法,例如 OpenCV 的 Haar Cascade Classifier,它应该足以识别简单的形状。
  • 谢谢,您认为 OpenCV HCC 会检测到他不同位置的箭头吗?最后的需要是跟随机器人进入太空。我将箭头贴在机器人的头部,并在 3m 高 45° 的位置放置相机,我需要识别箭头并跟踪机器人的运动。对于该任务,您有更好的解决方案吗?
  • 所以您不仅遇到了检测问题,而且还想检测旋转。 (不确定 Faster-RCNN 是否能够做到这一点,HCC 都不是)跟踪机器人的位置并根据其相对运动估计方向可能就足够了。
  • 易于识别的形状是 AprilTags [april.eecs.umich.edu/software/apriltag] 或类似的代码。它们易于识别,并且可以包含方向信息。此外,还有许多语言的强大库。如果您想自己设计形状,使用两种颜色进行方向检测可能会有所帮助:一端带有红点的黄线可能比单色箭头更容易。
  • 抱歉,我从未使用过 AprilTags,也不知道它的检测细节。这只是我脑海中浮现的一个想法。但我想有一些关于检测率的研究等待通过谷歌搜索找到:) 我想你的图像中代表 aprilTag 的一位的像素数是至关重要的。

标签: python opencv tensorflow deep-learning training-data


【解决方案1】:

我正在使用他的管道配置,并且我正在使用他的fine_tune_checkpoint 同样,考虑到我必须完全训练 不同的对象?

是的!每次你想改变深度神经网络的输出时,你都应该使用一个预训练的模型。从头开始训练模型可能需要数周时间,而且您永远无法自己生成足够的数据。采用预训练模型并对其进行微调是一种方法。

我还不明白如果 “训练损失”越少,“物体识别”越多 速度”,或者没有。

没有。训练损失只是告诉你你的模型在训练集上的表现有多好。

您遇到的问题是经典的速度与准确性权衡。我鼓励您查看this table 并找到一个对您来说足够快(即最低运行时间)但具有不错准确性的模型。我会先在这里查看SSD

【讨论】:

  • 谢谢,我现在正在尝试应该更快的 ssdlite_mobilenet_v2_coco_2018_05_09。我在 pipeline.config 中编辑了“num_classes”值,将其设置为 1(因为我只需要识别箭头)这也是正确的吗?
  • 你还需要一些反面例子。如果您创建了数据集,则需要包含一些不是箭头的图像。所以基本上你需要有 2 个类:箭头而不是箭头。
  • 现在我有 1 个类和 ssdlite mobilnet v2:损失 = 2.5471618,步数 = 666 ...这么高的损失正常吗?
  • 你看到的数字,嗯,并不意味着很多。重要的是训练损失正在减少(以及验证损失!)。
【解决方案2】:

结果是训练的准确性非常好,但速度非常慢。

您的算法执行多少 FPS? 由于您已经准备好了数据集,我建议您使用 Tiny-Yolo,它在 COCO 数据集上执行 244 FPS https://pjreddie.com/darknet/yolo/

如果你使用这个repository,为 Tiny-Yolo 准备训练数据集非常容易

我还不明白,如果“训练损失”越少,“物体识别速度”就越大

训练失败与速度无关。

【讨论】: