LFFD: A Light and Fast Face Detector for Edge Devices

摘要

从微信推文中得知此人脸识别算法可以在跑2K图片90fps,仔细一看是在RTX2070下使用tensorrt下才能达到。最近刚好有个目标检测的任务,检测的目的其实差不多,我们篮球组比赛中需要检测篮球和排球,传统方法的鲁棒性不好,因此拟打算用自己写个神经网络结构在nuc x86 cpu下能够取得不错的推理速度和准确率。所以准备参考这篇论文复现并修改实现篮球、排球的实时目标检测任务。

本文提出了轻量级的人脸检测算法,可以达到2K图片90FPS(广告),本文的大体框架是借鉴SSD目标检测框架的,但是却是一个anchor free的人脸检测框架,因为作者认为感受野本身就是天然的anchor,所以作者通过精细设计感受野完成了本篇的人脸检测任务。认为浅层layer的有效感受野应该与小目标size比值较大,这样可以充分利用周围特征对人脸检测的贡献;深层layer由于其感受野比较大,检测大目标,大目标人脸本身有足够的鼻子、眼镜等信息可以帮助判别人脸,所以不需要太大的有效感受野与人脸比例。根据这些想法,作者设计了本文的人脸检测网络结构。

感受野和有效感受野

感受野通俗讲就是feature map上一个点对应原图的一片pixel区域,计算方法也比较简单,我自己简单写了一下。

总结起来公式就是
\[
RF_{i} = RF_{i-1} + (k-1)S\\
其中k为i-1层到i层的kernel size,S为全局stride
\]
其实对于感受野而言,并不是感受野内的所有点都对后面结果起到决定性作用,而是以感受野中心呈高斯分布的区域内的点对后面结果起到关键作用,这区域称为有效感受野ERF。

据此作者得出下面三个对人脸识别很有帮助的结论:

  1. 对于人脸小目标来说,ERF最好能尽可能覆盖context information
  2. 对于中等人脸,ERF只需要覆盖一部分context information
  3. 对于大人脸目标,ERF甚至不需要覆盖其他额外的context information

网络结构

作者认为RF就是天然的anchor,由于人脸目标一般是方的,所以不需要考虑各种比例的box。在box匹配的时候,作者认为rf中心落在gt内的box为正样本,同时落在多个gt中的box为负样本、其他没有落在任何gt中的box也为负样本。此外,作者定义的gray scale,后面再提。

对于这样的网络设计,作者是这么想的:

100 pixels的RF的有效感受野为20-40pixels,所以作者就分了四个part,tiny part的c8 RF SIZE为55,去检测10-15pixels的人脸,c10检测15-20,以此类推。其中rf与avg face scale的比值随着层数加深而减少,高层大感受野预测大目标就不需要太多的context information,前面讲了。

网络实现中全用的3*3和1*1的卷积核,实现起来很简单。data augmentation用了 color distort、Random sampling for each scale和Randomly horizontal flip。

loss是regression loss和classification loss加权和。

regression loss直接简单粗暴L2loss,预测相对值:

classification loss是crossentropy loss。

box匹配的时候定义了gray scale,认为处于gray scale的box也应该为负样本。

对c13出的box而言,其检测的人脸像素为20-40pixels,认为[18,20]以及[40,44]像素的人脸不被c13预测,这是因为这些人脸属于hard目标,网络往往只能看到局部特征,很难判别,所以c13这个brach不预测他,让别的branch预测,对训练有好处。

此外还用了负样本挖掘(sort负样本的loss,选择loss比较大的一部分训练,其他不参与梯度反传,加速收敛)。

训练参数:

xavier初始化、图像标准化x-127.5/127.5、sgd 0.9 momentum,0weight decay,init lr0.1.

1080ti训练了5天。

后续

复现并修改后的BasketNet:https://github.com/aoru45/BasketNet

论文:https://arxiv.org/pdf/1904.10633.pdf

[论文理解] LFFD: A Light and Fast Face Detector for Edge Devices的更多相关文章

  1. 论文阅读(XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network)

    XiangBai——[AAAI2017]TextBoxes:A Fast Text Detector with a Single Deep Neural Network 目录 作者和相关链接 方法概括 ...

  2. [论文理解]关于ResNet的进一步理解

    [论文理解]关于ResNet的理解 这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考. 要解决什么问题 论文的一大贡 ...

  3. [论文理解] CornerNet: Detecting Objects as Paired Keypoints

    [论文理解] CornerNet: Detecting Objects as Paired Keypoints 简介 首先这是一篇anchor free的文章,看了之后觉得方法挺好的,预测左上角和右下 ...

  4. XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network

    XiangBai--[AAAI2017]TextBoxes:A Fast Text Detector with a Single Deep Neural Network 目录 作者和相关链接 方法概括 ...

  5. [论文理解] Receptive Field Block Net for Accurate and Fast Object Detection

    Receptive Field Block Net for Accurate and Fast Object Detection 简介 本文在SSD基础上提出了RFB Module,利用神经科学的先验 ...

  6. Fast R-CNN论文理解

    论文地址:https://arxiv.org/pdf/1504.08083.pdf 翻译请移步:https://blog.csdn.net/ghw15221836342/article/details ...

  7. [论文理解] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 简介 Faster R-CNN是很经典的t ...

  8. [论文理解]Selective Search for Object Recognition

    Selective Search for Object Recognition 简介 Selective Search是现在目标检测里面非常常用的方法,rcnn.frcnn等就是通过selective ...

  9. R-FCN论文理解

    一.R-FCN初探 1. R-FCN贡献 提出Position-sensitive score maps来解决目标检测的位置敏感性问题: 区域为基础的,全卷积网络的二阶段目标检测框架: 比Faster ...

随机推荐

  1. Yii2实现命名范围scope的自定义查询

    Yii中存在scope命名范围这个概念,Yii2里已经废弃了,在实际的项目开发情景中,我们有时需要用到命名范围这种自定义查询 使用场景: cate为栏目分类表,现在需要查询出栏目分类列表中所有的顶级分 ...

  2. 【原创】Themida 2260 虚拟机 FISH 初探(一)

    标 题: [原创]Themida 2260 虚拟机 FISH 初探(一)作 者: xiaohang时 间: 2016-03-03,00:39:37链 接: http://bbs.pediy.com/s ...

  3. Core Graphics绘图

    首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...

  4. 【leetcode 461】. Hamming Distance

    要求: 给定两个整数x和y,0 ≤ x, y < 231. 求x和y的汉明距离. Example: Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 ...

  5. INSERT - 在表中创建新行

    SYNOPSIS INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT ...

  6. 【转】linux下 如何切换到root用户

    转自:https://www.cnblogs.com/xinjie10001/p/6295020.html 默认安装完成之后并不知道root用户的密码,那么如何应用root权限呢? (1)sudo 命 ...

  7. uwsgi_response_write_body报错的几种情况

    1.uwsgi_response_write_body_do(): Broken pipe 出现这种情况一般是由于客户端无法等到服务端的回应而关闭了连接,常出现与nginx + uwsgi的情况,当u ...

  8. 22_2mybatis——CURD

    1.CURD操作 第一步:创建maven工程并导入坐标 <?xml version="1.0" encoding="UTF-8"?> <pro ...

  9. 多线程使用@Async注解创建多线程,自定义线程池

    转载自博客https://www.jianshu.com/p/7ac04a501eba

  10. c++ primer 5th(中文版)勘误

    \(P_{158}\) "末位大于 3" 改为 "末位大于等于 3" \(P_{302}\) \(P_{319}\) // 添加元素用光多余容量 while ( ...