快速人脸检测论文阅读系列之《FaceBoxes:A CPU Real-time Face Detector with High Accuracy》

介绍:

人脸检测中速度和精度的平衡很难做到。虽然像cascaded cnn\MTCNN人脸检测精度和速度上已经都很快了,但是这两个网络结构都有以下问题存在:

1、推理时间随着图像中人脸个数的增加而增加;

         简要说明:级联的CNN用来做人脸检测,往往是第一个CNN用来产生候选的区域,然后再将候选区域送入后续的CNN中。那么图像中人脸个数的增加,候选区域的个数也就增加,这样势必会导致后续CNN推理时间的增加。人脸个数少的场景影响不大(比如自拍),但是如果涉及到人脸个数多的场景(比如机场车站等环境下),模型的推理时间可能会大幅增加。

2、虽然单个模型是优化的,但是级联后却并不能保证模型的最优;

3、对于VGA分辨率的图像(这里应该指的是640*480)的图像,前向推理FPS只有14,还不足够达到实时。

本篇论文主要贡献如下:

1、设计了Rapidly Digested Convolutional Layers;

2、引入了Mutiple Scale Convolutional Layers;

3、为了提高小脸的召回率,提出了新的anchor densification strategy;

4、在I5 CPU上测试速度为38ms。

主要内容:

网络结构如下所示:

Anchor densification strategy:

Inception的anchor尺度为32*32,64*64,128*128,Conv3_2、Conv4_2的尺度分别为256*256和512*512。

anchor的间隔和相应的层的stride相等。比如Conv3_2的stride是64、anchor大小为256*256,表示对应输入图片每64像素大小有一个256*256的anchor。anchor密度为:

    Adensity = Ascale/Ainterval

Ascale 表示anchor的尺度,Ainterval 表示anchor间隔。默认间隔分别设置为32,32,32,64.根据公式,对应的密度分别为1,2,4,4,4.显然在不同尺度上anchor的密度不均衡。相比大的anchor(128-512),小的anchor(32和64)过于稀疏,将会导致在小脸检测中低的召回率。

为解决不均衡问题,此处提出新的anchor策略。为了加大一种anchor的密度,在一个感受野的中心均匀的堆叠n2 个anchor(本来是1个)用来预测。

文章里对32*32的anchor做了4倍,对64*64的anchor做了2倍,这样就可以保证不同尺度的anchor有相同的密度。

本论文的启发点:

1、对于物体检测中的小目标也可以借鉴本文中的anchor densification straytegy来提高小目标的召回率;

2、在对于某些速度要求较高的场合下,可以借鉴本文中的CRELU部署在前两三个Convolution上,加快推理速度,不用修改代码即可完成部署。

 

如上图所示:将Batchnorm后取反,然后concat起来,接上SCALE和Relu即可。比如采用power layer就可以完成取反的工作。具体的prototxt如下所示:

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 24
    pad: 3
    kernel_size: 7
    stride: 4
    bias_term: false
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
  }
}
layer {
  name: "conv1_bn"
  type: "BatchNorm"
  bottom: "conv1"
  top: "conv1"
  batch_norm_param {
    use_global_stats: false
  }
}
layer {
  name: "conv1_neg"
  type: "Power"
  bottom: "conv1"
  top: "conv1_neg"
  power_param {
    power: 1
    scale: -1.0
    shift: 0
  }
}
layer {
  name: "conv1_concat"
  type: "Concat"
  bottom: "conv1"
  bottom: "conv1_neg"
  top: "conv1_concat"
}
layer {
  name: "conv1_scale"
  type: "Scale"
  bottom: "conv1_concat"
  top: "conv1_concat"
  scale_param {
    bias_term: true
  }
}
layer {
  name: "conv1_relu"
  type: "ReLU"
  bottom: "conv1_concat"
  top: "conv1_concat"
}

3、纸上得来终觉浅,绝知此事要躬行。当认识到一个算法的缺点和适用范围才算真正理解它。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liqiming100

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值