检测

NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。

 

apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。  eg:apt-get install python3-matplotlibapt-get install python-OpenCV

 

pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。eg:pip3 install numpy

 

Matplotlib 是一个 Python 的 2D绘图库,可以生成绘图,直方图,功率谱,条形图,错误图,散点图等

 

边缘检测图像处理计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。

 

数字图像,又称数码图像数位图像,是二维图像用有限数字数值像素的表示。由数组或矩阵表示,其光照位置和强度都是离散的。数字图像是由模拟图像数字化得到的、以像素为基本元素的、可以用数字计算机或数字电路存储和处理的图像。

 

HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。当前流行的版本是 HDF5

Python 中有一系列的工具可以操作和使用 HDF5 数据,其中最常用的是 h5py 和 PyTables

一个 HDF5 文件是存储两类对象的容器,这两类对象分别为:

  • dataset:类似数组的数据集合;
  • gropp;类似目录的容器,其中可以包含一个或多个 dataset 及其它的 group。

 

特征提取 特征类型 :边缘 角 区域 脊

 

人脸识别的四大块:

Face detection, 人脸检测   从一张图中识别出人脸位置 ,opencv中早就有直接能拿来用的haar分类器

Face alignment,人脸对齐   把人脸上的特征点定位

Face verification 人脸校验  两张脸问你是不是同一个人

Face identification(recognization)人脸识别 给一张脸和一个库问你这张脸是库里的谁。

 

人脸特征点检测(Facial landmark detection),即人脸特征点定位、人脸对齐(Face Alignment),是在人脸检测的基础上进行的,对人脸上的特征点例如嘴角、眼角等进行定位。 

人脸特征点检测用途:

(1)改善人脸识别:通过人脸特征点检测将人脸对齐到平均脸,对齐后的人脸图像识别算法更加有效。 
(2)人脸平均:利用人脸特征点检测的结果,将多个人脸进行融合成新的平均人脸。
(3)人脸交换:利用人脸特征点检测的结果,对两张人脸进行无缝换脸,将一张人脸换到另一张
(4)人脸化妆&装扮:商用价值,美图秀秀

1.级联回归CNN人脸特征点检测 
2.Dlib人脸特征点检测 
3.libfacedetect人脸特征点检测 
4.Seetaface人脸特征点检测方法

(文字来源)

https://blog.youkuaiyun.com/sinat_14916279/article/details/72353846

 

 

MTFL人脸数据集

Multi-Task Facial Landmark (MTFL) dataset

:This dataset contains 12,995 face images collected from the Internet. The images are annotated with (1) five facial landmarks, (2) attributes of gender, smiling, wearing glasses, and head pose.

AFW人脸数据库

 

1.级联回归CNN人脸特征点检测 

 

人脸特征点检测实际上是在人脸检测的基础上,在人脸框中预测特征点的位置。很多人脸数据集都提供了图像样本中人脸框的位置及特征点的坐标,我们需要做的是训练能预测特征点在人脸框中相对位置的网络。在实际预测时,我们首先通过人脸检测方法获取人脸框位置,然后在人脸框中预测特征点坐标。 
卷积神经网络可以用于分类和回归任务,做分类任务时最后一个全连接层的输出维度为类别数,接着Softmax层采用Softmax Loss计算损失函数,而如果做回归任务,最后一个全连接层的输出维度则是要回归的坐标值的个数,采用的是欧几里何损失Euclidean Loss。
 

(1)生成hdf5文件,训练集做数据增广。训练卷积神经网络来回归特征点坐标,使用caffe训练CNN网络,由于是回归问题,多标签,而lmdb(轻量级内存映射数据库)不支持多标签(虽然可以修改caffe源码以支持多标签,但这里没有必要),因此使用hdf5格式以支持多标签,在data\face_fp下的stage1.py脚本可以执行生成第一阶段的经过数据增广的hdf5格式的训练集和验证集以及对应的标签文本,

(2)准备好了第一阶段的数据集,下面看第一阶段所使用的网络1_F_train.prototxt,网络的输入层大小为39x39的单通道灰度图像,最后一个全连接层的输出维度为10,代表5个特征点的坐标值,而最后一层使用的是欧几里何Euclidean Loss,计算的是网络预测的坐标值与真实值(都是相对值)之间的均方误差的累积。

(3)设置训练超参数文件1_F_solver.prototxt如下,然后就可以开始训练了,训练迭代200000次后,loss就降得就很小了。

(4)准备好1_F_deploy.prototxt,我们首先看看只用第一阶段训练来做预测的结果,如下图所示,可以看到第一阶段能够大致预测到特征点位置,但仍不够准确,接下来需要我们进行第二阶段的训练。

(5)第二阶段训练,共5个特征点,每个特征点做两组数据集,即第一组数据集取以特征点为中心,局部框大小为(2*0.18*W,2*0.18*H),其中W、H为人脸框的大小,并对此局部框做随机的微小平移使得特征点在局部框中的位置随机,裁剪出局部框图像并统一到15x15大小,第二组数据集和第一组数据集制作过程一样,只是局部框取得是(2*0.16*W,2*0.16*H)。对每个特征点,针对这两组数据集采用同样的网络模型进行训练,可以得到两组训练好的模型,在预测时,采取两组模型预测的均值作为预测结果,提高预测的准确性。 
(6)总共5个特征点,每个特征点使用了两种数据集,使用的是同一个网络,最终训练得到10个模型。以下为第二阶段左眼第一组数据集的训练模型2_LE1_train.prototxt,其它训练网络只需修改数据集路径即可。

(7)对应的网络超参数文件2_LE1_solver.prototxt,需要注意的是对不同特征点,可能需要尝试不同的初始学习率来使得模型更好的收敛。因此,需要训练10个小网络,还是挺繁琐的…

(8)接下来就可以开始训练,训练迭代100000次后,loss也降得差不多了。然后接着把剩下的9个都训练完,注意可能要调下学习率,batchsize不用调。

(9)然后准备好预测用的2_LE1_deploy.prototxt,剩下9个deploy.prototxt与其完全一致。现在可以来看看级联后的特征点预测结果了,如图所示,可以看到预测结果更加准确了,但鲁棒性还不够强。

(10)如果采取更大的网络,特征点的预测会更加准确鲁棒,但耗时多,为了在速度和性能上做找到平衡点,使用较小的网络,并采用级联的思想,先进行粗检测,然后微调特征点位置。 
下面是最终预测人脸特征点的landmarks_detection.py,其中人脸检测采用的是级联CNN或者opencv人脸检测,在人脸检测的基础上预测人脸特征点位置,并将预测的相对位置转换成图像上的绝对坐标。
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值