基于python的opencv神经网络实现人脸检测和性别分类

项目代码:https://download.csdn.net/download/qq_38735017/87425701

背景介绍

  1. 影像分析(video):一个影像分析模块,它包括动作判断,背景弱化和目标跟踪算法。

  1. 3D 校准(calib3d):基于多视图的几何算法,平面和立体摄像机校准,对象姿势判断, 立体匹配算法,和 3D 元素的重建。

  1. 平面特征(features2d):突出的特征判断,特征描述和对特征描述的对比。

  1. 对象侦查(objdetect):目标和预定义类别实例化的侦查(例如:脸、眼睛、杯子、 人、汽车等等)。

  1. highgui:一个容易使用的用户功能界面。

  1. 视频输入输出(videoio):一个容易使用的视频采集和视频解码器。

  1. GPU:来自不同 OpenCV 模块的 GPU 加速算法。

  1. 一些其他的辅助模块,比如 FLANN 和谷歌的测试封装,Python 绑定和其他。

3.安装 OpenCV


我们利用 python 里面已有的库来安装 OpenCV。Python 是一种计算机程序设计语言。是一 种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更 新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

我们只需要通过 pip 或者 anaconda 安装 OpenCV 包就可以通过导入包并使用。

4.BP 神经网络算法介绍和实践


BP 神经网络通常是指基于误差反向传播算法( Back Propagation, 简称 BP 算法)的多层 前向神经网络 ( Multi-laye Feed-forward Neural Networks, MFNN),它最初是由 Paul Werboss 在 1974 年提 出, 但未在传播,直到 20 世纪 80 年代中期 Rumelhart、Hinton 和 Williams, David Parker 和 Yann Le Cun 重新发现了 BP 算法,同时因此算法被包括在《并行 分布处理》(Parallel Distributed Processing),此算法才广为人知。目前 BP 算法已成为应 用最广泛的神经网络学习算法,据统计有近 90% 的神经网络应用是基于 BP 算法的。BP 网络的神 经元采用的传递函数通常是 Sigmoid 型可微函数,所以可以实现输入和输出间的任意非线性映 射,这使得它在诸如信号处理、计算机网络、过程控制、语音识别、函数逼近、模式识别及数 据压缩等领域均取得了成功的应用。

4.1 BP 神经网络结构

BP 网络的基本结构如图所示,其输入层节点数为,输入变量为()( = 1,2, . . . , ),隐层 节点数为,输入层节点与隐层节点间的连接权值为( = 1,2, . . . , ; = 1,2. . . , ),隐层节点的 阈值为 ( = 1,2, . . , ),隐节点输出为 ();输出层节点数为,隐层节点与输出层节点间的 连接权值为( = 1,2, . . . , ; = 1,2, . . . , ),输出层节点的阈值为( = 1,2, . . . , ),输出层 节点输出为()。每一个神经元用一个节点表示,网络由输入层、隐层和输出层节点组成。隐层可以是如图所示的一层,也可以是多层,前层到后层的节点通过权联结。隐节点一般采用 Sigmoid 型函数,输入和输出节点可以采用 Sigmoid 型函数或者线性函数。由于采用的是 BP 算法,所以常称为 BP 神经网络。

4.2 BP 算法原理

BP 算法由正向传播和反向传播两部分组成。在正向传播过程中,输入信息从输入层经隐层 单元处理后,传至输出层,每一层神经元的状态只影响下一层神经元的状态。如果输出层得不 到期望的输出,就转为反向传播,即:把误差信号沿连接路径返回,并通过修改各层神经元之 间的连接权值,使误差信号最小。

由于多输入-多输出的网络可以转化为多输入-单输出的情况,所以这里采用的是多输入-单输出的神经模型。假设网络由层,而第层仅含输出节点,第一层为输入节点。另外,假设有个标准样本对 undefined,对网络的第层的输出为()。而且,隐层节点和输出层节点的作用函数为 SIgmoid 行函数,即

它反映了神经元的饱和特性,在 0 和 1 之间取值。上式中,Q 为表示神经元非线性的参数, 称增益型(Gain),也称调节参数。Q 值越大,S 型曲线越陡峭;反之,Q 值越小,S 型曲线越平 坦;一般取 Q = 1。

假设对某一输入(),网络输出为(),节点的输出为,节点的输入为

节点的输出为:= (ne)

并将误差函数定义为

其中为网络目标输出。

下面分两种情况来讨论:

由以上两式可以得到:

又由于

根据前面的推导过程,具体的 BP 算法步骤可概括如下:

根据前面的推导过程,具体的 BP 算法步骤可概括如下: 第一步,选取初始权值、阈值。 第二步,重复下述过程直至满足性能要求为止:

  1. 对于学习样本=1 到

1)计算每层各节点的,et 和的值(正向过程); 2 ) 对各层从层到第二层,对每层各节点,由式(4.5)和(4.8)反向计算(反向过程)

  1. 修正权值

4.3 BP 算法收敛性

BP 算法是最小均方误差的近似最快下降算法,其性能曲面可能有多个局部极小点而且在参 数空间的不同区域曲率也是变化的。依照 BP 网络的性能曲面,设置 BP 算法的初始参数时需注 意, 首先不能把初始参数设置为 0。这是由于对性能曲面来说,参数空间的原点趋向鞍点。其 次,不能把初始参数设置过大。这是由于在远离优化点的位置,性能曲面将变得十分平坦。典 型情况下,可以选择一些小的随机值作为初始权值和偏置值。这样可以在不离开性能曲面平坦 区域的同时避开可能的鞍点。也可用 S 型传递函数的形状和输入变量的范围决定权值的大小, 然后用偏置值将 S 型函数的形状移到操作区域的中央国)。通过调整参数,BP 算法最终收敛到 最优化的解,但收敛的速度很慢。如果提高学习速度,算法将通过初始的平坦曲面而快速收 敛,即可以在平坦曲面时增加学习速度,在斜率增加时减少学习。另外,也可采用平滑轨迹, 即当算法开始发散时,用平均改变参数的方法过滤轨迹可以提高收敛性。

5.结果展示


在此,我们是基于 python 语言。学习了 200 张男生照片和 200 张女生照片。运用了三层神 经网络,一个输入层,一个隐藏层和一个输出层。下面是最终结果。

图片 1. 视频识别人脸

图片 2. 视频识别性别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚爱吃大蒜的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值