博客
关于我
MTCNN论文实现细节详解 附疑难点纯手绘讲解图 python
阅读量:215 次
发布时间:2019-02-28

本文共 1237 字,大约阅读时间需要 4 分钟。

论文解读:P、R、O网络结构与实现

本文对P、R、O网络结构进行解读,详细分析网络的工作流程及其实现步骤,并探讨其中的难点。


1. 论文概述

本研究基于P、R、O网络框架,旨在实现面部关键点检测。网络由三个部分组成:P网络、R网络和O网络,分别负责初步检测、精确检测和优化检测。


2. P、R、O网络结构图解

P网络、R网络和O网络通过多级特征学习,逐步提升人脸检测的精度。以下是网络的主要组成部分:

  • P网络:负责初步的人脸框定,采用全卷积结构,支持多尺度输入。
  • R网络:基于P网络的结果,进一步精确人脸框定。
  • O网络:对R网络的输出进行优化,提升检测精度。

3. 代码实现步骤

代码实现分为以下几个阶段:

  • 样本预处理

    数据集采用celeba,生成三种尺寸(12×12、24×24、48×48),每种尺寸包含正样本、负样本及部分中性样本。

  • P网络实现

    • 写P网络:设计包含多个卷积层的网络结构,支持多尺度输入。
    • 训练网络:利用预处理后的数据集进行训练,输出pkl权重文件。
  • 测试流程

    • P网络测试

      • 输入任意大小的图像(min(w,h) ≥ 12),将图像转换为数据格式并升维到4维。
      • 经过P网络(_cls, _offset = self.pnet(img_data))得到置信度与偏移量。
      • 选取置信度大于阈值(0.6)的框定结果,经边框回归(平移、缩放逆操作)得到原图人脸附近的预测框坐标,并补充金字塔操作生成更多框定候选。
    • R网络测试

      • 将P网络输出的框定结果补充为正方形(convert_to_square),在原图上剪裁可能为人脸的区域并缩小至24×24。
      • 经过R网络(_cls, _offset = self.rnet(imgdataset))输出置信度与偏移量,选取置信度大于0.6的框定结果,经边框回归得到原图坐标。
    • O网络测试

      • 与R网络类似流程,但置信度阈值由0.6提高至0.7,且非极大值抑制(NMS)时设置isMin=True。

  • 4. 难点分析

    本实现的难点在于对多个方法的理解与应用,尤其是以下几个方面:

  • 图像金字塔

    图像金字塔仅在推理阶段使用,训练时不需要多尺度样本。P网络可看作一个12×12的大卷积核,以stride=2的步长在全图上做滑窗操作。

  • iou(交叠度)

    计算两个框的交叠程度,值越高表示交叠越大。

  • nms(非极大值抑制)

    根据iou值将重叠度较低的框排除。

  • convert_to_square

    将P网络输出的框定结果补充为正方形。

  • 边框回归(box_reg)

    根据偏移量和缩放因子,计算框定框的最终坐标。


  • 5. 效果图展示

  • 原图

    输入图像可能包含多个人脸区域。

  • P网络输出

    得到多个候选框定框,部分框可能局部化。

  • R网络输出

    精确筛选出高置信度的框定框。

  • O网络输出

    对最终框定框进行优化,提升检测精度。


  • 后续进度展望

    本研究基于P、R、O网络框架,计划依次研究YOLO系列(v1、v2、v3),探讨其优缺点与应用场景。

    转载地址:http://trpi.baihongyu.com/

    你可能感兴趣的文章
    pandas某一列转数组list
    查看>>
    Pandas模块,我觉得掌握这些就够用了!
    查看>>
    Pandas玩转文本处理!
    查看>>
    SpringBoot 整合 Mybatis Plus 实现基本CRUD功能
    查看>>
    pandas的to_sql方法中使用if_exists=‘replace‘
    查看>>
    Springboot ppt转pdf——aspose方式
    查看>>
    pandas读取csv编码utf-8报错
    查看>>
    pandas读取parquet报错
    查看>>
    pandas读取数据用来深度学习
    查看>>
    pandas读取文件时,不去掉前面的0 保留原有的数据格式
    查看>>
    Pandas进阶大神!从0到100你只差这篇文章!
    查看>>
    spring5-介绍Spring框架
    查看>>
    pandas,python - 如何在时间序列中选择特定时间
    查看>>
    Spring 框架之 AOP 原理深度剖析
    查看>>
    Pandas:如何按列元素的组合分组,以指示基于不同列的值的同现?
    查看>>
    Pandas:将一列与数据帧的所有其他列进行比较
    查看>>
    PANDA和GLOB:将文件夹中的所有xlsx文件转换为CSV类型错误:__init__()获得意外的关键字参数‘;xfid‘;
    查看>>
    panda查找想要找的行合并成一个新pd
    查看>>
    PANDA:基于多列对数据表的行运行计算,并将输出存储在新列中
    查看>>
    PandoraFMS 监控软件 SQL注入漏洞复现
    查看>>