SCRFD学习笔记

论文地址:2022-SCRFD-Sample and Computation Redistribution For Efficient Face Detection
代码地址:https://github.com/deepinsight/insightface
注:以下内容仅为个人注意较为重要的部分,仅重点关注阅读了以下内容~

Abstract

  • 开放的挑战:目前在非受控人脸检测方面已经取得了巨大的进步,但是想要得到精确率高、低计算成本的人脸检测仍是现存的挑战;
  • 观察发现计算分布(computation distribution)和 尺度增强(scale augmentation)是从低分辨率图像中检测小人脸的关键;
  • 基于观察发现对上述挑战进行解决:(1)计算再分配(CR,computation redistribution):在模型的主干、颈部和头部之间重新分配计算;(2)样本再分配(SR,sample redistribution):为最需要的阶段增加训练样本;
  • 在常用人脸数据widerface上进行了实验,证明本方法的效率更高、性能更好。
  • 代码开源地址:https://github.com/deepinsight/insightface/
    tree/master/detection/scrfd。

1 Introduction

本文的贡献:

  • 计算再分配(CR,computation redistribution):通过提出一个简化的搜索空间,以及一个两步的搜索策略用于跨部件(backbone,neck和head)的计算再分配。提出的CR可以简单地通过随机搜索增强检测性能;
  • 样例再分配(SR,sample redistribution):设计了一个可搜索的放大和缩小空间,用于人脸特定的尺度增强,在浅阶段自动重新分配更多的训练样本,提高了小人脸的检测性能;
  • 在WIDER FACE上进行的大量实验表明,所提出的SCRFD在广泛的计算机制上显著提高了准确性和效率权衡。

3 Methodology

为了有效、精确地检测低分辨率的小人脸图像 (如:VGA 640 * 480),本文提出两种算法:CR(跨部件间进行计算再分配)、SR(搜索最优的不同比例的样例缩放增强)。

3.1 Computation Redistribution

此小节基于以下图中的网络结构,在backbone、neck与head间进行计算再分配。
在这里插入图片描述

3.1.1 Search Space Design


其实所谓 的搜索空间即为不同模块使用不同参数进行组合以得到不同的网络结构!!!

在本文的进行CR与SR案例中,采样的人脸检测器结构(即上图-Figure2)的细节如下:

  • backbone stem:3个 3 * 3 的卷积层,且输出通道为w1;
  • backbone body:四个阶段(即C2、C3、C4和C5),其在不同阶段的分辨率逐渐降低,同时每个阶段由一系列相同的块组成。但在每阶段中,block的数量(可变相理解为网络深度)与block的宽度(可理解为通道数)是不同的;
  • neck(为PAFPN):一个由自顶向下路径和自底向上路径组成的多尺度特征聚合模块,具有n个通道;
  • head:用通道为hi的m个block预测人脸得分和回归人脸框;

搜索空间的初始设计如下:
由于 Stem 的通道数等于C2中第一个残差块的块宽,因此可以将Stem的自由度w1合并到w2中。此外,作者对三比例尺的特征映射采用共享头部设计,并在头部内固定所有3 × 3卷积层的通道数。因此,在颈部和头的设计中,将自由度减少到3个:(1)颈部输出通道数n,(2)头部输出通道数h, (3) 3 × 3卷积层数m。对n≤256,h≤256,m≤6 (n和h都能被8整除)进行均匀采样。

backbone的搜索空间有8种方案可选:因为backbone包括4个阶段(C2、C3、C4、C5),且每个阶段中有2个参数(blocks的数量与block的宽度),即 4 * 2 = 8

3.1.3 Two-Step Search

为了进一步减少搜索空间的复杂度,本文将本文中提到的网络结构搜索分为两步:
(1) CRFD1:neck与head模块/部件的参数设置为固定参数不变/不修改,仅修改backbone,并进行计算再分配;
(2) CRFD2:在整个框架/face detector结构下进行计算再分配。
注:在以下的案例中,本文将计算量控制在2.5GFlops,为了阐述本节的两步搜寻策略。

Backbone上的计算再分配:
在这里插入图片描述
通过上图可视化结果(Figure3),可以看到backbone中的计算被重新分配到稀疏/浅的阶段(即C2、C3)。
Backbone、neck与head上的计算再分配:
在这里插入图片描述
再次证明了CR的有效性。(因为把大量计算都重新分配到笔记shallow的阶段~)。

3.2 Sample Redistribution

由于人脸检测具有较大的尺度变化(从几个像素到数千像素),目前有两种广泛使用的尺度增强策略,分别为:
(1) random square crop(即按一定比列进行随机裁剪并resized到一定尺寸以生成larger 训练faces数据。);
(2) data anchor sampling(通过对原始图像进行下采样,与(1)方式想法,是为了生成更多小尺度的人脸,带来大量的填充区域。);

以上两种数据增强方式的缺陷:
以上这两种增强方式均可在WidefFace上带来较好的结果,但这些缩放参数针对不同网络结构均需手动设置,因此训练样本在特征金字塔上的分布可能是次优的。

本文解决方法:
为了解决人脸检测中极端的尺度变化,本文作者设计了一个由缩放因子s_i和概率p_i控制的可搜索的放大和缩小空间。

4 Experiments

4.1 Implementation Details

Training:
数据相关处理

  • 将随机裁剪的图像最终resize到 640 * 640 以用于训练 ;
  • 数据增强方式:缩放增强、色彩失真、随机水平翻转(概率为0.5)。
    锚点/锚框设置
    本文anchors获取方式:以步幅为 8 、16和32在{16, 32}, {64,128} 和 {256, 512} 特征图上。锚比设置为1:0。
    采用ATSS(adaptive training sample selection)用于正例锚框匹配。
    检测头中
    使用GN与权重共享;
    损失项(分类和回归项)
    GFL(Generalized Focal Loss)用于分类;DIoU用于回归。
    优化器
    SGD,momentum0.9,weight_decay5e-4。其中在前3个阶段内,学习率线性升warm up到0.015。
    Testing:
    测试阶段,为了与其他方法公平比较,在此阶段本文主要采用三种不同的测试策略:单尺度VGA分辨率(640 × 480)、单尺度原始分辨率和多尺度测试。
    主要与以下几种方法进行比较
    (1) Faceboxes;(2017)
    (2) DSFD(2019);
    (3) LFFD(2019);
    (4) RetinaFace(2020);
    (5) TinaFace(2020);
    (6) HAMBox(2020);
    (7) BFBox(2020);
    (8) libfacedetection(2021);

4.2 Ablation Study

4.4 Accuracy and Efficiency Comparisons on Wider Face

在这里插入图片描述
在这里插入图片描述

5 Conclusions

  • 本文提出了一个样本和计算再分配的范式用于有效的人脸检测——SCRFD
  • 实验结果证明了本方法有着更优的准确率和更高的效率;
  • 同时也请Tencent的Hui Ni进行了SCRFD的端侧部署: https://github.com/nihui/ncnn-android-scrfd。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值