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

    MTCNNMulti-task convolutional neural network

    论文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks

    pytorch实现:https://github.com/TropComplique/mtcnn-pytorch

    tensorflow实现:https://github.com/AITTSMD/MTCNN-Tensorflow

    C++实现:https://github.com/foreverYoungGitHub/MTCNN

    MTCNN将人脸区域检测与人脸关键点检测放在了一起,它的主题框架类似于cascade(级联)。总体可分为P-Net、R-Net、和O-Net三层网络结构

    这三个级联的网络分别是:

    • 快速生成候选窗口的P-Net
    • 进行高精度候选窗口过滤选择的R-Net
    • 生成最终边界框与人脸关键点的O-Net

    和很多处理图像问题的卷积神经网络模型,该模型也用到了图像金字塔、边框回归、非最大值抑制等技术。

    构建图像金字塔

    首先将图像进行不同尺度的变换,构建图像金字塔,以适应不同大小的人脸的进行检测。如图Rsize部分。

    P-Net

    全称为Proposal Network,其基本的构造是一个全卷积网络(FCN)。对上一步构建完成的图像金字塔,通过一个FCN进行初步特征提取与标定边框,并进行Bounding-Box Regression调整窗口与非极大值抑制(NMS)进行大部分窗口的过滤。

    P-Net是一个人脸区域的区域建议网络,该网络的将特征输入结果三个卷积层之后,通过一个人脸分类器判断该区域是否是人脸,同时使用边框回归和一个面部关键点的定位器来进行人脸区域的初步建议,该部分最终将输出很多张可能存在人脸的人脸区域,并将这些区域输入R-Net进行进一步处理。

    R-Net

    全称为Refine Network,其基本的构造是一个卷积神经网络,相对于第一层的P-Net来说,增加了一个全连接层,因此对于输入数据的筛选会更加严格。在图片经过P-Net后,会留下许多预测窗口,我们将所有的预测窗口送入R-Net,这个网络会滤除大量效果比较差的候选框,最后对选定的候选框进行Bounding-Box Regression和NMS进一步优化预测结果。

    因为P-Net的输出只是具有一定可信度的可能的人脸区域,在这个网络中,将对输入进行细化选择,并且舍去大部分的错误输入,并再次使用边框回归和面部关键点定位器进行人脸区域的边框回归和关键点定位,最后将输置信度较高的人脸区域,供O-Net使用。对比与P-Net使用全卷积输出的1x1x32的特征,R-Net使用在最后一个卷积层之后使用了一个128的全连接层,保留了更多的图像特征,准确度性能也优于P-Net。

    O-Net

    全称为Output Network,基本结构是一个较为复杂的卷积神经网络,相对于R-Net来说多了一个卷积层。O-Net的效果与R-Net的区别在于这一层结构会通过更多的监督来识别面部的区域,而且会对人的面部特征点进行回归,最终输出五个人脸面部特征点(landmark)。

    是一个更复杂的卷积网络,该网络的输入特征更多,在网络结构的最后同样是一个更大的256的全连接层,保留了更多的图像特征,同时再进行人脸判别、人脸区域边框回归和人脸特征定位,最终输出人脸区域的左上角坐标和右下角坐标与人脸区域的五个特征点。O-Net拥有特征更多的输入和更复杂的网络结构,也具有更好的性能,这一层的输出作为最终的网络模型输出。

    集成架构及系统思想

    MTCNN为了兼顾性能和准确率,避免滑动窗口加分类器等传统思路带来的巨大的性能消耗,先使用小模型生成有一定可能性的目标区域候选框,然后在使用更复杂的模型进行细分类和更高精度的区域框回归,并且让这一步递归执行,以此思想构成三层网络,分别为P-Net、R-Net、O-Net,实现快速高效的人脸检测。在输入层使用图像金字塔进行初始图像的尺度变换,并使用P-Net生成大量的候选目标区域框,之后使用R-Net对这些目标区域框进行第一次精选和边框回归,排除大部分的负例,然后再用更复杂的、精度更高的网络O-Net对剩余的目标区域框进行判别和区域边框回归。

    Reference

    [1] https://zhuanlan.zhihu.com/p/92177798

    [2] http://www.sfinst.com/?p=1683

    [3] https://arxiv.org/ftp/arxiv/papers/1604/1604.02878.pdf

    [4] https://blog.csdn.net/qq_36782182/article/details/83624357

  • 相关阅读:
    Heapsort 堆排序算法详解(Java实现)
    GIve Me A Welcome Hug!
    linux系统救援模式拯救mv libc.so.6文件后无法使用命令的悲剧
    RabbitMQ集群部署
    使用Xshell通过堡垒机登录服务器
    dubbo + zookeeper环境部署
    zookeeper集群部署
    zabbix-3.0.1 添加微信报警
    zabbix-3.0.1结合grafana绘图
    Centos7.2安装zabbix3.0.1简要
  • 原文地址:https://www.cnblogs.com/nanmi/p/13668719.html
Copyright © 2011-2022 走看看