摘 要:人脸检测的研究对与日常生活很好的实用价值,如人脸体温检测,视频监控等。实验通过YOLOv5方法对用户进行训练,并选用YOLOv5系统中网络深度最大和宽带最少的YOLOv5s模型,基于重参数化结构,提升了检测的准确率,且其具有速度快,体积小的优点。在人脸检测出后基于face_recongnition库进行关键点定位。通过实验结果可以看出,检测较为准确,具有良好的应用价值。
关键词:YOLOv5;人脸检测;深度学习;人脸关键点定位
中图分类号:TP391.4;TP18 文献标识码:A 文章编号:2096-4706(2023)23-0069-04
Research and Implementation of Face Detection and Key Point Localization
Based on YOLOv5
ZHANG Yanli
(North China University of Technology, Beijing 100144, China)
Abstract: The research on face detection has great practical value for daily life, such as face temperature detection, video surveillance and so on. The experiment trains users through the YOLOv5 method, and selects the YOLOv5s model with the highest network depth and the lowest bandwidth in the YOLOv5 system. Based on the re-parameterization structure, it improves the detection accuracy, and it has the advantages of fast speed and small size. After the face detection, it carries out key point localization based on face_recongnition library. From the experimental results, it can be seen that the detection is relatively accurate and has good application value.
Keywords: YOLOv5; face detection; Deep Learning; face key point localization
0 引 言
隨着深度学习的发展,用计算机处理图像,辅助人类视觉进行检测和识别得到了广泛应用,如人脸检测和人脸关键点定位技术。人脸的检测和关键点定位在生活中经常于人脸的分析处理,如人脸识别、脸部体温测量、表情识别等,同时在视频监控、人机交互等方面有广泛的应用前景。
目前,人脸检测已有的算法有Adaboost算法,RCNN算法等。Adaboost算法主要由强弱分类器级联而成,将特征图像用于各弱分类器的训练,进行多次迭代,最后将得到的分类器结合起来,得到强分类器[1],这种算法对于人脸检测的误检率较高。传统的HOG特征+SVM分类检测器,通过计算和统计图像局部区域的梯度直方图来构成特征,将特征送入SVM中训练得到分类器,但该方法很难检测有遮挡物的人脸,而且其本身不具有尺度不变性。而YOLOv5与Adaboost和传统方法相比具有体积小、速度快、精度高等优点,且在生态成熟的PyTorch中实现,部署实现简单[2],而且对有部分遮挡物的人脸检测准确率较高。所以采用YOLOv5算法实现人脸检测。关键点定位部分用face_recognition库,该库使用非常便捷,且关键点定位点比较准确。
1 人脸检测及关键点定位算法
1.1 总体框架
实现人脸检测和人脸关键点定位的过程:首先用训练出的YOLOv5模型来进行人脸检测,定位出人脸框的位置、统计出图像中总的人脸个数,再用线条出来将每个人脸框选出来。之后再定位人脸关键点,关键点定位用face_recognition库中的检测器定位。对于一张图片检测,直接用训练好的模型检测,输出检测后的结果即可,而对于视频或实时检测,需要一帧一帧的检测并显示出来,直至视频结束。
1.2 基于YOLOv5的人脸检测算法实现
YOLOv5是一种单阶段目标检测算法,人脸检测部分采用YOLOv5s的算法,其网络结构主要分为四个部分,分别为输入端、Backbone、Neck、head。其网络构架如图1所示。
1)输入端。采用Mosaic数据增强技术,自适应初始锚框计算[3]、图片缩放等技术等。且在输入图片后用orgimg=cv2.cvtColor(orgimg,cv2.COLOR_BGR2RGB)语句将图片由RGB格式转化为BGR格式。Mosaic数据增强将图片进行裁剪,之后与向上采样的图结合作为训练数据[4],能更好地检测小目标人脸。采用自适应锚框计算,在选定锚框时采用自适应初始锚框计算,能在训练时,自主计算出每个训练集中的最佳锚框值,小目标分配到anchors较小,大目标分配到anchors较大。同时也能实现在小特征图上检测大目标,在大特征图上检测小目标[5],能提高检测的准确率。
同时YOLOv5还采用自适应图片缩放技术,将图像的长宽按照一定比例缩放,对于收缩后不满足条件的一边再进行填充,可以很大程度上减少黑边的占比,并减少了计算量,提高了模型推理速度。
2)Backbone。用conv替代原本的focus,拥有了更好的导出性。同时在网络结构中重复用C3和Conv模块来提取图片的特征信息。Conv模块是卷积+BN+激活函数的组合,激活函数在这里使用Hardwish。C3模块替换了原来版本的BottleneckCSP模块,改进的地方是经历过残差输出后的Conv模块删去了,还有将concat后卷积中激活函数变成了Hardswish:
以上改进减少了计算量,提升了训练速度,同时也提升了神经网络的准确性。整个C3模块的作用是对残差特征进行学习。
Backbone模块的最后是SPP空间金字塔池化,利用一个标准卷积模块将输入通道减半,然后分别做kernel-size为5,9,13的最大池化[6],经过三个不同卷积核的最大池化下采样之后,输出通道数是一样的,便于后续操作。该部分的作用时将更多不同分辨率的特征进行融合,在送入网络neck之前能够得到更多的信息。
3)Neck中的C3和Conv结构和Backbone中的相同。与上一层相比较,多了Concat和Upsample结构,concat将提取出来的特征进行融合,Upsample进行上采样,将提取出的feature map进行放大,来增加图片的分辨率。同时Neck中整体的网络结构采用用了FPN和PANet结构。FPN通过自顶向下的结构,将深层的语义信息传递到浅层,将高层特征与底层特征进行融合,能提高对小目标检测的准确率[7]。
4)Head的主体是三个检测层,分别对应Neck中得到的3种不同尺寸的特征图,并且给每种特征图都预设了3个不同宽高比的anchor,用来预测和回归目标。同时还采用三种损失函数分别计算分类、边界框和置信度损失[8]。所使用的损失函数为CIOU_Loss:
其中,,IOU表示预测框和真实框的重叠程度,Distance_2表示预测框中心点和真实框中心点的欧式距离,Distance_C表示最小外接矩形的对角线距离。
CIOU_Loss弥补了IOU为0时无法得到预测框和真实框之间的距离的缺点,并通过NMS非极大值抑制比来提高网络预测的准确度[9]。
对于边框预测的计算,可以通过先验框计算出:
其中Cx、Cy表示feature map中grid cell的左上角坐标。
其中pw、ph表示预设的anchor box映射到feature map中的宽和高。
1.3 基于face_recongnition的关键点定位
识别出人脸后进行关键点检测,在dlib基础上使用face_recognition库实现人脸关键点识别,该模型能定位出的68个关键点。face_recognition采用的训练数据集是Labeled Faces in the wild,采用13 000多张人脸作为训练数据集训练出来的,测试的成功率高达99.38%。
将人脸关键点定位并绘出的代码如下:
face_landmarks_list = face_recognition.face_landmarks (img)#img为人脸检测后的图像
for word, face_landmarks in enumerate (face_landmarks_list): # 绘制面部轮廓点
for key, marks in face_landmarks.items():
for i in range (len(marks)):
point = marks[i]
cv2.circle(img, (point[0], point[1]), 2, (255, 125, 0), -1)#點位的标出使用蓝色
2 人脸检测和关键点定位实现
2.1 实验环境
实验基于Windows操作系统,软件环境Python 3.8,框架为PyTorch1.10.1,Cuda版本为10.2,并利用PyCharm远程连接恒源云上的恒源云NVIDIA GeForce RTX 3090(24 GB) GPU主机进行训练,之后将训练好的结果下载,在本地电脑上进行结果测试。
2.2 数据集标注及其训练
YOLOv5项目本身的训练模型能检测到80中类别的物品,但没有人脸这一类。想要检测出人脸,需要重新标注图片并在源码和权重上重新进行训练。选用数据集图片和用Lablimg工具对收集到的一些图片进行人脸标注的图片作为数据集,共15 980张图片,其包含不同场景为背景的、不同肤色的、面部有装饰物如帽子、墨镜等各种日常生活图片。同时将数据集分为训练集、测试集、验证集三类,来对YOLOv5进行训练[10]。
在训练时epochs设为300,batch-size设为25,输入图片的尺寸为640×640[11],训练采用的权重文件为YOLOV5s.pt。
2.3 训练结果及分析
目标检测大多采用平均精度mAP来对训练效果进行评判,mAP越接近于1,表明训练出的模型较好,检测结果越好。
相比于YOLOv3,YOLOv4,训练时间大大缩短;训练出的模型大小为14.7 MB,体积较小,便于应用到生活中;且mAP也有所提高,不同模型的精度对比如表1所示。
从表1可以看出,YOLOv5网络训练出的模型mAP更高,检测地更为准确。
3 实验结果分析
用训练出的模型last.pt进行结果检测和分析:
1)对输入的图片进行检测,检测结果较为准确,均能框选出人脸并定位出关键点,如图2所示。
2)在人脸上有眼镜、帽子等装饰物遮挡时,例如图3有墨镜遮挡时,能得到理想的检测结果。
3)图片中目标清晰时,能准确检测出,但小目标人脸不清晰的时候,检测结果可能就不太理想。在离镜头较进的人脸均能被检测出并标注出关键点,在离镜头较远、分辨率不高时,只能勉强检测出人脸,关键点并不能定位出来,检测后的图像如图4所示。
(4)对于用摄像头等设备进行实时检测,检测的速度为30秒每帧。使用摄像头设备采集的图像为640×480,实时检测如图5所示。在光线昏暗和有少量遮挡物时仍能检测出来,且检测结果较为准确。
4 结 论
实验基于YOLOv5对人脸进行识别,将大量图片送入模型中,从图像中提取丰富的特征信息进行训练,再用训练好的进行检测,之后用face_recongnition对人脸上的关键点定位。通过四种情况的实验结果测试和分析可以看出,训练出的YOLOv5s模型对于高清图像的小目标人脸、有部分遮挡物的人脸都能检测出来,在光线不好的情况下,仍能正常检测并定位出关键点,且权重文件的体积小,速度快。应用到生活时,适用于对与一些不太需要精度和检测小目标并对检测模型的体积要求小时,如人脸体温测量,表情识别等;而需要精度和检测小目标,还需进一步改进,可以尝试YOLOv5l、m、n等更高精度的模型,但对应有模型体积较大等缺点。
参考文献:
[1] 秦彩杰,管强.一种基于F-Score的特征选择方法 [J].宜宾学院学报,2018,18(6):4-8.
[2] 周逸博,马毓涛,赵艳茹.基于YOLOv5s和Android的苹果树皮病害识别系统设计 [J].广东农业科学,2022,49(10):155-163.
[3] 徐征宇,朱宗晓,周康,等.基于深度学习目标检测的可行驶区域分割 [J].现代信息科技,2020,4(23):106-108.
[4] 郭智超,徐君明,刘爱东.基于嵌入式平台与优化YOLOv3的航拍目标检测方法 [J].兵工自动化,2022,41(3):10-15+20.
[5] 陆峰,刘华海,黄长缨,等.基于深度学习的目标检测技术综述 [J].计算机系统应用,2021,30(3):1-13.
[6] 邱天衡,王玲,王鹏,等.基于改进YOLOv5的目标检测算法研究 [J].计算机工程与应用,2022,58(13):63-73.
[7] 张智坚,曹雪虹,焦良葆,等.基于改进YoloX的输电通道工程车辆检测识别 [J].计算机测量与控制,2022,30(9):67-73.
[8] 苏兆婧,余隋怀,初建杰,等.面向云服务平台的产品感性评价及标注模型 [J].计算机集成制造系统,2021,27(3):868-877.
[9] 邱天衡,王玲,王鹏,等.基于改进YOLOv5的目标检测算法研究 [J].计算机工程与应用,2022,58(13):63-73.
[10] 唐勇,巫思敏.YOLOv3在安全帽佩戴检测中的应用 [J].现代信息科技,2021,5(23):88-91+95.
[11] 朱高兴,于瓅.基于YOLOv5-CA算法的野生动物目标检测研究 [J].信息技术与信息化,2022(6):32-35.
作者簡介:张言利(2003—),女,汉族,河南驻马店人,本科在读,研究方向:深度学习和计算机视觉。