详细内容或原文请订阅后点击阅览
对象检测中的概念
如上一篇文章所示,命名和定位图像中的单个对象是一项可以直接完成的任务。然而,这与一般的物体检测不同——一次命名和定位多个物体,没有关于应该检测多少个物体的先验信息。在这篇文章中,我们解释了编写一个基本的单次物体检测器所涉及的步骤:与 SSD(单次多框检测器)不同,但经过简化,设计不是为了获得最佳性能,而是为了易于理解。
来源:RStudio AI博客几周前,我们介绍了在图像中命名和定位对象的任务。至关重要的是,我们仅限于检测图像中的单个对象。阅读那篇文章时,您可能会想“我们不能将这种方法扩展到多个对象吗?”简短的回答是,不是以一种直接的方式。我们很快就会看到更长的答案。
在图像中命名和定位对象在这篇文章中,我们想详细介绍一种可行的方法,解释(和编码)所涉及的步骤。但是,我们不会得到一个可用于生产的模型。因此,如果您继续阅读,您将无法获得可以导出并放在智能手机上以供在野外使用的模型。但是,您应该已经了解了这一点 - 对象检测 - 甚至如何实现。毕竟,它看起来像魔术!
以下代码主要基于 fast.ai 对 SSD 的实现。虽然这不是我们第一次“移植”fast.ai 模型,但在这种情况下,我们发现 PyTorch 和 TensorFlow 之间的执行模型差异特别显著,我们将在讨论中简要介绍这一点。
fast.ai 的 SSD 实现 fast.ai那么为什么对象检测很难?
正如我们所见,我们可以按如下方式对单个对象进行分类和检测。 我们利用强大的特征提取器(例如 Resnet 50),添加一些卷积层进行专业化,然后连接两个输出:一个表示类,另一个有四个坐标指定边界框。
Resnet 50现在,要检测多个对象,我们不能只有几个类输出和几个边界框吗? 不幸的是我们不能。假设图片中有两只可爱的猫,我们只有两个边界框检测器。它们各自如何知道要检测哪只猫?实际发生的情况是,它们都试图指定两只猫,所以我们最终在中间得到两个边界框 - 那里没有猫。这有点像对双峰分布进行平均。
滑动窗口 Overfeat (Sermanet 等人,2013 年) Sermanet 等人,2013 年 区域提议 b c (