【人脸检测】SCRFD:训练数据采样和计算分配策略结合的高效人脸检测方法

news/2024/12/22 16:58:05/

Sample and Computation Redistribution for Efficient Face Detection

论文链接:http://arxiv.org/abs/2105.04714

代码链接:https://github.com/deepinsight/insightface/tree/master/detection/scrfd

一、摘要

  文中指出训练数据采样和计算分配策略是实现高效准确人脸检测的关键。受到这些观察的启发,引入了两种简单但有效的方法:(1) 样本再分配(SR),根据基准数据集的统计信息增加最需要阶段的训练样本;以及(2) 计算再分配(CR),根据精心定义搜索方法将计算重新分配到模型的backbone、neck部和head之间。在WIDER FACE数据集上进行的大量实验证明了所提出的SCRFD在各种计算范围内的最新效率-准确度权衡。特别地,SCRFD-34GF在VGA分辨率图像的GPU上比最佳竞争者TinaFace表现更出色,准确率上的AP提高了3.86%,同时速度提高了超过3倍。

二、创新点

  1) 研究了在固定 VGA 分辨率(即640 × 480)下进行高效人脸检测,而非像[41]一样采用大尺度测试以降低计算成本。在这种尺度设定下,WIDER FACE 数据集中大多数人脸(78.93%)都小于 32 × 32 32 × 32 32×32像素,因此它们由浅层阶段进行预测。为了为浅层阶段获取更多训练样本,提出了一种通过大规模裁剪策略的**“样本重新分配”(SR)**方法。

  2) 由于人脸检测器的结构决定了计算分布的分布,并且是决定其准确性和效率的关键,进一步发现了在不同浮点运算量范围下计算分配的原则。为控制自由度并减少搜索空间,随机抽样具有不同配置的骨干(stem和四个阶段)、neck和head模型架构。根据这些模型的统计数据,按照[27]的方法计算经验bootstrap值[8],并估计最佳模型所在范围。为了进一步减少搜索空间的复杂度,将骨干和整个检测器的计算比例估算分为两个步骤

  3) WIDER FACE 进行大量实验表明,所提出的SCRFD在广泛的计算范围内取得了显著改进的准确性和效率权衡,如图1 所示。
在这里插入图片描述

关键问题
在这里插入图片描述

  1) 从人脸检测器的不同组件来看,大部分计算成本(约79%)来自head头部,因为骨干结构直接借用自ImageNet分类任务[5],没有任何修改。

  2) 即使TinaFace在微小人脸检测上取得了最先进的性能,但大量的计算成本使其不适用于实时应用。此外,现实世界的人脸检测系统总是要求高精度(如>98%),以避免频繁的误报。如表1所示,当检测分数的阈值提高以满足高精度要求时,TinaFace的AP显著下降。
在这里插入图片描述

三、原理

  首先研究了在不同尺度特征图间重新分配正训练样本(见第3.1节)。然后,探讨了在不同尺度特征图以及不同组件(即backbone、neck和head)间根据预先定义的计算预算重新分配计算(见第3.2节)。

3.1. Sample Reallocation

  在作者设定的人脸检测场景中,步幅为8的特征图是最重要的。图3在WIDER FACE验证数据集上绘制了累积人脸尺度分布。当测试尺度固定为640像素时,78.93%的人脸小于 32 × 32 32 ×32 32×32
在这里插入图片描述

  在训练数据增强过程中,从原始图像中随机裁剪出正方形patch,其大小从原始图像的短边长度的集合[0.3, 1.0]中随机选择。为了为步幅为8生成更多的正样本,将随机尺寸范围从[0.3, 1.0]扩大到[0.3, 2.0]
  当裁剪框超出原始图像时,使用平均RGB值填充缺失的像素。如图 4(a) 所示,在采用提出的大裁剪策略后,小于尺度32的人脸数量增加。此外,即使在大裁剪策略下将会有更多极小的人脸(例如$ < 4 × 4$),由于失败的锚点匹配,这些真实人脸将在训练过程中被忽略。如图4(b) 所示,在尺度为16时,一个时期内的正锚点数量显著增加,从72.3K增加至118.3K,在尺度为32时,从95.9K增加至115.1K。通过重新分配更多训练样本到小尺度,可以更充分地训练用于检测微小人脸分支在主干网络、neck和head的计算分布。
