ScrFD人脸检测总结,2021轻量级的人脸检测

论文:Sample and Computation Redistribution for Efficient Face Detectionicon-default.png?t=L892https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2105.04714论文:

Sample and Computation Redistribution for Efficient Face Detection​arxiv.org/abs/2105.04714

代码位置:

deepinsight/insightface​github.com/deepinsight/insightface/tree/master/detection/scrfd正在上传…重新上传取消​

环境安装:

pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple  onnxruntime  mmcv-full mmdet

建议使用如上的顺序,不然可能有依赖问题哦。

有相关问题搜索知识星球号:1453755 【CV老司机】加入星球提问。扫码也可加入:

也可以搜索关注微信公众号: CV老司机

有事可联系牛先生小猪wx号: jishudashou

核心贡献:

  1. 数据均衡 sample 方法
  2. backbone, neck and head 之间的计算均衡

两点: 数据均衡和模型结构均衡【数据均衡通过crop和缩放数据获取到了更多的positive anchor 】

结构搜索过程:

搜索范围:

item content
BackBone ResNet
neck PAFPN
head stacks of 3x3 conv

两大步搜索:

we search for the best computation distribution over the backbone, 
neck and head. In this step, we only keep the randomly generated network configurations
whose backbone settings follow the computation distribution from SCRFD1

首先固定neck和head只搜索backbone,根据mAP得到比较优的backbone的channel比例。

随后随机全部搜索,但是过滤掉不符合backbone的channel的网络结构配置。

backbone 搜索:

基于stem , c2 ,c3 ,c4,c5进行。如下restNet 定义的卷积堆【3,4,6,3】即是c2,c3,c4,c5.组内卷积的通道数即使模型的宽度。steam是进入卷积组之前卷积的通道数。

model = ResNet(Bottleneck, [3, 4, 6, 3], **kwargs)

ScrFD人脸检测总结,2021轻量级的人脸检测_第1张图片

ScrFD人脸检测总结,2021轻量级的人脸检测_第2张图片

固定计算FLOPS为2.5G的计算量时,结合mAP看数值高的部分,上图可以看到80%的计算被集中到了 steam+C2+C3。

全局搜索:

  Now there are another three degrees of freedom (i.e. output channel
 number n for neck, output channel number h for head, and the number of 3x3 convolutional 
layers m in head).

除了符合计算总量,backbone的通道比例,还有三个维度自由度【neck output channel , head ouput channel , conv layer num in head】,搜索过程随机生成模型结构配置。

如下就是一个搜索配置情况以及搜索结果:

ScrFD人脸检测总结,2021轻量级的人脸检测_第3张图片

ResNet34或者ResNet50或者MobileNet作为基础骨干,channel做倍数变化【0.25,0.5】

搜索结果根据方法做了消融实验,看看就好,反正数据蛮好看,策略增加,效果变好!

看一波搜索的结果:

ScrFD人脸检测总结,2021轻量级的人脸检测_第4张图片

ScrFD人脸检测总结,2021轻量级的人脸检测_第5张图片

stem : 可看做进入分组卷积前【首个卷积filter数】
d : 模型深度
w: 模型宽度
neck: 以10G模型为例,按照56通道进行path融合
h : 以10G模型为例,按照3个80通道进行结果回归

最后贴下PAFPN架构图以及scrfd 10G 模型的结构图:供分析。

ScrFD人脸检测总结,2021轻量级的人脸检测_第6张图片

FPN已经证明了加入一条top-down的旁路连接,能给feature增加high-level的语义性有利于分类。 但是low-level的feature是很利于定位用的,虽然FPN中P5也间接得有了low-level的特征,但是信息流动路线太长了如红色虚线所示(其中有ResNet50/101很多卷积层),本文在FPN的P2-P5又加了low-level的特征,最底层的特征流动到N2-N5只需要经过很少的层如绿色需要所示(仅仅有几个降维的卷积)

具体PAFPN在SCRFD的应用可以结构下面的结构图看。

scrfd_10g_bnkps.onnx.png

2M

百度网盘

SCRFD中使用了的几个算子值得注意一下instanceNorm:

BN注重对每个batch进行归一化,保证数据分布一致,因为判别模型中结果取决于数据整体分布。

但是图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。

公式:

def Instancenorm(x, gamma, beta):

    # x_shape:[B, C, H, W]
    results = 0.
    eps = 1e-5

    x_mean = np.mean(x, axis=(2, 3), keepdims=True)
    x_var = np.var(x, axis=(2, 3), keepdims=True)
    x_normalized = (x - x_mean) / np.sqrt(x_var + eps)
    results = gamma * x_normalized + beta
    return results

对于各种Norm的介绍文章:

BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结_I am what i am-CSDN博客_layer normalization​blog.csdn.net/liuxiao214/article/details/81037416正在上传…重新上传取消​

你可能感兴趣的:(计算机视觉)