Press "Enter" to skip to content

YOLO5Face:为什幺要重新发明人脸检测器

单位:深圳神目(startup)

 

ArXiv: https://arxiv.org/abs/2105.12931

 

Github: https://github.com/deepcam-cn/yolov5-face

 

导读:

 

目标检测网络这个大熔炉看似复杂,其实简单,大概可以分为三个部分:backbone、Neck和Head。Backbone骨架,针对不同平台,可以考虑使用重型还是轻量型的模型;Neck,针对目标的尺度是大、中、小、迷你,考虑采用特征金字塔,从传统的FPN到先进的PANet,也在不断发展;Head,针对任务而言,是分类还是回归,添加不同的head即可。那幺,如何定制从一个通用目标检测框架YOLO,到带有关键点检测的专用人脸检测网络呢?作者庖丁解牛,对网络整改,在此致敬YOLO祖师爷。本文一作还是来自深圳一家AI初创公司喔!

 

 

目录

 

近年来,卷积神经网络已经在人脸检测方面取得了巨大进展。尽管许多人脸检测器使用指定用于人脸检测的设计,作者将人脸检测器视为一般对象检测任务。作者基于YOLOv5目标检测器实现了一个人脸检测器,称之为YOLO5Face。作者往里面添加了5个关键点回归头,并且使用Wing Loss损失函数。作者设计的检测器带有不同的模型尺寸,从能够获得最好性能的大模型,到能够在嵌入式或移动设备上实时检测的超级mini模型。作者在WiderFace数据集上展示了该人脸检测器几乎能够在Easy,Medium和Hard子集上取得领先的性能,超过更加复杂设计的人脸检测器。

 

一、介绍

 

人脸检测是计算机视觉中一项非常重要的任务。深度学习特别是卷积神经网络的运用,使得该任务取得重大进展。作为很多任务的第一步,如人脸识别、验证、追踪、对齐、表情识别等,人脸检测在学术和商业中都吸引了很多研究与发展。并且近些年来,人脸识别的性能也在不断提升,如人脸识别的综述文章所示。从不同角度来讲,该领域中有很多种方法,研究方向包含:CNN网络设计,损失函数,数据增强,训练策略等。例如,在YOLOv4中作者探讨了所有的研究方向,并基于网络架构优化、赠品袋选择和特价袋选择提出v4版本。

 

在该文中,作者将人脸检测看成一个通用的目标检测任务,这与TinaFace具有相同的意图。直观来讲,人脸也是一个物体。如同在TianFace中讨论一样,从数据的角度讲,人脸具有的属性如姿态、尺度、遮挡、光照和模糊等也存在其他物体中。人脸具有的独特属性如表情、化妆同样可以对应于物体的变形和颜色。标记点对人脸来说,比较特殊,但不是独一无二的。它们就像物体的关键点。例如,在车牌检测中,也使用了标记点。并且在目标预测头中添加标记点回归是比较直接的。于是,从人脸检测遇到的挑战来看,如多尺度、小目标和密集场景,都在通用的目标检测中存在。因此,人脸检测仅仅是通用目标检测的一个子任务。

 

本文作者采用这种意图并基于YOLOv5检测器设计了一个人脸检测器。作者为了考虑人脸检测的不同场景如大脸、小脸,标记点监督,修改模型以满足不同的复杂度和应用。主要贡献总结如下:

作者重新修改YOLOv5检测器为人脸检测器,称之为YOLO5Face。作者实现了网络的关键修改以提升性能,针对mAP(mean average percision)和速度。
作者设计一系列不同大小的模型,以针对不同应用需求,从大模型到超级mini模型都有。并且,作者基于ShuffleNetV2作为骨架,实现了移动设备上领先的性能和速度。
作者在WiderFace数据集上评估了模型。在VGA图像分类率下,作者多数模型实现了领先的性能和速度。这证明了作者的目标,如同标题所述,不需要再重新发明人脸检测器,因为YOLO5Face能够完成。

二、相关工作

 

2.1 目标检测

 

