【EMFace】《EMface: Detecting Hard Faces by Exploring Receptive Field Pyramids》

在这里插入图片描述

arXiv-2021



1 Background and Motivation

尺度变化是人脸检测中最具挑战性的问题之一

在这里插入图片描述

Modern face detectors employ feature pyramids to deal with scale variation

但是特征金字塔存在如下问题:

it might break the feature consistency across different scales of faces(想表达的是一定范围的尺寸人脸,eg 50~100大小的,都落在一张特征图上,怕特征图 hold 不住)

作者对特征金字塔进行改进,提出 EMFace(EXPLORING RECEPTIVE)

2 Related Work

  • CNN-based face detection
  • receptive fields for recognition tasks
    • ASPP
    • RFB Net
    • Deformable convolution

3 Advantages / Contributions

  • 提出 EMFace,核心模块为感受野金字塔(Receptive Field Pyramid)
  • 感受野金字塔中的 pooling 模块,多分支训练,单分支测试,速度得以提升
  • 在 WIDER FACE 和 UFDD 数据集上,验证了其速度和精度
    在这里插入图片描述

The branch pooling balances the representations of parallel branches during training and enables a single branch to implement inference during testing

4 Method

在这里插入图片描述
特征金字塔 P2~P7,这个本身应该提点很猛,哈哈哈

RFP 的细节如下

  • multi-branch convolution layer
  • branch pooling layer
    在这里插入图片描述

先经过三个权重共享的空洞卷积+残差结构

在这里插入图片描述
再接个 Branch Pooling 结构

在这里插入图片描述
B = 3

RFP 输入输出维度相同

代码:https://github.com/emdata-ailab/EMface

class MRF(nn.Module):
    def __init__(self,in_planes):
        super(MRF,self).__init__()
        self.share_weight=nn.Parameter(torch.randn(in_planes,in_planes,3,3)) # 共享权重,卷积核 3x3
        self.bn1=nn.BatchNorm2d(in_planes)
        self.bn2=nn.BatchNorm2d(in_planes)
        self.bn3=nn.BatchNorm2d(in_planes)
        self.relu1=nn.ReLU(inplace=True)
        self.relu2=nn.ReLU(inplace=True)
        self.relu3=nn.ReLU(inplace=True)
    def forward(self,x):
        residual=x
        x1=F.conv2d(x,self.share_weight, stride=1, padding=1,bias=None, dilation=1)
        x1=self.bn1(x1)
        x1=x1+residual
        x1=self.relu1(x1)
        x2=F.conv2d(x,self.share_weight, stride=1, padding=3,bias=None, dilation=3)
        x2=self.bn2(x2)
        x2=x2+residual
        x2=self.relu2(x2)
        x3=F.conv2d(x,self.share_weight,stride=1, padding=5,bias=None, dilation=5)
        x3=self.bn3(x3)
        x3=x3+residual
        x3=self.relu3(x3)
        y=torch.cat((x1, x2, x3), dim=1) # (n, 3*in_planes, h, w)
        b,c,h,w=y.size()
        y=y.view(b,3,c//3,h,w) # (n, 3, in_planes, h, w)
        y1=y.mean(dim=1,keepdim=True) # (n, 1, in_planes, h, w)
        y=y1.view(b,-1,h,w) # (n, in_planes, h, w)
        return y

调用

self.MR1=MRF(256)
self.MR2=MRF(256)
self.MR3=MRF(256)
self.MR4=MRF(256)
self.MR5=MRF(256)
self.MR6=MRF(256)

5 Experiments

ResNet50 + FPN

5.1 Datasets and Metrics

WIDER FACE and UFDD

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

metrics 为 AP

5.2 Ablation Study

(1)Number of Branches

在这里插入图片描述
3 个 Branch 计算量和精度权衡最好

(2)Weight Sharing.

在这里插入图片描述
RFP 中 multi-branch convolution 的权重 share 参数量减少很多,精度略微下降

(3)Branch Pooling.

在这里插入图片描述
训练的时候 3 branches,测试的时候选择不同的输出方式,输出数量,输出组合形式(BP,add,concat)

we drop out the Branch-1 and Branch-3 (d=1 and d=5 in Figure 4) in RFP and only keep the Branch-2 to output in the
inference phase.

作者测试时最终仅保留了 branch-2 作为输出

在这里插入图片描述

5.3 Comparison with State-of-the-Arts

(1)WIDER FACE
在这里插入图片描述

(2)UFDD
在这里插入图片描述

6 Conclusion(own)

  • 标题单词都搞错了,哈哈,pyramids
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值