**
摘要**
近年来,卷积神经网络在人脸检测方面取得了巨大的进展。虽然许多人脸检测器使用专为人脸检测而设计的设计,但我们将人脸检测视为一般的目标检测任务。我们在YOLOv5对象检测器的基础上实现了一个人脸检测器,称为YOLO5Face。我们在其中加入了一个五点标志性回归头部,并使用了翼损失函数。我们设计了不同模型大小的检测器,从大模型到超小模型,以实现对嵌入式或移动设备的实时检测。在WiderFace数据集上的实验结果表明,我们的人脸检测器在几乎所有的简单、中等和困难的子集上都能达到最好的性能,超过了更复杂的指定人脸检测器。该代码在
基于YOLOV5的人脸检测源码yolov5face点击即可查看
一、引言
人脸检测是一项非常重要的计算机视觉任务。自从深度学习,特别是卷积神经网络(CNN)被用于这一任务以来,已经取得了巨大的进展。人脸检测作为人脸识别、验证、跟踪、配准、表情分析等诸多任务的第一步,吸引了学术界和产业界的大量研究和发展。多年来,人脸检测的性能有了显著的提高。人脸检测调查请参考基准结果[1]、[2]。从不同的角度来看,这一领域的研究方法很多。研究方向包括CNN网络的设计、损失函数、数据扩充和训练策略。例如,在YOLOv4论文中,作者探索了所有这些研究方向,并提出了基于网络结构优化、免费赠品袋选择和特价商品袋选择的YOLOV4对象检测器[3]。
在我们的方法中,我们将人脸检测视为一个一般的目标检测任务。我们和TinaFace有着相同的直觉。从直觉上讲,脸是一个物体。正如TinaFace[4]中所讨论的,从数据的角度来看,人脸具有的属性,如姿势、比例、遮挡、照明、模糊等,也存在于其他对象中。面部的独特属性,如表情和化妆,也可以与物体的扭曲和颜色相对应。地标对于面对面来说是特别的,但它们也不是独一无二的。它们只是一个物体的关键点。例如,在车牌检测中,也使用地标。而在目标预测头部添加里程碑式回归是直接的。那么从这个角度来看人脸检测遇到多尺度、小人脸和密集场景等挑战,通用目标检测都存在这些挑战。因此,人脸检测只是一般目标检测的一个子任务。
在本文中,我们遵循这一直觉,设计了一个基于YOLOv5目标检测器的人脸检测器[5]。针对不同的复杂程度和不同的应用场合,我们对人脸检测的设计进行了改进,考虑了大人脸、小人脸和标志性监督。我们的目标是为不同的应用程序提供一系列型号,从非常复杂的型号以获得最佳性能,到非常简单的型号以在嵌入式或移动设备上实现性能和速度的最佳平衡。
我们的主要贡献总结如下:
**(1)**我们重新设计了YOLOV5目标检测器[5]作为人脸检测器,并将其命名为YOLO5Face。我们对网络进行了关键修改,以提高平均平均精度(MAP)和速度方面的性能。这些修改的细节将在第三节中介绍。
**(2)**我们设计了一系列不同型号的模型,从大型号到中型型号,再到超小型型号,以满足不同应用的需要。除了YOLOv5[5]中使用的主干,我们还实现了基于ShuffleNetV2[6]的主干,它为移动设备提供了最先进的(SOTA)性能和快速的速度。
**(3)·**我们在WiderFace[1]数据集上对我们的模型进行了评估。在VGA分辨率图像上,几乎所有的模型都达到了SOTA的性能和较快的速度。这证明了我们的目标,正如本文所声称的那样,我们不需要重新发明人脸检测器,因为YOLO5Face可以实现这一点。
**
二、相关工作
**
A.目标检测
一般目标检测的目的是对给定图像中的预定义目标进行定位和分类。在使用深层CNN之前,传统的人脸检测使用手工制作的特征,如Haar、HOG、LBP、SIFT、DPM、ACF等。Viola和Jones[7]的开创性工作引入了积分图像来计算类似Haar的特征。有关使用手工特征进行人脸检测的概述,请参考[8]、[9]。
由于深度CNN在许多机器学习任务中显示出它的力量,人脸检测由深度CNN方法主导。有两级和一级物体探测器。典型的两阶段方法是RCNN家族,包括RCNN[10]、FAST-RCNN[11]、FASTER-RCNN[12]、MASK-RCNN[13]、Cascade-RCNN[14]。
两级目标检测器具有很好的性能,但存在延迟长、速度慢的问题。为了克服这一问题,人们研究了单级目标探测器。典型的单级网络包括SSD[15]、YOLO[3]、[5]、[16]-[18]。
其他目标检测网络包括FPN[19]、MMDetect[20]、EfficientDet[21]、Transform(DETR)[22]、CenterNet[23]、[24]等。
B.人脸检测
人脸检测的研究紧跟一般的目标检测。在最流行和最具挑战性的人脸检测基准WiderFace DataSet[1]发布后,人脸检测得到了迅速发展,重点关注了尺度、姿势、遮挡、表情、化妆、光照、模糊等极端和真实的变化问题。
人们提出了很多方法来解决这些问题,特别是为了检测出小人脸,人们提出了尺度、上下文、锚点等方法。这些方法包括MTCNN[25]、Facebox[26]、S3FD[27]、DSFD[28]、RetinaFace[29]、RefineFace[30]以及最近的ASFD[31]、MaskFace[32]、TinaFace[4]、MogFace[33]和SCRFD[34]。读者可参考WiderFace网站[2]获取常用人脸检测器的列表。
值得注意的是,这些人脸检测器中,有些是利用人脸特有的特征进行检测的,另一些只是采用和改进后用于人脸检测的通用目标检测器。以RetinaFace[29]为例,它使用里程碑(2D和3D)回归来帮助监督人脸检测,而TinaFace[4]只是一个通用的对象检测器。
C.YOLO
YOLO于2015年[16]首次出现,是一种与流行的两阶段方法不同的方法。它将目标检测视为一个回归问题,而不是一个分类问题。它使用单个神经网络执行检测目标的所有基本阶段。结果表明,该算法不仅取得了很好的检测性能,而且达到了实时速度。此外,它具有很好的泛化能力,可以很容易地训练来检测不同的目标。
在接下来的五年里,YOLO算法已经升级到五个版本,其中包含了目标检测界的许多创新想法。前三个版本–YOLOv1[16]、YOLOv2[17]、YOLOv3[18]是由原始YOLO算法的作者开发的。在这三个版本中,YOLOv3[18]是一个里程碑,通过引入多尺度功能(FPN)[19]、更好的主干网络(Darknet53)以及用二分类交叉熵损失取代Softmax多分类损失,在性能和速度方面都有了很大的改进。
2020年初,在最初的YOLO作者退出研究领域后,YOLOv4[3]由另一个研究团队发布。该团队探索了许多选项,YOLOv3算法的几乎所有方面,包括主干,以及他们所说的成袋的免费赠品和成袋的特价商品。在Tesla V100上,以65FPS的实时速度对MS Coco数据集实现了43.5%的AP(65.7%AP50)。
一个月后,另一个不同的研究团队发布了YOLOv5[5]。在算法前景上,YOLOv5[5]没有太多创新。而且该团队并不发表论文。这些都带来了相当多的争议,关于它是否应该被称为YOLOv5。然而,由于其显著减小的模型大小、更快的速度和与YOLOv4[3]相似的性能,以及在Python(Pytorch)中的完全实现,它受到了目标检测社区的欢迎。
**
三、YOLO5FACE人脸检测器
**
在这一部分中,我们将介绍我们在YOLOv5中所做的关键修改,并使其成为一个人脸检测器-YOLO5Face。
A.网络体系结构
我们使用YOLOv5对象检测器[5]作为我们的基线,并对其进行优化以进行人脸检测。我们介绍了一些用于检测小人脸和大人脸的改进。
我们的YOLO5Face人脸检测器的网络结构如图1所示。它由主干、颈部和头部组成。在YOLOv5中,使用了一种新设计的主干,称为CSPNet[5]。在颈部,使用SPP[35]和PAN[36]来聚集特征。在头部,使用了回归和分类两种方法。
在图1(A)中,描述了整个网络体系结构。
在图1(B)中,定义了称为CBS的关键块,其由卷积层、BN层和SIU[37]激活函数组成。这个CBS块在许多其他块中使用。
CBS的关键块,其由卷积层、BN层和SIU[37]激活函数组成
在图1©中,显示了头部的输出标签,包括边界框(BBox)、置信度(Conf)、分类(CLS)和五点标志。这些地标是我们对YOLOv5的补充,使其成为具有里程碑式输出的人脸检测器。
头部的输出标签,包括边界框(BBox)、置信度(Conf)、分类(CLS)和五点标志
如果没有地标,最后一个维度16应该是6。需要注意的是,P3中的输出维度808016,P4中的404016,P5中的202016,可选P6中的101016是针对每个锚的。实际尺寸应该乘以锚点的数量。
在图1(D)中,示出了茎结构[38],其用于替换YOLOv5中的原始焦点层。在YOLOv5中引入STEM块进行人脸检测是我们的创新之一。
STEM块
在图1(E)中,显示了CSP块(C3)。这一块的灵感来自DenseNet[39]。然而,不是在CNN的一些层之后添加完整的输入和输出,而是将输入分为两个部分。一半通过CBS块,即图1(F)中所示的多个瓶颈块,然后是另一个Conv层。另一半通过Conv层,然后将这两个层连接在一起,然后是另一个CBS块。
CSP块(C3)
图1(G)示出了SPP块[35]。在这个块中,YOLOv5中的三个核大小13x13、9x9、5x5在我们的人脸检测器中被修改为7x7、5x5、3x3。这一点已经显示出来了作为提高人脸检测性能的创新之一。
请注意,我们只考虑VGA分辨率输入图像。更准确地说,输入图像的较长边缘被缩放到640,而较短边缘相应地被缩放。较短的边缘也被调整为SPP块的最大步幅的倍数。例如,当不使用P6时,较短的边需要是32的倍数;当使用P6时,较短的边需要是64的倍数。
B.关键修改总结
主要修改总结如下。·
(1)我们在YOLOv5网络中增加了一个具有里程碑意义的回归头。机翼损失[40]被用来作为损失函数。这使得人脸检测器更有用,因为地标在许多应用中使用。地标位置更准确。这种额外的监督有助于人脸检测器的准确性。
(2)我们用茎块结构[38]取代了YOLOv5[5]的聚焦层。它增加了网络的泛化能力,在不降低性能的情况下降低了计算复杂度。
(3)我们改变了SPP块[35],使用了更小的核。这使得YOLOv5更适合人脸检测,提高了检测精度。
(4)我们增加了一个步长为64的P6输出块。它提高了检测大人脸的能力。这是一个容易被许多研究人员忽视的问题,因为他们的重点更多地放在小人脸的检测上。
(5)我们发现一些一般目标检测中的数据增强方法不适合于人脸检测,包括上下翻转和镶嵌。取消上下翻转可提高性能。当使用小图像时,马赛克增强[3]会降低性能。然而,当忽略小面孔时,它可以很好地工作。随机裁剪有助于提高性能。
(6)我们设计了两个基于ShuffleNetV2的超轻量级模型[6]。此主干与CSP网络非常不同。这些型号超小,同时为嵌入式或移动设备实现了SOTA性能。
C.关键点回归
关键点是人脸的重要特征。它们可用于人脸对齐、人脸识别、人脸表情分析、年龄分析等。传统的关键点由68个点组成。在MTCNN[25]中,它们被简化为五点,此后,五点标志点在人脸识别中得到了广泛的应用。关键点的好坏直接影响到人脸对齐和人脸识别的质量。
一般的物体探测器不包括关键点。将其添加为回归头部是很简单的。因此,我们将其添加到我们的YOLO5Face中。关键点的输出将用于在将人脸图像发送到人脸识别网络之前对齐人脸图像。
关键点回归的一般损失函数为L2、L1或平滑-L1。MTCNN[25]使用L2损失函数。然而,研究发现这些损失函数对小误差不敏感。为了克服这个问题,提出了Wing-loss(机翼损失)[40],
非负的w将非线性部分的范围设置为(−w,w),e限制非线性区域的曲率,并且dc=w−wln(1+w/e)是平滑地链接分段定义的线性部分和非线性部分的常数。图2是具有不同参数的翼损失函数。可以看出,与L2、L1或光滑L1函数相比,零附近小误差区域的响应增强
其中,λL是关键点回归损失函数的加权因子。
D. Stem Block Structure
我们使用类似于[38]的Stem。Stem块如图1(D)所示。使用这个主干块,我们在第一次对输入图像进行空间下采样时实现了STRIDE=2,并增加了通道数。使用这种主干块,在保证较强的表示能力的同时,计算复杂度仅略有增加。
实施的YOLO5FACE模型的详细信息,其中(D,W)是YOLOV5 CSPNET的深度和宽度的倍数[5]。参数和触发器的数量列于表三。
E.具有较小核的SPP
在转发到颈部的特征聚集块之前,YOLO5主干的输出特征图被发送到附加的SPP块[35],以增加接受域并分离出最重要的特征。许多CNN模型只接受特定维度的输入图像,而不是包含完全连通的层,提出了SPP以生成固定大小的输出为目标,而不考虑输入大小。此外,SPP还通过汇集自身的多尺度版本来帮助提取重要特征。
在YOLO5中,使用了三个内核大小13x13、9x9、5x5[5]。我们将它们修改为使用较小尺寸的内核7x7、5x5和3x3。这些较小的核函数有助于更容易地检测到小人脸,并提高了整体人脸检测性能。
F.P6输出块
YOLO目标检测器的主干由多个层次组成。随着特征层次的加深,特征变得越来越抽象,由于下采样导致特征图的空间分辨率降低,导致空间信息的丢失和细粒度特征的丢失。为了保留这些细粒度特征,FPN[19]被引入到YOLOv3[18]中。
在FPN[19]中,细粒度特征经历了从低层到高层的漫长路径。为了克服这一问题,PAN提出了在FPN中使用的自上而下的路径上增加一条自下而上的增强路径。此外,在特征映射到横向体系结构的连接中,逐个元素的加法运算被级联取代。在FPN中,目标预测是在不同的尺度级别上独立完成的,这不利用来自其他特征地图的信息,并且可能产生重复的预测。在PAN[36]中,输出的特征图自下而上的增强金字塔,通过使用(感兴趣区域)ROI对齐和使用元素最大运算的全连接层来融合。
G.ShuffleNetV2作为主干
ShuffleNet[44]是一种非常高效的移动设备的CNN。关键模块块称为ShuffleNet块。它利用了两种新的运算,即逐点分组卷积和信道混洗,在保持精度的情况下大大减少了计算量。
ShuffleNetv2[44]是ShuffleNet的改进版本。它借用了与DenseNet[39]类似的捷径网络体系结构,并将元素智慧相加改为级联,类似于YOLOv5[5]中PAN[36]的变化。但与DenseNet不同的是,ShuffleNetV2不是密集级联,在拼接之后通道混洗被用来混合这些功能。这使得ShuffleNetV2成为一个超快的网络。
我们在YOLOv5中使用ShuffleNetV2作为主干,实现了超小型人脸检测器YOLOv5n-Face和YOLOv5n0.5-Face。
**
四、实验
**
请查看论文原文:YOLO5论文英文版原文