通用的目标检测旨在给定的一副图像中定位和分类预定义的目标。在深度CNN之前,传统的人脸检测使用手工特征,如Haar、HOG、LBP、SIFT、DPM、ACF等。开创性工作如Haar类似的特征通过引入积分图来计算。人脸检测也有使用手工特征的综述。

 

自从深度CNN在机器学习任务中展示的强大力量,人脸检测领域也被深度CNN统治。有两种不同种类的检测器,如two stages和单阶段。典型的双阶段方法有RCNN家族,包含RCNN、Fast-RCNN、Faster-RCNN、Mask-RCNN和Cascade-RCNN等。双阶段目标检测器展示了良好的性能但是存在长延迟和速度慢的问题。为了克服这个问题,单阶段的目标检测被研究,主要有SSD、YOLO系列。

 

其他目标检测包含如FPN、MMDet、EfficientDet、DETR(Transformer)、CenterNet等。

 

2.2 人脸检测

 

在最流行和最有挑战的人脸检测数据集WiderFace发布后,人脸检测发展快速聚焦于极端和实际的变化问题如尺度、姿态、遮挡、表情、化妆、光照和模糊等。

 

很多方法被提出来处理这些问题,特别是尺度、上下文和锚等去检测小目标人脸。这些方法包含MTCNN、FaceBox、S3FD、DSFD、RetinaFace、RefineFace和最近才出来的ASFD、MaskFace、TinaFace、MogFace和SCRFD等,想了解更多的人脸检测器,可以去WiderFace官网查看排行榜。

 

值得注意的是一些人脸检测器探索人脸具有的独特特征,一些仅仅是修改通用的目标检测器用于人脸检测。如RetinaFace,它使用2D和3D关键点回归去帮助人脸检测的监督,而TinaFace仅仅是一个常用的目标检测器。

 

2.3 YOLO

 

YOLO于2015年首次提出,与流行的双阶段方法不同。它将目标检测问题当成一个回归问题,而不仅仅是一个分类问题。它使用单神经网络实现了所有必须阶段去检测对象,不仅取得了良好的检测性能,同时已取得了实时的检测速度。并且,它具有很好的泛化能力,能够轻松训练以检测不同的目标。

 

在后来的五年里,YOLO算法已经更新了五个版本,从目标检测社区中吸收了很多创新的想法。YOLOv1、v2、v3是YOLO原作者发展的,其中,YOLOv3是一个基石,通过引入多尺度特征FPN、更好的骨架如DarkNet53以及使用二交叉熵损失取代Softmax分类损失,而取得了性能和速度的巨大提升。

 

在2020早期,在原作者宣布退出学术界,YOLOv4被另一个团队发布。他们开始探索YOLOv3的几乎所有方面,包含骨架、和他们所称为的免费袋、特价袋,在COCO数据集上取得了43.5%的AP(65.7%的AP50)和在Tesla V100上取得65FPS的实时速度。

 

一个月后,YOLOv5被另一个团队发布,从算法角度讲,V5没有很多创新,也没有发布文章。这为它是否称之为YOLOv5带来了很多的争议。然后,与YOLOv4相比,其模型显着减小、速度更快,相似的性能,完成基于Pytorch实现,在目标检测社区非常受欢迎。

 

三、YOLO5Face人脸检测器

 

本章节作者主要展示基于YOLOv5的关键修改。

 

3.1 网络架构

 

作者采用YOLOv5检测器作为基线模型,并优化它以实现人脸检测。作者针对小目标和大目标的人脸而做出改动。下图是YOLO5Face的网络架构,它包含backbone、Neck和Head。在YOLOv5中,一个新设计的骨架CSPNet被采用,在Neck中,SPP和PANet被采用去聚合特征;在Head中,回归和分类都使用了。

 

图a)整体架构。值得注意的是,P3层输出 80 × 80 × 16 80 \times 80 \times 16 16 ,P4: 40 × 40 × 16 40 \times 40 \times 16 16 ,P5: 20 × 20 × 16 20 \times 20 \times 16 16 ,P6: 10 × 10 × 16 10 \times 10 \times 16 16 ,针对每一层的anchor。

 

图b) CBS模块:一个关键的block,包含Conv层、BatchNorm层、SILU激活层。

 

