如何使用神经网络进行人脸检测?

时间:2015-12-25 08:25:37

标签: machine-learning computer-vision neural-network theano

我正在尝试使用在theano中编写的神经网络构建人脸检测系统。关于我必须计算交叉熵的预期输出,我有点困惑。我不想知道脸是否存在,我需要突出图像中的脸部(找到脸部的位置)。图像的大小是不变的。但是图像中面部的大小不是。我该怎么做?此外,我的网络摄像头目前捕获480x640图像。在输入层中创建那么多的神经元会对系统造成很大影响,如何在不丢失任何特征的情况下压缩图像?

2 个答案:

答案 0 :(得分:3)

有许多可能的解决方案,其中一个最简单的方法是执行滑动窗口搜索并询问网络"图像的这一部分是否有面孔?" - 这是相当"标准"做法。特别是,你按层次结构进行 - 将图像分成9个重叠的正方形(我假设图像是正方形)并在每个正方形中询问"其中是否有面孔?"通过将其重新调整为您的网络输入。接下来你再次分开一个回答"是"进入9个方格并重复。这样你就可以快速找到面子。另一种方法是执行监督分割,您可以尝试预测图像的哪一部分(像素/超像素)属于面部,哪些部分不属于面部。这不是详尽的清单,但应该让您了解如何继续。

  

如何在不丢失任何功能的情况下压缩图像?

你没有。这不可能。缩小时会丢失一些数据(无损压缩存在,但会破坏结构,从而使分类极其困难)。

答案 1 :(得分:-1)

您应首先根据通过网络摄像头收到的图像创建训练集。训练集必须包含面部和非面部图像(例如苹果,汽车和......)。为了更好地概括,您可以使用一些现成的数据集。在图像上训练网络后,您可以使用网络对看不见的图像进行分类。

如果您的目标是仅检测图像是否包含面部,则此方法适用。但是,如果您想识别面孔(例如,这张脸属于约翰而不是其他人),您需要使用您要识别的人的图像来训练网络。此类网络中的类数相当于不同人数。