一、人脸检测实战
1.使用OpenCV举行人脸检测
OpenCV举行人脸检测使用的是名为 Viola-Jones 的目的检测框架的算法。
第一步:下载OpenCV库
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
第二步:找到默认的预训练权重文件
1.一样平常在python安装目录的上级目录的/lib/python3.7/site-packages/cv2/data目录下,有个haarcascade_frontalface_default.xml文件
2.例如:我的python安装路径为/Users/username/opt/anaconda3/envs/tensorflow/bin/python,
那么文件路径就为/Users/username/opt/anaconda3/envs/tensorflow/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml
3.将该文件拷贝到某一文件夹下
第三步:在拷贝的haarcascade_frontalface_default.xml文件的同级目录下,新建face_detect_cv3.py文件:
# -*- coding: utf-8 -*-
import cv2
import sys
# 获取响应参数
imagePath = sys.argv[1] #从命令行读取图片路径
cascPath = "haarcascade_frontalface_default.xml" #预训练的权重文件,这里使用相对路径
# 建立haar级联分类器
faceCascade = cv2.CascadeClassifier(cascPath)
# 读取图片并将BGR图像变换为灰度图
image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 检测人脸图像
# scaleFactor:确定每个图像缩放比例巨细。
# minNeighbors:确定每个候选矩形应保留多少个相邻框。
# minSize:最小目的的巨细。小于该值的目的将被忽略。
# maxSize:最大目的的巨细。大于该值的目的将被忽略。
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30)
#若是使用OpenCV3,则需要注释下面这句
#flags = cv2.CV_HAAR_SCALE_IMAGE
)
# x,y,w,h分别是人脸框区域的左上角点的坐标和人脸框的宽高
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow("Found {0} faces!".format(len(faces)), image)
cv2.waitKey(0)
第四步:在终端中运行
1. cd 到face_detect_cv3.py文件所在目录
2. python face_detect_cv3.py test.jpg #test.jpg是测试图像的路径,这里使用相对路径,以是要放在同级目录下
2.使用face_recognition库举行人脸检测
face_recognition使用dlib中最先进的人脸识别深度学习算法,其识别准确率在LFW数据集测试基准下达到了99.38%。
第一步:下载face_recognition库
pip install face_recognition -i https://pypi.tuna.tsinghua.edu.cn/simple
第二步:在测试图片test.jpg文件的同级目录下,新建face_detect_fr.py文件:
# -*- coding: utf-8 -*-
import cv2
import sys
import face_recognition
# 获取图片路径
imagePath = sys.argv[1]
# face_recognition加载图片
image = face_recognition.load_image_file(imagePath)
# 人脸检测
face_locations = face_recognition.face_locations(image)
# openCV读取图片
image = cv2.imread(imagePath)
# top,right,bottom,left分别是人脸框中最顶部,最右侧,最底部,最左侧的值
for (top, right, bottom, left) in face_locations:
cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.imshow("Found {0} faces!".format(len(face_locations)), image)
cv2.waitKey(0)
第四步:在终端中运行
1. cd 到face_detect_cv3.py文件所在目录
2. python face_detect_cv3.py test.jpg #test.jpg是测试图像的路径,这里使用相对路径,以是要放在同级目录下
二、FaceNet简析
1.网络整体结构
对于一批人脸数据(此处的人脸数据就是通过人脸检测算法例如MTCNN检测出来的人脸数据,在我们的例子是96*96的图像),经由一个深度神经网络举行特征提取,然后经由L2正则将每小我私家脸数据映射为一个128维向量(这也就是embedding的效果)。然后将这些个128维的向量作为输入,盘算triplet loss,将triplet loss作为损失函数来举行训练。然后将这些128维向量之间的欧式距离作为分类依据,距离小于某一个阈值,即视为统一小我私家。
2.三元组损失函数
- Triplet 三元组指的是:anchor, negative, positive 三个部门,每一部门都是一个 embedding 向量。
- anchor指的是基准图片,positive指的是与anchor统一分类下与anchor欧式距离最大的一张图片,negative指的是与anchor差别分类下与anchor欧式距离最小的一张图片。
- Triplet Loss可以让统一小我私家的差别人脸对应的embedding向量的欧式距离小,差别人脸对应的向量欧式距离大。
3.映射的特征空间维数
对于差别的特征维度D,特征越多并非越好。通过取差别的维数发现,embedding向量的维数为128更为合适。
4.分类
最后一步,相当于依据欧式距离做聚类了(小我私家以为是一个有监视的聚类),可以使用SVM和KNN等聚类算法。
三、FaceNet使用预训练好的模子举行人脸检测
1.训练流程先容
- 加载训练数据集
- 人脸检测、对齐和提取(使用 OpenFace 的人脸对齐工具 AlignDlib)
- 人脸特征向量学习(使用预训练的 nn4.small1.v1 模子)
- 人脸分类(使用 KNN 或 SVM)
- 实际上,我们是使用预训练好的模子举行人脸检测。以是只需要1,2,4步,第三步实际上是加载模子,以是在代码中不需要用到三元组损失函数来训练模子。
2.训练数据的形式
- 每人一个文件目录,目录以人名命名,如”Fan_Bingbing“
- 每小我私家的文件目录下包罗10张图像(最好是1:1比例),图像文件以"人名_序号"命名,仅支持.jpg和.jpeg 两种花样。如”Fan_Bingbing_0001.jpg“。
- images目录下是亚洲人的人脸图片,origin_images目录下是欧尤物的人脸图片
3.最先举行人脸检测
需要安装的库有keras、matplotlib、numpy、opencv、pydot、graphviz、sklearn
由于这一部门代码较多,以是把对代码的明白和部门函数的注释直接写在注释里了。
详情请看github中的face_recognition.ipynb文件。
4.模子测试与可视化剖析
由于nn4.small2.v1模子是在欧尤物的人脸数据集上训练的,因此识别欧尤物比识别亚洲人更好。这一点,我们可以从以下几个方面查看:
- 准确率和F1值
在欧尤物数据集上,差别的距离阈值对应的准确率和F1值的曲线如下图:
在亚洲人数据集上,差别的距离阈值对应的准确率和F1值的曲线如下图:
可以看到,在欧尤物数据集上,当阈值为0.58时准确率最高为0.957;在亚洲人数据集上,当阈值为0.32时准确率最高为0.900。
- 特征向量之间的欧式距离直方图
在欧尤物数据集上,统一小我私家和差别的人图片所对应的特征向量之间的欧式距离直方图如下,虚线示意最佳距离阈值:
在亚洲人数据集上,统一小我私家和差别的人图片所对应的特征向量之间的欧式距离直方图如下,虚线示意最佳距离阈值:
可以看到,在欧尤物数据集上,统一小我私家的图像对应的特征向量在虚线左侧(即被展望为统一小我私家)的比例和差别的人的图像对应的特征向量在虚线右侧(即被展望为差别的人)的比例均高于在亚洲人数据集上的比例。
- 人脸特征向量降维之后的漫衍
在欧尤物数据集上,将每小我私家的照片对应的128维特征向量降维之后展现在二维平面如下:
在亚洲人数据集上,将每小我私家的照片对应的128维特征向量降维之后展现在二维平面如下:
可以看到欧尤物对应的降维后的效果,聚类加倍显著,种别之间的区分度更大。
,欢迎进入欧博客户端下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。