图c)Head的输出标签,包含边界框bbox、置信度conf、5个关键点和类别cls。其中,5个关键点是作者添加到YOLOv5中使之成为带有关键点输出的人脸检测器。如果不带有关键点,那幺最后16维应该变成6维。

 

图d)一个干细胞网络架构,替代了YOLOv5中原始的Focus层。这个Stem块引入到YOLOv5,以实现人脸检测是作者的一个贡献之一。

 

图e)CSP块,即C3。这个模块受到DenseNet的启发。不同的是区别于将所有输入和输出添加到CNN层后,这里将输入分为两部分,其中一部分输入到CBS块中,然后是一系列的BottleNeck块如图f)所示;另一部分只通过卷积块,然后将两者串联在一起,再跟上一个CBS模块。

图g)SPP块。在这个块中,原始的YOLOV5中三个不同卷积核
13 × 13 , 9 × 9 , 5 × 5 13 \times 13, 9 \times 9, 5 \times 5 13 , 9 × 9 , 5 × 5

在该人脸检测器中替换为

 

7 × 7 , 5 × 5 , 3 × 3 7 \times 7, 5\times 5, 3 \times 3 7 , 5 × 5 , 3 × 3

 

。这是作者的另一个创新。

 

 

注意的是作者仅考虑VGA图像分辨率。更精确的是,输入图像的更长的边被缩放为640,短边被相应缩放。较短的边缘也被调整为SPP块的最大步幅的倍数。例如不使用P6时,短边需要是32的倍数;使用 P6 时,短边需要为 64 的倍数。

 

3.2 关键改动

 

作者对YOLOv5的改动,归纳为:

作者添加了关键点回归头到YOLOv5网络中,Wing Loss作为损失函数被采用,添加了关键点检测使得人脸检测器更加实用,这个额外的监督帮助提升人脸检测的精度。
作者替换了Focus层,并采用Stem块,它增加了网络的泛化能力,降低运算复杂度而不削弱性能。
在SPP块中采用了更小的卷积核,这使得YOLOv5更加适合人脸检测和提升精度。
作者添加了带有步长为64 的P6输出块,它增加了检测更大人脸的能力,这是一个很容易被许多研究人员忽略的点,因为他们重点关注更小的人脸。
作者发现数据增强不适用于人脸检测,包含Flop和Mosaic等,移除Flip能够提升性能。当小图像被使用时,Mosaic增加会降低性能。但是,当不考虑小人脸时,它能起作用。随机裁减Crop有利于提升性能。
作者设计了两个超级轻量型的模型,基于ShuffleNetV2作为骨架,它与CSP网络很不同,但能在移动设备上取得领先的性能。

3.3 关键点回归

 

关键点是人脸的重要特征,它们能够用于人脸对齐、人脸识别、表情分析和年龄分析等。传统的关键点包含68个,它们在MTCNN简化成5个点。自此,5个关键点在人脸识别中被广泛使用。关键点的质量影响人脸对齐和人脸识别的质量。

 

通用的目标检测器不包含关键点。通过回归头可以直接添加它到YOLOv5网络中。关键点可以用于人脸对齐,在人脸在送入识别网络前。

 

通用的关键点损失函数包含L1和L2损失、Sooth-L1等。MTCNN网络采用L2损失。但是这个损失函数针对小错误不够敏感,作者采用了Wing-Loss作为损失函数,其定义为:

 

非负 w 将非线性部分的范围设置为 (-w, w),e 限制了非线性区域的曲率,

 

C = w − w l n ( 1 + w / e ) C = w – wln(1 + w/e) wl n ( 1 + w / e )

 

是一个常数,可以平滑地连接分段-定义的线性和非线性部分。

 

作者称采用Wing Loss,相比于L2、L1和Smooth-L1,在近乎0点的小误差区域能够迅速响应提升。

 