在这里插入图片描述

3.2. Computation Redistributio

直接利用分类网络的主干进行特定尺度人脸检测可能并非最佳选择。因此,采用网络结构搜索[27],在广泛的flop范围内重新分配主干、neck和head模型的计算。将搜索方法应用于RetinaNet[18],以ResNet[12]作为主干,Path Aggregation Feature Pyramid Network (PAFPN)[21]作为neck,以及堆叠的 3 × 3 3×3 3×3卷积层用于head。尽管总体结构简单,但搜索空间中可能的网络总数庞大。在第一步中,探索主干部分(即stem、C2、C3、C4和C5)内计算的重新分配,同时固定neck和head组件。基于找到的主干上的优化计算分配,进一步探索计算在backbone、head和neck之间的重新分配。通过两种方式的优化,实现了用于人脸检测的最终优化网络设计。

3.3 缩减计算搜索空间

  通过重新分配计算来设计更好的网络以实现高效的人脸检测。在固定的计算成本和在图3中呈现的人脸尺度分布的情况下,从模型群体中探索计算分配与性能之间的关系

  在[27]的基础上,探索人脸检测器的结构,假设固定标准网络块(即具有固定瓶颈比为4的基本残差块或瓶颈块)。在这种情况下,人脸检测器的结构包括:(1)backbone中的stem,三个 3 × 3 3 ×3 3×3卷积层,输出通道数为 w 0 w_{0} w0[13],(2)backbone主体,四个阶段逐渐降低分辨率运行的阶段,每个阶段包含一系列相同的块。对于每个阶段 i i i,自由度包括块的数量 d i d_{i} di(即网络深度)和块宽度 w i w_{i} wi(即通道数)。人脸检测器的结构还包括:(3)neck,一个多尺度特征聚合模块,通过自顶向下路径和自底向上路径各具有 n i n_{i} ni通道[21],(4)head,具有 h i h_{i} hi通道的 m m m块来预测人脸分数并回归人脸框。

  由于stem的通道数等于C2中第一个残差块的块宽度,因此stem的自由度可以合并为 w 1 w_{1} w1。此外,为三个尺度的特征图采用共享头部设计,并固定头部内所有 3 × 3 3 × 3 3×3卷积层的通道数。因此,在neck和head设计中将自由度降低到三个:(1)neck部分的输出通道数 n n n,(2)head部分的输出通道数 h h h,以及(3) 3 × 3 3 ×3 3×3卷积层的数量 m m m。对 n ≤ 256 n ≤ 256 n256 h ≤ 256 h ≤ 256 h256 m ≤ 6 m ≤ 6 m6进行均匀采样(n和h都可被8整除)。

  主干搜索空间有8个自由度,因为有4个阶段,每个阶段 i i i有2个参数:块的数量 d i d_{i} di和块宽度 w i w_{i} wi。在[27]的基础上,对 d i ≤ 24 d_{i} ≤24 di24 w i ≤ 512 w_{i} ≤512 wi512 w i w_{i} wi可被8整除)进行均匀采样。由于backbone具有递增的宽度[27],还将搜索空间缩小到符合 w i + 1 ≥ w i w_{i+1} ≥ w_{i} wi+1wi原则。通过上述简化,搜索空间变得更加直观。在搜索空间中重复随机取样,直到获得 320 320 320 个位于目标复杂度范围内的模型,并将每个模型在WIDER FACE 训练集上训练80 个epochs。然后,在验证集上测试每个模型的AP。基于这320 组模型统计数据 ( x i , A P i ) (x_{i}, AP_{i}) (xi,APi),其中 x i x_{i} xi 是特定组件的计算比率, A P i AP_{i} APi 是对应的性能,按照文献 [27] 的方法计算经验自助法(empirical bootstrap)[8] 以估计最佳模型可能落在的范围。

  最后,为进一步减少搜索空间的复杂性,将网络结构搜索分为以下两个步骤:

  1) S C R F D 1 SCRFD_{1} SCRFD1:仅搜索backbone的计算分布,同时将neck和head的设置固定为默认配置。

  2) S C R F D 2 SCRFD_{2} SCRFD2:搜索整个人脸检测器的计算分布(即骨干网络、neck部分和head部分),其中骨干网络内部的计算分布遵循优化的 S C R F D 1 SCRFD_{1} SCRFD1

