zoukankan      html  css  js  c++  java
  • [*v*/]人脸识别任务算法RetinaFace

    RetinaFace: Single-stage Dense Face Localisation in the Wild

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

    pytorch实现:https://github.com/biubug6/Pytorch_Retinaface

    C++实现:https://github.com/Charrin/RetinaFace-Cpp

    RetinaFace是Insight Face在2019年提出的最新one-stage人脸检测模型,原模型使用了deformable 、convolutiondense regression loss, 在 WiderFace 数据集上达到SOTA。截止2019年8月,原始模型尚未全部开源,目前开源的简化版是基于传统物体检测网络RetinaNet的改进版,添加了SSH网络的检测模块,提升检测精度,作者提供了三种基础网络,基于ResNet的ResNet50和ResNet152版本能提供更好的精度,以及基于mobilenet(0.25)的轻量版本mnet,检测速度更快。

    RetinaFace结构

    简化版mnet结构

    RetinaFace的mnet本质是基于RetinaNet的结构,采用了特征金字塔的技术,实现了多尺度信息的融合,对检测小物体有重要的作用,笔者在这里突然有联想到SSD不就是利用金字塔结构的技术来弥补YOLO对小物体检测效果不好的缺点吗,果然要想兼顾大目标和小目标看来最好是使用金字塔结构来进行多尺度特征融合。RetinaNet的结构如下:

    简化版的mnet与RetinaNet采用了相同的proposal策略,即保留了在feature pyramid net的3层特征图每一层检测框分别proposal,生成3个不同尺度上的检测框,每个尺度上又引入了不同尺寸的anchor大小,保证可以检测到不同大小的物体。

    简化版mnet与RetinaNet的区别除了在于主干网络的选择上替换了ResNet使用了Mobilenet做到了模型的轻量化,最大的区别在于检测模块的设计。mnet使用了SSH检测网络的检测模块,SSH检测模块由SSH上下文模块组成

     上下文模块的作用是扩张预检测区域的上下文信息。上下文模块和conv结合组成了一个检测模块,该检测模块如图:

     上图为SSH网络的检测模块,将一个上下文模块与conv叠加后生成分类头和回归头得到网络的输出。
    mnet网络在使用SSH检测模块的同时实现了多任务学习,即在分类和回归的基础上加入了目标点(landmark点)的回归。官方的网络结构采用了5个目标点的学习,后续也可以修改为更多目标点,比如AFLW中的21个目标点以及常用的68或者106个目标点。

     上图是原版RetinaFace论文中的检测分支图,注意在开源简化版的不包含self-supervision部分,但是有5个关键点的extra-supervision部分。

    检测

    RetinaFace的检测过程和所有的one-stage的检测器过程相似,在github原版的实现上主要在retinaface.py中的detect()中实现,实验中主要可调整的超参数包括threshold, nms_threshold,scale等。

    • threshold : 分类概率的阈值,超过这个阈值的检测被判定为正例
    • nms_threshold : 非极大值抑制(NMS)中的IOU阈值,即在NMS中与正例的IOU超过这个阈值的检测将被舍弃
    • scale : 图像金字塔的缩放值,通过对原图进行由scale值指定的大小缩放得到网络图片的输入大小,注意在检测时网络的输入不必保持相同的大小

    多任务学习

    在目前广泛使用的方案是结合人脸检测和人脸对齐,对齐后的人脸形状为人脸分类提供了更好的特征。在Mask R-CNN中,通过添加一个并行分支来预测目标Mask,显著提高了检测性能。Densepose采用Mask-RCNN的结构,在每个选定区域内获得密集的part标签和坐标。然而,[20,1]中的dense回归分支是通过监督学习训练的。此外,dense分支是一个小的FCN应用于每个RoI预测像素到像素的密集映射[2]
    RetinaFace最大的贡献就是其加入了关键点的分支,这样可以确保检测到的人脸质量,而且在损失函数也只是将其作为一个比较小的约束项,不怎么会影响分类以及人脸框的判断,但是一旦关键点太过偏离就会使loss相对变大(产生约束)[1]

    最终效果

    Reference

    [1] https://blog.csdn.net/wzjwj/article/details/94456036

    [2] https://www.jianshu.com/p/d4534ac94a65

    [3] https://blog.csdn.net/warrentdrew/article/details/98742948

    [4] https://baijiahao.baidu.com/s?id=1645023042411162473&wfr=spider&for=pc

    [5] https://arxiv.org/pdf/1905.00641.pdf

  • 相关阅读:
    17.天堂和地狱只在你的一念之间
    14.事情原来可能更糟
    如何评价一个网站的人气(Link Popularity Check)
    1.人生何必一定要成功
    4.何不看开一点
    字符串到枚举的转换代码
    广州泳场一览表
    收集开源项目
    7.把“失去”当作“抛弃”
    经常使用的Oracle监控语句
  • 原文地址:https://www.cnblogs.com/nanmi/p/13669108.html
Copyright © 2011-2022 走看看