项目代码:https://download.csdn.net/download/qq_38735017/87425701
背景介绍
- 影像分析(video):一个影像分析模块,它包括动作判断,背景弱化和目标跟踪算法。
- 3D 校准(calib3d):基于多视图的几何算法,平面和立体摄像机校准,对象姿势判断, 立体匹配算法,和 3D 元素的重建。
- 平面特征(features2d):突出的特征判断,特征描述和对特征描述的对比。
- 对象侦查(objdetect):目标和预定义类别实例化的侦查(例如:脸、眼睛、杯子、 人、汽车等等)。
- highgui:一个容易使用的用户功能界面。
- 视频输入输出(videoio):一个容易使用的视频采集和视频解码器。
- GPU:来自不同 OpenCV 模块的 GPU 加速算法。
- 一些其他的辅助模块,比如 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)反向计算(反向过程)
2.修正权值
4.3 BP 算法收敛性
BP 算法是最小均方误差的近似最快下降算法,其性能曲面可能有多个局部极小点而且在参 数空间的不同区域曲率也是变化的。依照 BP 网络的性能曲面,设置 BP 算法的初始参数时需注 意, 首先不能把初始参数设置为 0。这是由于对性能曲面来说,参数空间的原点趋向鞍点。其 次,不能把初始参数设置过大。这是由于在远离优化点的位置,性能曲面将变得十分平坦。典 型情况下,可以选择一些小的随机值作为初始权值和偏置值。这样可以在不离开性能曲面平坦 区域的同时避开可能的鞍点。也可用 S 型传递函数的形状和输入变量的范围决定权值的大小, 然后用偏置值将 S 型函数的形状移到操作区域的中央国)。通过调整参数,BP 算法最终收敛到 最优化的解,但收敛的速度很慢。如果提高学习速度,算法将通过初始的平坦曲面而快速收 敛,即可以在平坦曲面时增加学习速度,在斜率增加时减少学习。另外,也可采用平滑轨迹, 即当算法开始发散时,用平均改变参数的方法过滤轨迹可以提高收敛性。
5.结果展示
在此,我们是基于 python 语言。学习了 200 张男生照片和 200 张女生照片。运用了三层神 经网络,一个输入层,一个隐藏层和一个输出层。下面是最终结果。
图片 1. 视频识别人脸
图片 2. 视频识别性别