0

我是计算机视觉和图像识别的新手。对于我的第一个简历项目,我正在开发一种检测图像中苹果(水果)的工具。从图像中提取前景物体以运行卷积神经网络

我到目前为止有: 我开发了一个卷积神经网络中使用Python tensorflow决定是否东西是苹果还是没有。缺点是我的CNN只适用于苹果是图像中唯一对象的图像。我的训练数据集看起来像:enter image description here enter image description here

我想实现:我想能够检测苹果的图像,并把边界周围。然而,这些图像将充满其他物体的像野餐的这个形象:enter image description here

可能的方法:

  1. 推拉窗:我就拉下打破我的照片变成更小的图像。我会从左上角的大窗口开始,然后向右移动一个步长。当我到达图像的右边界时,我会向下移动一定数量的像素并重复。这实际上是一个滑动窗口,这些较小的图像中的每一个都将通过我的CNN运行。 enter image description here 在找到苹果之前,窗口大小会变得越来越小。这样做的缺点是,我将通过CNN运行数百张较小的图像,这需要很长时间才能检测到苹果。另外,如果图像中没有苹果,很多时间都会浪费掉。

  2. 提取前景对象:另一种方法是从图像中提取所有前景元素(使用OpenCV也许?)并通过我的CNN运行这些对象。 enter image description here
    与滑动窗口方法相比,我将通过CNN与数百个图像运行一些图像。

这些是我能想到的两种方法,但我想知道在速度方面是否有更好的方法。滑动窗口方法最终可以工作,但获取苹果的边框窗口需要很长时间。

如果有人能给我一些指导(也许我完全错误的轨道?),一些阅读材料的链接或一些提取前景元素的代码示例,我将非常感激。谢谢!

回答

2

更好的方法是使用Single Shot Multibox detector (SSD)"You Only Look Once" (YOLO)。在设计这种方法之前,通常按照您在问题中提出的方式来检测对象。

有一个python执行的SSD是here。 OpenCV用于YOLO实现。你可以重新训练苹果的网络,以防当前版本检测不到,或者你的项目需要你从头开始构建系统。