这里使用2.5 Gflops的SCRFD(SCRFD-2.5GF)作为示例来说明两步搜索策略

在主干上的计算重分配。由于主干执行大部分计算,首先关注主干的结构,这对确定网络的计算成本和准确性至关重要。对于SCRFD1-2.5GF,将neck部的输出通道固定为32,并使用两个堆叠的 3 × 3 3 × 3 3×3卷积,输出通道为96。由于在 S C R F D 1 SCRFD_{1} SCRFD1的整个搜索过程中neck和head部分配置都不会改变,可以轻松找到主干的最佳计算分配。图5展示了320个模型AP(在WIDER FACE难验证集上)与主干的每个组件(即stem、C2、C3、C4和C5)的计算比例的分布。在应用经验bootstrap [8]后,出现了一个明显的趋势,表明主干的计算被重新分配到浅层阶段(即C2和C3)
在这里插入图片描述

  图6展示了主干浅层(即stem、C2和C3)和深层(即C4和C5)之间的计算比例。根据这些搜索结果的观察,约80%的计算被重新分配到浅层阶段

backbone、neck和head的计算重新分配
  在特定计算限制为2.5 Gflops的情况下,找到了backbone内的优化计算分配,接下来寻找骨干backbone、颈部neck和头部head上的最佳计算分配。这一步只保留遵循 S C R F D 1 SCRFD_{1} SCRFD1中计算分配的backbone设置的随机生成的网络配置,如图5所示。

  现在有另外三个自由度(即颈部neck的输出通道数 n n n、头部head的输出通道数 h h h和头部中 3 × 3 3 ×3 3×3卷积层 m m m的数量)。
  在搜索空间中重复随机抽样,直到获得在目标复杂性范围内(即2.5 Gflops)的320个符合条件的模型。

  如图9所示,大部分计算分配在骨干backbone中,其次是头部head,而颈部neck的计算比例最低。图9(d)描述了在2.5 Gflops约束下模型架构的比较。基准的网络配置(ResNet-2.5GF)在表2中介绍。
在这里插入图片描述

在这里插入图片描述

  通过采用建议的两步计算重新分配方法,发现大量容量分配给了浅阶段,从而使WIDER FACE硬验证集上的AP从74.47%提高到77.87%。

3.4 更高的计算范围和移动范围

  除了2.5 Gflops的复杂性限制外,还利用相同的两步计算重新分配方法,探索更高计算范围(例如10 Gflops和34 Gflops)和较低计算范围(例如0.5Gflops)的网络结构优化。图7和图8展示了在不同计算约束下的计算重新分配和优化的网络结构。
在这里插入图片描述

在这里插入图片描述

  最终的架构几乎与基线网络具有相同的flops。从这些重新分配结果,可以得出以下结论:
  1) 更多的计算分配给骨干backbone,而颈部neck和头部head的计算被压缩;
  2) 对于2.5 Gflops、10 Gflops和34 Gflops组织,由于WIDER FACE上的特定尺度分布,更多容量被重新分配到浅阶段
  3) 对于高计算量组织(例如34 Gflops),所探索的结构利用了瓶颈残差块,并观察到显著的深度扩展,而不是在浅阶段进行宽度扩展。根据[1],在较小的参数增加上关于宽度的扩展容易过拟合。相比之下,在浅层中增加深度引入的参数较少;
  4) 对于移动组织(0.5 Gflops)将有限容量分配给深阶段(例如C5)以捕获深阶段的区分特征,可以使顶部向下的颈部路径受益于浅小面部检测。

四、实验

4.1. Implementation Details

