基于反向传播神经网络的人脸识别
Face Recognition Using Backpropagation Neural Network?
我对图像处理非常陌生,我的第一个任务是制作一个可以识别人脸和名字的工作程序。到目前为止,我成功地制作了一个项目来检测,裁剪检测到的图像,使其sobel并将其转换为float数组。但是,我很困惑如何实现反向传播MLP来学习图像,以便它可以识别检测到的人脸的正确名称。
这是一个伟大的荣誉,所有专家在stackoverflow给我一些例子如何实现图像数组学习与反向传播。
是标准的机器学习算法。您有许多浮点数数组(ML中的实例或统计学术语中的观察值)和相应的名称(标签、类标记),每个数组一个。这对于大多数ML算法来说已经足够了。特别是在人工神经网络中,数组的元素(即特征)是网络的输入,标签(名称)是其输出。
如果你正在寻找反向传播的理论描述,可以看看斯坦福大学的机器学习课程(人工神经网络部分)。如果您需要现成的实现,请阅读这个问题。
你没有指定数组的元素是什么。如果您只使用原始图像的像素,这应该可以工作,但不是很好。如果你需要生产级系统(尽管仍然使用人工神经网络),试着提取更多的高级特征(例如Haar-like features, OpenCV自己使用)。
您是否尝试过将您的特征向量写入arff文件并将它们提供给weka,只是为了看看您的方法是否可能有效?Weka集成了很多分类器,包括MLP。根据我目前的理解,我怀疑您选择的特征和分类器不起作用。
对于你最初的问题:你有没有尝试过自己实现一个神经网络?如果有,你在哪里卡住了?注意,这里不是向观众请求完整的工作实现的地方。对一般性问题给出一般性的回答:通常在MLP中有节点。特别是输入节点、输出节点和隐藏节点。这些节点严格按层组织。下面是输入层,上面是输出层,中间是隐藏层。节点以简单的前馈方式连接(只允许输出连接到下一层)。然后将每个float
连接到单个输入节点,并将特征向量馈送到网络。对于反向传播,需要提供为输出节点指定的错误信号。因此,如果您有n
名称来区分,您可以使用n
输出节点(即每个名称一个)。例如,让它们在匹配的情况下返回1
,否则返回0
。您可以很好地使用一个输出节点,让它为名称返回n
不同的值。也许最好使用n
完全不同的感知器,即每个名称一个,以避免一些副作用(灾难性干扰)。
注意,每个节点的输出是一个数字,而不是一个名称。因此,您需要使用某种阈值来获得数字-名称关系。还要注意,你需要大量的训练数据来训练一个大型网络(即服从维度的诅咒)。知道float
数组的大小会很有趣。实际上,对于一个复杂的决策,您可能需要更多的隐藏节点甚至隐藏层。进一步注意,您可能需要进行大量评估(即交叉验证)以找到最佳配置(层数,每层节点数),或者甚至找到任何工作配置。
- 我的神经网络不起作用 [XOR 问题]
- 从udp接收帧对于人脸识别来说太慢
- 神经网络不学习.卡在50%
- OpenCV 3 中的神经网络权重
- 用 Python 训练神经网络并在 C++ 中部署
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- 每次b/c程序无法加载级联时,使用harr级联的人脸识别都会失败
- 我不确定如何引用此神经网络训练方法中的权重
- 如何在不同的平台/技术中使用经过训练的神经网络?
- 为什么我的神经网络停滞在一定的成本附近?
- 具有静态 std::array 的神经网络比使用动态 C 数组的神经网络慢
- 为什么小型和大型加载的神经网络占用相同数量的 RAM?
- 一维阵列的运动检测(神经网络或其他选项?
- 神经网络和图像分类
- 人脸识别:每个人的所有图像都必须相同吗?
- 神经网络不学习-MNIST数据-手写识别
- 从XOR神经网络到图像识别
- 使用Hopfield神经网络读取WAV文件的数据部分以进行语音识别
- 数字识别,神经网络工作不正常
- 基于反向传播神经网络的人脸识别