原始题目 | Sample and Computation Redistribution for Efficient Face Detection |
---|---|
中文名称 | 采样和计算 重分配的 高效人脸检测 |
发表时间 | 2021年5月10日 |
平台 | ICLR-2022 |
来源 | Imperial College, InsightFace |
文章链接 | https://arxiv.org/pdf/2105.04714.pdf |
开源代码 | 官方实现:https://github.com/deepinsight/insightface |
尽管在 非受控(uncontrolled)人脸检测 方面已经取得了巨大的进展,但低计算成本和高精度的 高效人脸检测仍然是一个公开的挑战。本文指出 训练数据采样和计算分布策略(training data sampling and computation distribution strategies)是高效准确的人脸检测的关键。在这些观察的激励下,本文提出了两种简单但有效的方法:
(1) 样本再分配(Sample Redistribution (SR)),根据 benchmark 数据集的统计数据,为最需要的阶段 augments training samples;
(2) 计算重分配(Computation Redistribution (CR)),根据精心定义的搜索方法,在模型的 backbone, neck and head 之间重新分配计算。
在 WIDER FACE 数据集
上进行的大量实验表明,在广泛的计算系统中,所提出的 SCRFD家族
具有最先进的效率-精度权衡。特别是,SCRFD-34GF
比最好的竞争对手 TinaFace
的性能提高了 3.86% (AP at hard set),同时在具有 VGA 分辨率图像的 GPUs 上快了3倍以上。
本文提出一种 sample and computation redistribution 范式,用于高效的人脸检测。结果表明,与当前最先进的方法相比,所提出的 SCRFD
在各种计算模式下的精度和效率权衡有了显著提高。
基于上述对 TinaFace
的分析,以及后续细致的实验,我们在人脸检测设计上提出了以下效率改进:
(1) 以 VGA 分辨率(640) 为界限的测试尺度,
(2) 在 stride 4 的特征图上没有放置 anchor 。
特别地,我们在 stride 8 的特征图上放置了 {16,32} 的 anchors ,在 stride 16 上放置了 {64,128} 的 anchors,在 stride 32 上放置了 {256, 512} 的 anchors。由于我们的测试的 尺度 较小,大多数人脸将在 stride 8 上进行预测。
本文首先研究了 positive training samples 在不同特征图尺度上的再分布(第4.1节)。在给定预定义的计算预算的情况下,探索不同尺度的特征图以及不同组件(即 backbone, neck and head )的计算重分配(第4.2节)。
stride 8 的特征图在我们的设置中是最重要的。这在 图3
中很明显,我们在 WIDER FACE validation dataset 上绘制了累积的人脸尺度分布。当测试尺度固定为 640 像素时,78.93% 的人脸小于 32 × 32。
图3。在 WIDER FACE validation dataset (Easy ⊂ Medium ⊂ Hard) 上的累积人脸尺度分布。当长边固定为 640像素 时,大多数 easy faces 大于32×32,大多数 medium faces 大于16 × 16。对于 hard faces ,78.93%的人脸小于32 × 32, 51.85%的人脸小于16×16, 13.36% 的人脸小于8×8。
在 training data augmentation, 从原始图像的短边 集合[0.3,1.0] 中随机大小的方形块被裁剪。为了为 stride 8 生成更多的 positive samples ,我们将随机大小范围从 [0.3,1.0] 扩大到 [0.3,2.0] 。当裁剪框超过原始图像时,平均RGB值 填充缺失的像素。 如图4(a)所示,使用所提出的大裁剪策略后,在 32 的尺度以下有更多的 faces 。此外,即使会有更多非常小的 faces (例如< 4 × 4), 在大裁剪策略下,这些 ground-truth faces 在训练过程中会因 anchor 匹配不成功而被忽略。如图4(b)所示,在 16 的尺度上,一个 epoch 内的 positive anchors 显著增加,从 72.3K 增加到 118.3K,在 32的尺度 上显著增加,从95.9K 增加到 115.1K。通过将更多的 training samples 重新分布到小尺度上,可以更充分地训练 检测 tiny faces 的分支。
就是使用了 大裁剪策略 。
直接利用 分类网络的 backbone 进行特定尺度的人脸检测可能是次优的。因此,我们采用 网络结构搜索[27] 来重新分配 backbone, neck and head 的计算,以适应各种不同的 flop 计划。将所提出的搜索方法应用于 RetinaNet[18],以ResNet[12]为 backbone ,Path Aggregation Feature Pyramid Network (PAFPN)[21]为 neck ,堆叠的 3 × 3 卷积层为 head 。虽然总体结构很简单,但搜索空间中可能的网络总数是难以处理的。在第一步中,探讨了在固定 neck and head 组件时,backbone 部分(即 stem、C2、C3、C4 和 C5 )内计算的重新分配。基于发现的 backbone 上的优化计算分布,进一步探索了计算在 e backbone, neck and head 的重新分配。通过这两种方式的优化,实现了人脸检测的最终优化网络设计。
看起来这里所谓的计算重新分配就是,通过 NAS 搜出来一个网络架构。
Computation search space reduction
本文的目标是通过 重新分配计算,设计更好的网络来进行高效的人脸检测。给定固定的计算成本,以及 图3
所示的人脸尺度分布,我们从模型的总体中探索计算分布和性能之间的关系。
在 RegNet
[27]之后,本文探索了人脸检测器的架构,假设固定的标准网络块(即: basic residual or bottleneck blocks,bottleneck ratio固定为4)。在本例中,人脸检测器的架构包括:
(1) backbone stem ,三个具有 w0 输出通道的 3*3 卷积层 [13],
(2) backbone body ,四个以逐渐 降低的分辨率 运行的阶段,每个阶段由一系列identical 块组成。对于每个阶段 i,自由度包括 块数 d i d_i di (即网络深度)和块宽度 w i w_i wi (即通道数)。
(3) neck, a multi-scale feature aggregation module by a top-down path and a bottom-up path with n i n_i ni channels [21],
(4) head ,具有 m m m 块的 h i h_i hi 通道,用于预测人脸分数和回归人脸框。
由于 stem 的通道数与 C2 中第一个 residual block 的 block width 相等,因此 stem 的自由度可以合并到 w i w_i wi 中。此外,我们采用了一种共享的 head 设计,用于 三尺度的 feature maps ,并固定 heads 中所有 3×3 卷积层的通道数。因此,在我们的 neck 和 head 设计中,我们将自由度减少到三个:
(1) neck 的输出通道数 n,
(2) head 的输出通道数 h,
(3) 3 × 3 卷积层的数量 m。
我们对 n ≤ 256 , h ≤ 256 n≤256, h≤256 n≤256,h≤256 和 m ≤ 6 m≤6 m≤6 进行均匀采样( n 和 h 都能被 8 整除)。
backbone 搜索空间有 8 个自由度,有 4 个阶段,每个阶段 i 有 2 个参数: 块的数量 d i d_i di 和块的宽度 w i w_i wi。遵循 RegNet
[27],对 d i ≤ 24 d_i≤24 di≤24 和 w i ≤ 512 w_i≤512 wi≤512 ( w i w_i wi 可被 8 整除) 进行 均匀采样。由于最先进的 backbones 具有越来越大的宽度[27],还将搜索空间缩小到 w i + 1 ≥ w i w_{i+1}≥w_i wi+1≥wi 的原则。
通过上面的简化,我们的搜索空间变得更加直接。在搜索空间中重复随机采样,直到在目标复杂度范围内获得 320 个模型,并在 WIDER FACE 训练集上训练每个模型 80 个 epoch。然后,在验证集上测试每个模型的 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],以估计最佳模型可能落在的范围。
最后,为了进一步降低搜索空间的复杂度,我们将网络结构搜索分为以下两个步骤:
这里,我们以约束于 2.5 Gflops 的 SCRFD (SCRFD-2.5GF) 为例来说明我们的两步搜索策略。
Computation redistribution on backbone. 在 backbone 上 计算重新分配
由于 backbone 执行了大量的计算,因此我们首先关注 backbone 的架构,它对确定网络的计算成本和准确性至关重要。对于 SCRFD1-2.5GF,我们将 neck 的输出通道固定为 32,并使用两个具有 96 个输出通道的堆叠的 3 × 3 卷积。由于在 S C R F D 1 SCRFD_1 SCRFD1 算法的整个搜索过程中 neck 和 head 的配置是不变的,因此可以很容易地找到 backbone 的最佳计算分布。如 图5
所示,我们显示了 320 个模型APs(在 WIDER FACE hard 验证集上)的分布 与 backbone 的每个组件(即 stem、C2、C3、C4和C5 )的计算比率的对比。
图5。在 2.5 Gflops 约束下固定 neck and head 的 backbone (stem, C2, C3, C4和C5)上的 计算重分配。对于 backbone 中的每个组件,通过 empirical bootstrap 估计估计最佳模型可能下降的计算比率范围。
在应用 empirical bootstrap [8]后,出现了一个明显的趋势,表明 backbone 计算被重新分配到浅层阶段(即 C2和C3 )。在图6中,我们展示了 backbone 的浅层(即 stem, C2, and C3 )和深层(即 C4 和C5)之间的计算比率。从这些搜索结果中可以看出,大约 80% 的计算被重新分配到浅层阶段。
图6。在2.5 Gflops的约束下,backbone 的浅层和深层阶段之间的计算重分配。Computation redistribution on backbone, neck and head.
当我们在 2.5 Gflops 的特定计算约束下找到 backbone 内部的优化计算分布后,我们搜索在 backbone, neck and head 的最佳计算分布。在这一步中,我们只保留随机生成的网络配置,其 骨干网设置遵循 S C R F D 1 SCRFD_1 SCRFD1 的计算分布,如 图5 所示。
现在还有另外三个自由度(即 neck 的输出通道数 n,head 的输出通道数 h,head 的 3 个卷积层数 m)。我们在搜索空间中重复随机抽样,直到我们在目标复杂度范围内获得 320 个合格模型(即 2.5 Gflops )。从 图9
可以看出,大部分的计算分配在 backbone,head 紧随其后,neck 的计算比例最低。图9(d)描述了 2.5 Gflops 约束下的模型架构对比。baseline(ResNet-2.5GF)的网络配置在 表2 中介绍。
通过采用提出的两步计算重分配方法,我们发现大量的 capacity 被分配到浅阶段,导致 AP 在 WIDER FACE hard 验证集上从 74.47% 提高到 77.87%。
Higher compute regimes and mobile regime. 更高的计算状态和移动状态。
除了 2.5 Gflops的复杂度限制外,我们还使用相同的两步计算重分配方法来探索更高计算 状态(regimes)例如 10 Gflops 和 34 Gflops )和 低计算状态(例如0.5 Gflops)的网络结构优化。图7 和 图8 显示了不同计算约束下的计算重分配和优化后的网络结构。
我们最终的体系架构与 baseline 网络有着几乎相同的 flops。从这些重分配结果中,我们可以得出以下结论:
(1) 更多的计算分配在 backbone 上,neck and head 的计算被压缩
(2) 由于在 WIDER FACE 上的特定 scale 分布,2.5 Gflops、10 Gflops 和 34 Gflops 的浅阶段分配了更多的 capacity
(3) 对于高计算状态(例如 34 Gflops),所探索的结构利用了 bottleneck residual block ,我们观察到在浅阶段有显著的深度缩放,而不是宽度缩放。缩放宽度受制于过拟合,因为参数增加较大 [1]。相比之下,缩放深度,特别是在早期的层中,与缩放宽度相比,引入的参数更少
(4) 对于移动端(0.5 Gflops),将深层阶段的有限容量(例如 C5 )分配给深层阶段捕获的判别特征,可以有利于 top-down neck pathway 对浅层 small face 的检测。
说了这么半天,就是 SCRFD 的架构是通过 NAS 搜出来的。
略
参考:人脸检测:SCRFD论文解析