训练。对于基准方法,从原始图像中随机裁剪方形patch,大小范围为原图像短边长的[0.3, 0.45, 0.6, 0.8, 1.0],然后将这些patch调整大小为 640 × 640 640 ×640 640×640进行训练。对于提出的样本重分配(SR),通过添加原图像短边长的[1.2, 1.4, 1.6, 1.8, 2.0]比例来扩大随机大小集。除了尺度增强外,训练数据还通过颜色失真和随机水平翻转进行增强,概率为0.5。对于锚点设置,将{16, 32}{64, 128}和{256, 512}的锚点铺设在步长为8、16和32的特征图上。锚点比设置为1.0。文中采用了自适应训练样本选择(ATSS)[37]进行正锚点匹配。在检测头部head,使用了权重共享和Group Normalisation[33] [31]。分类和回归分支的损失分别为广义焦点损失(GFL)[16]和DIoU损失[40]

  实验是基于开源的mmdetection[3]在PyTorch中实现的。采用SGD优化器(动量0.9,权重衰减5e-4),批量大小为 8 × 4 8 ×4 8×4,在四个Tesla V100上进行训练。初始学习率设置为0.00001,在前3个epoch线性增加到0.01。在网络搜索期间,学习率在第56和第68个epoch时乘以0.1。学习过程在第80个epoch结束。对于在搜索之后重新训练的基线和最佳配置,学习率在第440和第544个epoch时降低10倍,学习过程在第640个epoch终止。对于表2中的计算受限基线,也采用相同的训练时间表。所有模型均从头开始训练,没有进行任何预训练。

测试。仅使用单尺度测试,边界为VGA分辨率( 640 × 480 640 × 480 640×480)。DSFD [15]、RetinaFace [7]、TinaFace[41]和Faceboxes [38]的结果是通过测试已发布的模型获得的,而HAMBox [23]模型是从作者处获得的共享模型。

4.2. Ablation Study

在这里插入图片描述

  表3逐步展示了通过逐渐引入提出的样本和计算重分配方法得到的模型的AP表现。基线模型(即在表2中介绍的ResNet-2.5GF)在验证子集中的三种设置分别为91.87%,89.49%和67.32%。通过添加样本重分配,难集合AP显著增加到74.47%,表明在步长为8的特征图上分配更多的训练样本是有益的

  在骨干和整个检测器上分别应用提出的计算重分配后,难样本上的AP提高到69.78%和70.98%。这表明:

  1) 直接继承自分类任务的网络结构对于人脸检测任务是次优的。

  2) 在骨干backbone、颈部neck和头部head上进行联合计算重分配优于仅在骨干上应用计算优化。此外,提出的两步计算重分配策略实现了71.37%的AP,超过在整个检测器上进行一步计算重分配的0.39%。由于通过提出的两步策略缩小了整个搜索空间,并且随机模型采样数目固定为320,因此两步方法可能会在庞大的搜索空间中找到更好的网络配置。由于样本重分配和计算重分配是正交的,它们的结合(即SCRFD-2.5GF)显示出进一步的改进,在难样本上实现了77.87%的AP。

4.3 Accuracy and Efficiency on WIDER FACE

在这里插入图片描述

在这里插入图片描述

  表4和图10将提出的方法与其他最先进的人脸检测算法(如DSFD[15]、RetinaFace[7]、HAMBox[23]和TinaFace[41])进行了比较。由于将测试尺度固定在640,所以浮点运算数(flops)和推理时间直接对应于报告的AP。

  提出的SCRFD-34GF在三个子集上的表现均优于所有这些最先进的方法,尤其是对于包含大量微小人脸的高难度跟踪情况
  具体而言,SCRFD-34GF在GPU上比TinaFace表现更优,性能提升达到3.86%,同时速度更快3倍以上。此外,SCRFD-34GF的计算成本仅约为TinaFace的20%。由于SCRFD-34GF在较早的层级中增加了深度,还引入了更少的参数,导致模型尺寸更小(9.80M)。

  总的来说,所有提出的SCRFD模型(如SCRFD-34GF、SCRFD-10GF、SCRFD-2.5GF和SCRFD-0.5GF)相较于基线模型(表2中列出)均通过仅优化网络结构(即重分配计算)在广泛的计算范围内取得了显著的改进。在低计算的范围中,SCRFD-0.5GF在困难样本AP上明显高于RetinaFaceM0.25达21.19%,同时计算和推理时间仅分别为63.34%和45.57%。

  对于真实世界的人脸检测系统,需要高精度,例如>98%,以避免频繁的误报。如10(d)图所示,当阈值评分提高以达到高于98%的精度时,SCRFD-2.5GF在AP (53.7%)方面与TinaFace (53.9%)相媲美,而计算成本仅为1.46%,推理时间仅为10.8%。

  图10(e)展示了由SCRFD-2.5GF生成的定性结果。可以看出,所提出的人脸检测器在不同条件下(如姿势、遮挡和光照引起的外观变化)的室内外拥挤场景中运行良好。在广泛的尺度范围内表现出色表明SCRFD-2.5GF具有很高的召回率,即使在没有大尺度测试的情况下也能准确检测到人脸。

