论文:Sample and Computation Redistribution for Efficient Face Detectionhttps://link.zhihu.com/?target=https%3A//arxiv.org/abs/2105.04714论文:
Sample and Computation Redistribution for Efficient Face Detectionarxiv.org/abs/2105.04714
代码位置:
deepinsight/insightfacegithub.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
核心贡献:
两点: 数据均衡和模型结构均衡【数据均衡通过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)
固定计算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】,搜索过程随机生成模型结构配置。
如下就是一个搜索配置情况以及搜索结果:
ResNet34或者ResNet50或者MobileNet作为基础骨干,channel做倍数变化【0.25,0.5】
搜索结果根据方法做了消融实验,看看就好,反正数据蛮好看,策略增加,效果变好!
看一波搜索的结果:
stem : 可看做进入分组卷积前【首个卷积filter数】
d : 模型深度
w: 模型宽度
neck: 以10G模型为例,按照56通道进行path融合
h : 以10G模型为例,按照3个80通道进行结果回归
最后贴下PAFPN架构图以及scrfd 10G 模型的结构图:供分析。
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 normalizationblog.csdn.net/liuxiao214/article/details/81037416正在上传…重新上传取消