Python中人脸图像特征提取方法(HOG、Dlib、CNN)简述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python中⼈脸图像特征提取⽅法(HOG、Dlib、CNN)简
述
⽬录
⼈脸图像特征提取⽅法
(⼀)HOG特征提取
(⼆)Dlib库
(三)卷积神经⽹络特征提取(CNN)
⼈脸图像特征提取⽅法
(⼀)HOG特征提取
1、HOG简介
Histogram of Oriented Gridients,缩写为HOG,是⽬前计算机视觉、模式识别领域很常⽤的⼀种描述图像局部纹理的特征。
它的主要思想是在⼀副图像中,局部⽬标的表象和形状能够被梯度或边缘的⽅向密度分布很好地描述。
其本质为:梯度的统计信息,⽽梯度主要存在于边缘的地⽅。
2、实现⽅法
⾸先将图像分成⼩的连通区域,这些连通区域被叫做细胞单元。
然后采集细胞单元中各像素点的梯度的或边缘的⽅向直⽅图。
最后把这些直⽅图组合起来,就可以构成特征描述符。
将这些局部直⽅图在图像的更⼤的范围内(叫做区间)进⾏对⽐度归⼀化,可以提⾼该算法的性能,所采⽤的⽅法是:先计算各直⽅图在这个区间中的密度,然后根据这个密度对区间中的各个细胞单元做归⼀化。
通过这个归⼀化后,能对光照变化和阴影获得更好的效果。
3、HOG特征提取优点
由于HOG是在图像的局部⽅格单元上操作,所以它对图像⼏何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更⼤的空间领域上。
在粗的空域抽样、精细的⽅向抽样以及较强的局部光学归⼀化等条件下,只要⾏⼈⼤体上能够保持直⽴的姿势,可以容许⾏⼈有⼀些细微的肢体动作,这些细微的动作可以被忽略⽽不影响检测效果。
HOG特征是特别适合于做图像中的⼈体检测的。
4、HOG特征提取步骤
(1)⾊彩和伽马归⼀化
为了减少光照因素的影响,⾸先需要将整个图像进⾏规范化(归⼀化)。
在图像的纹理强度中,局部的表层曝光贡献的⽐重较⼤,所以,这种压缩处理能够有效地降低图像局部的阴影和光照变化。
(2)计算图像梯度
计算图像横坐标和纵坐标⽅向的梯度,并据此计算每个像素位置的梯度⽅向值;求导操作不仅能够捕获轮廓,⼈影和⼀些纹理信息,还能进⼀步弱化光照的影响。
最常⽤的⽅法是:简单地使⽤⼀个⼀维的离散微分模板在⼀个⽅向上或者同时在⽔平和垂直两个⽅向上对图像进⾏处理,更确切地说,这个⽅法需要使⽤滤波器核滤除图像中的⾊彩或变化剧烈的数据
(3)构建⽅向直⽅图
细胞单元中的每⼀个像素点都为某个基于⽅向的直⽅图通道投票。
投票是采取加权投票的⽅式,即每⼀票都是带有权值的,这个权值是根据该像素点的梯度幅度计算出来。
可以采⽤幅值本⾝或者它的函数来表⽰这个权值,实际测试表明:使⽤幅值来表⽰权值能获得最佳的效果,当然,也可以选择幅值的函数来表⽰,⽐如幅值的平⽅根、幅值的平⽅、幅值的截断形式等。
细胞单元可以是矩形的,也可以是星形的。
直⽅图通道是平均分布在0-1800(⽆向)或0-3600(有向)范围内。
经研究发现,采⽤⽆向的梯度和9个直⽅图通道,能在⾏⼈检测试验中取得最佳的效果。
(4)将细胞单元组合成⼤的区间
由于局部光照的变化以及前景-背景对⽐度的变化,使得梯度强度的变化范围⾮常⼤。
这就需要对梯度强度做归⼀化。
归⼀化能够进⼀步地对光照、阴影和边缘进⾏压缩。
采取的办法是:把各个细胞单元组合成⼤的、空间上连通的区间。
这样,HOG描述符就变成了由各区间所有细胞单元的直⽅图成分所组成的⼀个向量。
这些区间是互有重叠的,这就意味着:每⼀个细胞单元的输出都多次作⽤于最终的描述器。
区间有两个主要的⼏何形状——矩形区间(R-HOG)和环形区间(C-HOG)。
R-HOG区间⼤体上是⼀些⽅形的格⼦,它可以有三个参数来表征:每个区间中细胞单元的数⽬、每个细胞单元中像素点的数⽬、每个细胞的直⽅图通道数⽬。
(5)收集HOG特征
把提取的HOG特征输⼊到SVM分类器中,寻找⼀个最优超平⾯作为决策函数。
(⼆)Dlib库
1、Dlib简介
Dlib是⼀个现代化的C ++⼯具箱,其中包含⽤于在C ++中创建复杂软件以解决实际问题的机器学习算法和⼯具。
它⼴泛应⽤于⼯业界和学术界,包括机器⼈,嵌⼊式设备,移动电话和⼤型⾼性能计算环境。
Dlib的开源许可证允许您在任何应⽤程序中免费使⽤它。
2、Dlib特点
⽂档齐全⾼质量的可移植代码提供⼤量的机器学习和图像处理算法
(三)卷积神经⽹络特征提取(CNN)
1、卷积神经⽹络简介
卷积神经⽹络(Convolutional Neural Network)简称CNN,CNN是所有深度学习课程、书籍必教的模型,CNN在影像识别⽅⾯的为例特别强⼤,许多影像识别的模型也都是以CNN的架构为基础去做延伸。
另外值得⼀提的是CNN模型也是少数参考⼈的⼤脑视觉组织来建⽴的深度学习模型,学会CNN之后,对于学习其他深度学习的模型也很有帮助,本⽂主要讲述了CNN 的原理以及使⽤CNN来达成99%正确度的⼿写字体识别。
2、CNN⽹络结构
基础的CNN由卷积(convolution), 激活(activation), and 池化(pooling)三种结构组成。
CNN输出的结果是每幅图像的特定特征空间。
当处理图像分类任务时,我们会把CNN输出的特征空间作为全连接层或全连接神经⽹络(fully connected neural network, FCN)的输⼊,⽤全连接层来完成从输⼊图像到标签集的映射,即分类。
当然,整个过程最重要的⼯作就是如何通过训练数据迭代调整⽹络权重,也就是后向传播算法。
⽬前主流的卷积神经⽹络(CNNs),⽐如VGG, ResNet都是由简单的CNN 调整,组合⽽来。
(1)CNN
图中,⼀个stage中的⼀个CNN,通常会由三种映射空间组成:
输⼊映射空间(input maps volume)特征映射空间(feature maps volume)池化映射空间(pooled maps volume)(2)卷积
注意卷积层的kernel可能不⽌⼀个,扫描步长,⽅向也有不同,进阶⽅式如下:
可以采⽤多个卷积核,设为n 同时扫描,得到的feature map会增加n个维度,通常认为是多抓取n个特征。
可以采取不同扫描步长,⽐如上例⼦中采⽤步长为n, 输出是(510/n,510/n)padding,上例⾥,卷积过后图像维度是缩减的,可以在图像周围填充0来保证feature map与原始图像⼤⼩不变深度升降,例如采⽤增加⼀个1*1 kernel来增加深度,相当于复制⼀层当前通道作为feature map跨层传递feature map,不再局限于输⼊即输出, 例如ResNet跨层传递特征,Faster RCNN 的POI pooling
(3)激活
(4)池化
(5)全连接⽹络
出现在CNN中的全连接⽹络(fully connected network)主要⽬的是为了分类, 这⾥称它为network的原因是,⽬前CNNs多数会采⽤多层全连接层,这样的结构可以被认为是⽹络。
如果只有⼀层,下边的叙述同样适⽤。
它的结构如下:
(6)⽬标函数和训练⽅法
提取内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。