自定义对象检测实际上是如何工作的



我目前正在使用Tensorflow API测试自定义对象检测。但我似乎不太理解它背后的理论。例如,如果我下载一个MobileNet版本,并使用它在红苹果和绿苹果上进行训练。它会忘记所有已经被训练过的东西吗?如果是这样的话,为什么使用MobileNet比从头开始构建CNN更有利呢。

谢谢你的回答!

它会忘记所有已经训练过的东西吗?

是的,如果你用包含更少类的新数据库重新训练之前在大型数据库上训练的CNN,它将";忘记";旧阶级。然而,旧的预训练可以帮助学习新的课程,这是一种被称为"迁移学习;的";"微调";取决于确切的方法。

根据经验,从头开始创建新的网络架构通常不是一个好主意,因为更好的网络可能已经存在。如果:,您可能需要实现您的自定义体系结构

  • 您正在学习CNN和深度学习
  • 您有特定的需求,并且证明了其他体系结构不适合或性能不佳

通常,一个人采用现有的预先训练的网络,并使用迁移学习将其专门用于他们的特定任务。

如果你想学习,很多科学文献都可以在网上免费获得。您可以从Yolo系列和R-CNN开始,快速RCNN和快速RCNN用于检测网络。

对象检测背后的主要概念是,它将输入图像划分为N个补丁的网格,然后对于每个补丁,它生成一组具有不同纵横比的子补丁,比方说它生成M个矩形子补丁。总的来说,您需要对MxN图像进行分类。

一般来说,这个想法是分析每个补丁中的每个子补丁。将子补丁传递给模型中的分类器,根据模型训练,它会将其分类为包含绿苹果/红苹果/什么都没有。如果它被分类为红苹果,那么这个子补丁就是检测到的对象的边界框。

所以实际上,有两个部分你感兴趣:

  1. 生成尽可能多的子补丁,以覆盖图像的尽可能多部分(当然,子补丁越多,模型的速度就越慢(
  2. 分类器。分类器通常是一个已经存在的网络(MobileNeet、VGG、ResNet…(;主干;并且它将提取输入图像的特征。使用分类器,您可以选择对其进行"训练";从零开始";,因此,你的重量会根据你的具体问题进行调整,或者,你可以从其他已知问题中加载重量,并在你的问题中使用它们,这样你就不需要花时间训练它们了。在这种情况下,他们还将对分类器训练的对象进行分类

看看Mask RCNN的实现。我发现他们如何解释这个过程非常有趣。在这个体系结构中,您不仅会生成一个边界框,还会分割感兴趣的对象。

最新更新