五、总结

  文中提出了一种样本和计算重新分配范式,用于高效的人脸检测。与当前最先进技术相比,实验结果显示出所提出的SCRFD 在各种计算规模下显著改善了准确性和效率的权衡。


http://www.ppmy.cn/news/1524346.html

相关文章

Rust 变量基础知识

文章目录 发现宝藏一、 Rust变量与可变性二、变量与常量三、变量隐藏&#xff08;shadowing&#xff09; 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 一、 Rust变量与可变性…

Zabbix自定义监控项与触发器

当我们需要获取某台主机上的数据时&#xff0c;直接利用 zabbix 提供的模板可以很方便的获得需要的数据,但是有些特别的数据&#xff0c;利用这些现有的模板或监控项是无法实现的&#xff0c;例如网站状态信息的监控、mysql数据库主从状态等信息。这是就需要自己定义键值和监控…

【玩转贪心算法专题】406. 根据身高重建队列【中等】

【玩转贪心算法专题】406. 根据身高重建队列【中等】 1、力扣链接 https://leetcode.cn/problems/queue-reconstruction-by-height/ 2、题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。…

反激电路的参数设计,基于TI-UC3843芯片,Simplis仿真验证

采用TI官方提供的UC3843芯片手册给的DEMO图&#xff0c;通过MATHCAD计算参数得出环路补偿的各项参数&#xff0c;最后使用simplis进行仿真验证&#xff0c;一起进行学习吧。 UCx84x 电流模式 PWM 控制器 datasheet (Rev. G) (semiee.com) UCx84x 系列控制集成电路提供了实现离…

HCIP--<OSPF2>

目录 一&#xff0c;OSPF的不规则区域 1&#xff09;远离骨干区域的非骨干区域 2&#xff09;不连续骨干区域(和上面一样) 二&#xff0c;OSPF数据库表 三。优化OSPF的LSA&#xff08;缺少LSA的更新量&#xff09; [1]手工汇总&#xff1a;减少骨干区域的LSA [2]特殊区域&…

零基础小白能学网络安全吗?

最近看到很多朋友都在问“零基础能学网络安全吗&#xff1f;” 今天整一篇帮大家分析一下&#xff0c;希望对你有帮助。 首先&#xff0c;问出这个问题的朋友&#xff0c;我大致判断一下&#xff0c;你对网络安全并不了解&#xff0c;只是单纯看到某个视频某篇文章&#xff0…

React第四章(babel)

Babel 什么是Babel? Babel 是一个 JavaScript 编译器,提供了JavaScript的编译过程&#xff0c;能够将源代码转换为目标代码。 AST -> Transform -> Generate 官网 https://babeljs.io/ 查看AST https://astexplorer.net/ Babel所有的包 https://babeljs.io/docs/ba…

Spring Boot事务管理

事务管理 事务进阶 如果在删除了部门之后&#xff0c;出现了异常。那么就会出现部门被删除之后其中的员工并未被删除。 Transactional注解&#xff0c;在事务执行完成之后自动提交或者回滚。只需要在执行多次数据修改的事务上加上该注解即可。&#xff08;比如两次Update或者…