基于反向传播神经网络的人脸识别

Face Recognition Using Backpropagation Neural Network?

本文关键字:人脸识别 神经网络 传播 于反      更新时间:2023-10-16

我对图像处理非常陌生,我的第一个任务是制作一个可以识别人脸和名字的工作程序。到目前为止,我成功地制作了一个项目来检测,裁剪检测到的图像,使其sobel并将其转换为float数组。但是,我很困惑如何实现反向传播MLP来学习图像,以便它可以识别检测到的人脸的正确名称。

这是一个伟大的荣誉,所有专家在stackoverflow给我一些例子如何实现图像数组学习与反向传播。

是标准的机器学习算法。您有许多浮点数数组(ML中的实例或统计学术语中的观察值)和相应的名称(标签、类标记),每个数组一个。这对于大多数ML算法来说已经足够了。特别是在人工神经网络中,数组的元素(即特征)是网络的输入,标签(名称)是其输出。

如果你正在寻找反向传播的理论描述,可以看看斯坦福大学的机器学习课程(人工神经网络部分)。如果您需要现成的实现,请阅读这个问题。

你没有指定数组的元素是什么。如果您只使用原始图像的像素,这应该可以工作,但不是很好。如果你需要生产级系统(尽管仍然使用人工神经网络),试着提取更多的高级特征(例如Haar-like features, OpenCV自己使用)。

您是否尝试过将您的特征向量写入arff文件并将它们提供给weka,只是为了看看您的方法是否可能有效?Weka集成了很多分类器,包括MLP。根据我目前的理解,我怀疑您选择的特征和分类器不起作用。

对于你最初的问题:你有没有尝试过自己实现一个神经网络?如果有,你在哪里卡住了?注意,这里不是向观众请求完整的工作实现的地方。

对一般性问题给出一般性的回答:通常在MLP中有节点。特别是输入节点、输出节点和隐藏节点。这些节点严格按层组织。下面是输入层,上面是输出层,中间是隐藏层。节点以简单的前馈方式连接(只允许输出连接到下一层)。然后将每个float连接到单个输入节点,并将特征向量馈送到网络。对于反向传播,需要提供为输出节点指定的错误信号。因此,如果您有n名称来区分,您可以使用n输出节点(即每个名称一个)。例如,让它们在匹配的情况下返回1,否则返回0。您可以很好地使用一个输出节点,让它为名称返回n不同的值。也许最好使用n完全不同的感知器,即每个名称一个,以避免一些副作用(灾难性干扰)。

注意,每个节点的输出是一个数字,而不是一个名称。因此,您需要使用某种阈值来获得数字-名称关系。还要注意,你需要大量的训练数据来训练一个大型网络(即服从维度的诅咒)。知道float数组的大小会很有趣。实际上,对于一个复杂的决策,您可能需要更多的隐藏节点甚至隐藏层。进一步注意,您可能需要进行大量评估(即交叉验证)以找到最佳配置(层数,每层节点数),或者甚至找到任何工作配置。

无论如何,祝你好运!