对于关键点向量 s = s i s = {s_i} s i ​ ,其真实标注为 s ′ = s i s’ ={s_i} s i ​ ,其中 i = 1 , 2 , ⋅ ⋅ ⋅ , 10 i =1,2,\cdot\cdot\cdot,10 1 , 2 , ⋅ ⋅ ⋅ , 10 ,考虑原来YOLOv5的通用目标检测损失函数为 L O ( b o u n d i n g B o x , c l a s s , p r o b a b i l i t y ) L_O(boundingBox,class,probability) L O ​ ( b o u n d in g B o x , c l a ss , p ro babi l i t y ) ,新的损失函数为

 

l o s s ( s ) = l o s s o + λ L × l o s s L loss(s)=loss_o+\lambda_L \times loss_L l oss ( s ) = l os s o ​ + l os s L ​

 

其中, λ L \lambda_L λ L ​ 控制关键点损失的权重。

 

3.4 干细胞结构

 

作者参考Stem块,作为干细胞网络,如图d)所示。采用该干细胞,计算复杂度略微增加,同时保证了强大的表征能力。

 

3.5 替换为小卷积核的SPPNet

 

在前向传播到Neck的特征聚合块之前,YOLO5骨架的输出特征图输入到一个额外的SPPNet中,以增大感受野和分离出最重要的特征。取代许多包含全连接层仅能接受特定维度图像的CNN模型,SPP旨在输出固定大小的输出,而输入大小无关。并且,SPPNet通过池化自身的多尺度版本而有利于提取重要特征。

 

作者将YOLO5中较大的卷积核替换为较小核,这样有利于检测小人脸,而提升整体性能。

 

3.6 P6输出块

 

YOLO骨架具有多层,随着网络层数加深,特征变得越来越抽象,特征图的空间分辨率由于下采样而降低这将导致空间信息和细颗粒度特征的丢失。为了保留这些细颗粒度的特征,FPN网络引入到YOLOv3中。

 

在FPN中,细颗粒度的特征从低级层到高级层的路径很长。为了克服这个问题,PANet被提出,即在FPN沿着自上而下的路径添加自下而上的增强路径。此外,在特征图与横向架构的连接中,逐元素加法操作被串联替代。在FPN中,目标预测在不同尺度级别上独立操作,不利用来自其他特征图的信息,并且可能产生重复的预测。在PANet中,自下而上增强金字塔的特征图通过ROI对齐和全链接层而融合。在YOLOv5中,PAN输出三种特征图,即P3,P4和P5,分别对应80 80 16,40 40 16,20 20 16,对应步长分别为8,16和32。在YOLO5Face中,作者添加额外的P6输出块,其大小为10 10 16,步长为64。这个修改特别有利于检测大尺度人脸,虽然多数检测器关注小尺度人脸,作者填补了这个空白。

 

四、实验

 

4.1 数据集

 

WiderFace数据集是最大的人脸检测数据集,包含32203张图片和393703张人脸。它非常具有挑战性,因为在尺度、姿态、遮挡、表情、光照和事件等具有较大变化,非常接近真实情况。

 

整个数据集按照Train、validation、test按照50%、10%、40%来划分。此外,每个子集按照难度分为Easy、Medium、Hard级别。其中,Hard最具有挑战性,也能反映检测器的鲁棒性。

 

此外,WebFace用于关键点检测与对齐;FDDB数据集用于证明跨域的性能。

 

4.2 实现细节

 

作者代码基于YOLOv5-4.0版本。训练运行 250 个 epoch,批大小为 64。λL = 0.5 通过排气搜索进行了优化。

 

最后一个后缀6表示在SPP块中采用了P6输出层。模型采用CSPNet作为骨架,采用了不同的深度和宽度,分别用D,W表示。

 

 

4.3 腐蚀学习

 

Stem block & Focus Layer

 

作者在干细胞网络中采用Stem,替代了原来的Focus层。

 

通过表II,Stem比Focus更有优势,体现在更少的参数量与运算量,但取得更好的性能。

 

SPP核大小

 

作者采用(7,5,3)来替代原来是的(13,9,5),在Easy、Medium、Hard上都取得了更好的结果。

 

P6输出层

 

添加P6输出层,性能分别提升0.98%、1.09%、-0.02%。带来了更多的参数量与运算量。

 

数据增强

 

实验表明,随机裁剪,有利于提升在Easy、Medium上的性能;而Mosaic有利于提升Hard性能。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注